Add shell completion for `--target`

This commit is contained in:
Peter Rifel 2021-07-18 08:37:07 -07:00
parent ce0d8955ef
commit 5b62e73726
No known key found for this signature in database
GPG Key ID: BC6469E5B16DB2B6
3 changed files with 53 additions and 4 deletions

View File

@ -207,7 +207,7 @@ func NewCmdCreateCluster(f *util.Factory, out io.Writer) *cobra.Command {
cmd.Flags().BoolVarP(&options.Yes, "yes", "y", options.Yes, "Specify --yes to immediately create the cluster")
cmd.Flags().StringVar(&options.Target, "target", options.Target, fmt.Sprintf("Valid targets: %s, %s, %s. Set this flag to %s if you want kOps to generate terraform", cloudup.TargetDirect, cloudup.TargetTerraform, cloudup.TargetCloudformation, cloudup.TargetTerraform))
cmd.RegisterFlagCompletionFunc("target", completeTarget)
cmd.RegisterFlagCompletionFunc("target", completeCreateClusterTarget(options))
// Configuration / state location
if featureflag.EnableSeparateConfigBase.Enabled() {
@ -937,6 +937,24 @@ func completeNetworking(options *CreateClusterOptions) func(cmd *cobra.Command,
}
}
func completeCreateClusterTarget(options *CreateClusterOptions) func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
completions := []string{
cloudup.TargetDirect,
cloudup.TargetDryRun,
}
for _, cp := range cloudup.TerraformCloudProviders {
if options.CloudProvider == string(cp) {
completions = append(completions, cloudup.TargetTerraform)
}
}
if options.CloudProvider == string(api.CloudProviderAWS) {
completions = append(completions, cloudup.TargetCloudformation)
}
return completions, cobra.ShellCompDirectiveNoFileComp
}
}
func completeDNSZone(options *CreateClusterOptions) func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
commandutils.ConfigureKlogForCompletion()

View File

@ -115,7 +115,7 @@ func NewCmdUpdateCluster(f *util.Factory, out io.Writer) *cobra.Command {
cmd.Flags().BoolVarP(&options.Yes, "yes", "y", options.Yes, "Create cloud resources, without --yes update is in dry run mode")
cmd.Flags().StringVar(&options.Target, "target", options.Target, "Target - direct, terraform, cloudformation")
cmd.RegisterFlagCompletionFunc("target", completeTarget)
cmd.RegisterFlagCompletionFunc("target", completeUpdateClusterTarget(options))
cmd.Flags().StringVar(&options.SSHPublicKey, "ssh-public-key", options.SSHPublicKey, "SSH public key to use (deprecated: use kops create secret instead)")
cmd.Flags().StringVar(&options.OutDir, "out", options.OutDir, "Path to write any local output")
cmd.MarkFlagDirname("out")
@ -468,8 +468,36 @@ func hasKubecfg(contextName string) (bool, error) {
return false, nil
}
func completeTarget(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return []string{cloudup.TargetDirect, cloudup.TargetDryRun, cloudup.TargetTerraform, cloudup.TargetCloudformation}, cobra.ShellCompDirectiveNoFileComp
func completeUpdateClusterTarget(options *UpdateClusterOptions) func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
commandutils.ConfigureKlogForCompletion()
ctx := context.TODO()
cluster, _, _, directive := GetClusterForCompletion(ctx, &rootCommand, nil)
if cluster == nil {
return []string{
cloudup.TargetDirect,
cloudup.TargetDryRun,
cloudup.TargetCloudformation,
cloudup.TargetTerraform,
}, directive
}
completions := []string{
cloudup.TargetDirect,
cloudup.TargetDryRun,
}
for _, cp := range cloudup.TerraformCloudProviders {
if cluster.Spec.CloudProvider == string(cp) {
completions = append(completions, cloudup.TargetTerraform)
}
}
if cluster.Spec.CloudProvider == string(kops.CloudProviderAWS) {
completions = append(completions, cloudup.TargetCloudformation)
}
return completions, cobra.ShellCompDirectiveNoFileComp
}
}
func completeLifecycleOverrides(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {

View File

@ -83,6 +83,9 @@ const (
OldestSupportedKubernetesVersion = "1.17.0"
// OldestRecommendedKubernetesVersion is the oldest kubernetes version that is not deprecated in kOps.
OldestRecommendedKubernetesVersion = "1.19.0"
)
var (
// TerraformCloudProviders is the list of cloud providers with terraform target support
TerraformCloudProviders = []kops.CloudProviderID{kops.CloudProviderAWS, kops.CloudProviderGCE, kops.CloudProviderALI}
)