diff --git a/cmd/hosts.go b/cmd/hosts.go index c8ecc45..fc777b9 100644 --- a/cmd/hosts.go +++ b/cmd/hosts.go @@ -160,10 +160,11 @@ func hostsRemoveRunE(_ *cobra.Command, args []string) error { func newCommandHostsDefault() *cobra.Command { command := &cobra.Command{ - Use: "set-default", - Short: "установка хоста по-умолчанию", - Args: cobra.ExactArgs(1), - RunE: hostsDefaultRunE, + Use: "set-default", + Short: "установка хоста по-умолчанию", + Args: cobra.ExactArgs(1), + ValidArgsFunction: ArgHostCompletion, + RunE: hostsDefaultRunE, } return command diff --git a/cmd/utils.go b/cmd/utils.go index 7e1b05f..826ad1f 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -34,3 +34,30 @@ func ArgRoleCompletion(_ *cobra.Command, _ []string, toComplete string) ([]strin return suggestions, cobra.ShellCompDirectiveDefault } + +func ArgHostCompletion(_ *cobra.Command, _ []string, toComplete string) ([]string, cobra.ShellCompDirective) { + exitApp := func(err error) { + fmt.Println(err) + os.Exit(1) + } + + var suggestions []string + + workDir, err := filepath.Abs(flagWorkdir) + if err != nil { + exitApp(err) + } + + hosts, err := types.ReadHosts(workDir) + if err != nil { + exitApp(err) + } + + for host := range *hosts { + if toComplete == "" || len(host) >= len(toComplete) && host[:len(toComplete)] == toComplete { + suggestions = append(suggestions, host) + } + } + + return suggestions, cobra.ShellCompDirectiveDefault +} diff --git a/target/playbookctl b/target/playbookctl index 83bf51b..1da9bb7 100755 Binary files a/target/playbookctl and b/target/playbookctl differ