// NewKubectlCommand creates the `kubectl` command and its nested children. func NewKubectlCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command { // Parent command to which all subcommands are added. cmds := &cobra.Command{ Use: "kubectl", Short: "kubectl controls the Kubernetes cluster manager", Long: `kubectl controls the Kubernetes cluster manager. Find more information at https://github.com/kubernetes/kubernetes.`, Run: runHelp, BashCompletionFunction: bash_completion_func, } f.BindFlags(cmds.PersistentFlags()) f.BindExternalFlags(cmds.PersistentFlags()) cmds.SetHelpCommand(NewCmdHelp(f, out)) // From this point and forward we get warnings on flags that contain "_" separators cmds.SetGlobalNormalizationFunc(flag.WarnWordSepNormalizeFunc) cmds.AddCommand(NewCmdGet(f, out)) cmds.AddCommand(set.NewCmdSet(f, out)) cmds.AddCommand(NewCmdDescribe(f, out)) cmds.AddCommand(NewCmdCreate(f, out)) cmds.AddCommand(NewCmdReplace(f, out)) cmds.AddCommand(NewCmdPatch(f, out)) cmds.AddCommand(NewCmdDelete(f, out)) cmds.AddCommand(NewCmdEdit(f, out, err)) cmds.AddCommand(NewCmdApply(f, out)) cmds.AddCommand(NewCmdNamespace(out)) cmds.AddCommand(NewCmdLogs(f, out)) cmds.AddCommand(NewCmdRollingUpdate(f, out)) cmds.AddCommand(NewCmdScale(f, out)) cmds.AddCommand(NewCmdCordon(f, out)) cmds.AddCommand(NewCmdDrain(f, out)) cmds.AddCommand(NewCmdUncordon(f, out)) cmds.AddCommand(NewCmdAttach(f, in, out, err)) cmds.AddCommand(NewCmdExec(f, in, out, err)) cmds.AddCommand(NewCmdPortForward(f, out, err)) cmds.AddCommand(NewCmdProxy(f, out)) cmds.AddCommand(NewCmdRun(f, in, out, err)) cmds.AddCommand(NewCmdStop(f, out)) cmds.AddCommand(NewCmdExposeService(f, out)) cmds.AddCommand(NewCmdAutoscale(f, out)) cmds.AddCommand(rollout.NewCmdRollout(f, out)) cmds.AddCommand(NewCmdLabel(f, out)) cmds.AddCommand(NewCmdAnnotate(f, out)) cmds.AddCommand(NewCmdTaint(f, out)) cmds.AddCommand(cmdconfig.NewCmdConfig(clientcmd.NewDefaultPathOptions(), out)) cmds.AddCommand(NewCmdClusterInfo(f, out)) cmds.AddCommand(NewCmdApiVersions(f, out)) cmds.AddCommand(NewCmdVersion(f, out)) cmds.AddCommand(NewCmdExplain(f, out)) cmds.AddCommand(NewCmdConvert(f, out)) cmds.AddCommand(NewCmdCompletion(f, out)) if cmds.Flag("namespace") != nil { if cmds.Flag("namespace").Annotations == nil { cmds.Flag("namespace").Annotations = map[string][]string{} } cmds.Flag("namespace").Annotations[cobra.BashCompCustom] = append( cmds.Flag("namespace").Annotations[cobra.BashCompCustom], "__kubectl_get_namespaces", ) } return cmds }
// NewKubectlCommand creates the `kubectl` command and its nested children. func NewKubectlCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command { // Parent command to which all subcommands are added. cmds := &cobra.Command{ Use: "kubectl", Short: "kubectl controls the Kubernetes cluster manager", Long: templates.LongDesc(` kubectl controls the Kubernetes cluster manager. Find more information at https://github.com/kubernetes/kubernetes.`), Run: runHelp, BashCompletionFunction: bash_completion_func, } f.BindFlags(cmds.PersistentFlags()) f.BindExternalFlags(cmds.PersistentFlags()) // From this point and forward we get warnings on flags that contain "_" separators cmds.SetGlobalNormalizationFunc(flag.WarnWordSepNormalizeFunc) groups := templates.CommandGroups{ { Message: "Basic Commands (Beginner):", Commands: []*cobra.Command{ NewCmdCreate(f, out, err), NewCmdExposeService(f, out), NewCmdRun(f, in, out, err), set.NewCmdSet(f, out, err), }, }, { Message: "Basic Commands (Intermediate):", Commands: []*cobra.Command{ NewCmdGet(f, out, err), NewCmdExplain(f, out, err), NewCmdEdit(f, out, err), NewCmdDelete(f, out), }, }, { Message: "Deploy Commands:", Commands: []*cobra.Command{ rollout.NewCmdRollout(f, out, err), NewCmdRollingUpdate(f, out), NewCmdScale(f, out), NewCmdAutoscale(f, out), }, }, { Message: "Cluster Management Commands:", Commands: []*cobra.Command{ NewCmdCertificate(f, out), NewCmdClusterInfo(f, out), NewCmdTop(f, out, err), NewCmdCordon(f, out), NewCmdUncordon(f, out), NewCmdDrain(f, out, err), NewCmdTaint(f, out), }, }, { Message: "Troubleshooting and Debugging Commands:", Commands: []*cobra.Command{ NewCmdDescribe(f, out, err), NewCmdLogs(f, out), NewCmdAttach(f, in, out, err), NewCmdExec(f, in, out, err), NewCmdPortForward(f, out, err), NewCmdProxy(f, out), NewCmdCp(f, in, out, err), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ NewCmdApply(f, out), NewCmdPatch(f, out), NewCmdReplace(f, out), NewCmdConvert(f, out), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ NewCmdLabel(f, out), NewCmdAnnotate(f, out), NewCmdCompletion(f, out), }, }, } groups.Add(cmds) filters := []string{ "options", Deprecated("kubectl", "delete", cmds, NewCmdStop(f, out)), } templates.ActsAsRootCommand(cmds, filters, groups...) if cmds.Flag("namespace") != nil { if cmds.Flag("namespace").Annotations == nil { cmds.Flag("namespace").Annotations = map[string][]string{} } cmds.Flag("namespace").Annotations[cobra.BashCompCustom] = append( cmds.Flag("namespace").Annotations[cobra.BashCompCustom], "__kubectl_get_namespaces", ) } cmds.AddCommand(cmdconfig.NewCmdConfig(clientcmd.NewDefaultPathOptions(), out, err)) cmds.AddCommand(NewCmdVersion(f, out)) cmds.AddCommand(NewCmdApiVersions(f, out)) cmds.AddCommand(NewCmdOptions(out)) return cmds }