diff --git a/cmd/delete.go b/cmd/delete.go index 88e92b260ec17d57658d7eba7dd2810cf4337d0d..f875b9538c07b071cb2aa83e03cc245a78a2b398 100644 --- a/cmd/delete.go +++ b/cmd/delete.go @@ -27,6 +27,8 @@ const ( func init() { RootCmd.AddCommand(deleteCmd) + addJsonnetFlagsToCmd(deleteCmd) + addKubectlFlagsToCmd(deleteCmd) addEnvCmdFlags(deleteCmd) deleteCmd.PersistentFlags().Int64(flagGracePeriod, -1, "Number of seconds given to resources to terminate gracefully. A negative value is ignored") } diff --git a/cmd/diff.go b/cmd/diff.go index dd5bff4155b0c6d476b06ae9c1540f1ee1d94885..b773d0a2b601a85bad8ba4debb6988ab6a84d0d0 100644 --- a/cmd/diff.go +++ b/cmd/diff.go @@ -24,6 +24,8 @@ import ( const flagDiffStrategy = "diff-strategy" func init() { + addJsonnetFlagsToCmd(diffCmd) + addKubectlFlagsToCmd(diffCmd) addEnvCmdFlags(diffCmd) diffCmd.PersistentFlags().String(flagDiffStrategy, "all", "Diff strategy, all or subset.") RootCmd.AddCommand(diffCmd) diff --git a/cmd/root.go b/cmd/root.go index afbde568f41dacc3edecdb20893f6c002f97fb79..e4766d2ed4e07b627cde2c0cd98fa4d6ac9abe52 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -63,27 +63,10 @@ var clientConfig clientcmd.ClientConfig func init() { RootCmd.PersistentFlags().CountP(flagVerbose, "v", "Increase verbosity. May be given multiple times.") - RootCmd.PersistentFlags().StringP(flagJpath, "J", "", "Additional jsonnet library search path") - RootCmd.PersistentFlags().StringSliceP(flagExtVar, "V", nil, "Values of external variables") - RootCmd.PersistentFlags().StringSlice(flagExtVarFile, nil, "Read external variable from a file") - RootCmd.PersistentFlags().StringSliceP(flagTlaVar, "A", nil, "Values of top level arguments") - RootCmd.PersistentFlags().StringSlice(flagTlaVarFile, nil, "Read top level argument from a file") - RootCmd.PersistentFlags().String(flagResolver, "noop", "Change implementation of resolveImage native function. One of: noop, registry") - RootCmd.PersistentFlags().String(flagResolvFail, "warn", "Action when resolveImage fails. One of ignore,warn,error") - - // The "usual" clientcmd/kubectl flags - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig - overrides := clientcmd.ConfigOverrides{} - kflags := clientcmd.RecommendedConfigOverrideFlags("") - RootCmd.PersistentFlags().StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to a kube config. Only required if out-of-cluster") - clientcmd.BindOverrideFlags(&overrides, RootCmd.PersistentFlags(), kflags) - clientConfig = clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, &overrides, os.Stdin) - - RootCmd.PersistentFlags().Set("logtostderr", "true") } -// RootCmd is the root of cobra subcommand tree +// RootCmd is the root of all commands that expand Jsonnet code or talk to +// the API server var RootCmd = &cobra.Command{ Use: "kubecfg", Short: "Synchronise Kubernetes resources with config files", @@ -108,6 +91,29 @@ var RootCmd = &cobra.Command{ }, } +func addJsonnetFlagsToCmd(cmd *cobra.Command) { + cmd.PersistentFlags().StringP(flagJpath, "J", "", "Additional jsonnet library search path") + cmd.PersistentFlags().StringSliceP(flagExtVar, "V", nil, "Values of external variables") + cmd.PersistentFlags().StringSlice(flagExtVarFile, nil, "Read external variable from a file") + cmd.PersistentFlags().StringSliceP(flagTlaVar, "A", nil, "Values of top level arguments") + cmd.PersistentFlags().StringSlice(flagTlaVarFile, nil, "Read top level argument from a file") + cmd.PersistentFlags().String(flagResolver, "noop", "Change implementation of resolveImage native function. One of: noop, registry") + cmd.PersistentFlags().String(flagResolvFail, "warn", "Action when resolveImage fails. One of ignore,warn,error") +} + +func addKubectlFlagsToCmd(cmd *cobra.Command) { + // The "usual" clientcmd/kubectl flags + loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() + loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig + overrides := clientcmd.ConfigOverrides{} + kflags := clientcmd.RecommendedConfigOverrideFlags("") + cmd.PersistentFlags().StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to a kube config. Only required if out-of-cluster") + clientcmd.BindOverrideFlags(&overrides, cmd.PersistentFlags(), kflags) + clientConfig = clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, &overrides, os.Stdin) + + cmd.PersistentFlags().Set("logtostderr", "true") +} + func logLevel(verbosity int) log.Level { switch verbosity { case 0: diff --git a/cmd/show.go b/cmd/show.go index 5ea288e549043adc1e299f3ca29f21ae32fa4259..96fbffa69e66798ecbac5f4995f9096122e4cdbf 100644 --- a/cmd/show.go +++ b/cmd/show.go @@ -27,6 +27,8 @@ const ( func init() { RootCmd.AddCommand(showCmd) + addJsonnetFlagsToCmd(showCmd) + addKubectlFlagsToCmd(showCmd) addEnvCmdFlags(showCmd) showCmd.PersistentFlags().StringP(flagFormat, "o", "yaml", "Output format. Supported values are: json, yaml") } diff --git a/cmd/update.go b/cmd/update.go index 987df5ae894bb8a75d1d9b51c141681468b7f626..b37d9dbea24f5b388c5ee94fe9a484dceec36c77 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -49,6 +49,8 @@ const ( func init() { RootCmd.AddCommand(updateCmd) + addJsonnetFlagsToCmd(updateCmd) + addKubectlFlagsToCmd(updateCmd) addEnvCmdFlags(updateCmd) updateCmd.PersistentFlags().Bool(flagCreate, true, "Create missing resources") updateCmd.PersistentFlags().Bool(flagSkipGc, false, "Don't perform garbage collection, even with --"+flagGcTag) @@ -57,9 +59,8 @@ func init() { } var updateCmd = &cobra.Command{ - Use: "update [<env>|-f <file-or-dir>]", - Short: `Update (or optionally create) Kubernetes resources on the cluster using the -local configuration. Accepts JSON, YAML, or Jsonnet.`, + Use: "update [<env>|-f <file-or-dir>]", + Short: `Update (or optionally create) Kubernetes resources on the cluster using the local configuration. Accepts JSON, YAML, or Jsonnet.`, RunE: func(cmd *cobra.Command, args []string) error { flags := cmd.Flags() var err error diff --git a/cmd/validate.go b/cmd/validate.go index 171c1e3d50376b23c887d7c05cb3ca1a0b5cf0b3..d5e6abc88c9d19b5670447b1e09d0fd6fa01c800 100644 --- a/cmd/validate.go +++ b/cmd/validate.go @@ -23,6 +23,8 @@ import ( func init() { RootCmd.AddCommand(validateCmd) + addJsonnetFlagsToCmd(validateCmd) + addKubectlFlagsToCmd(validateCmd) addEnvCmdFlags(validateCmd) }