func newExperimentalCommand(name, fullName string) *cobra.Command { out := os.Stdout experimental := &cobra.Command{ Use: name, Short: "Experimental commands under active development", Long: "The commands grouped here are under development and may change without notice.", Run: func(c *cobra.Command, args []string) { c.SetOutput(out) c.Help() }, BashCompletionFunction: admin.BashCompletionFunc, } f := clientcmd.New(experimental.PersistentFlags()) experimental.AddCommand(validate.NewCommandValidate(validate.ValidateRecommendedName, fullName+" "+validate.ValidateRecommendedName, out)) experimental.AddCommand(tokens.NewCmdTokens(tokens.TokenRecommendedCommandName, fullName+" "+tokens.TokenRecommendedCommandName, f, out)) experimental.AddCommand(exipfailover.NewCmdIPFailoverConfig(f, fullName, "ipfailover", out)) experimental.AddCommand(buildchain.NewCmdBuildChain(name, fullName+" "+buildchain.BuildChainRecommendedCommandName, f, out)) experimental.AddCommand(diagnostics.NewCommandDiagnostics("diagnostics", fullName+" diagnostics", out)) experimental.AddCommand(cmd.NewCmdOptions(out)) // these groups also live under `oadm groups {sync,prune}` and are here only for backwards compatibility experimental.AddCommand(sync.NewCmdSync("sync-groups", fullName+" "+"sync-groups", f, out)) experimental.AddCommand(sync.NewCmdPrune("prune-groups", fullName+" "+"prune-groups", f, out)) return experimental }
// NewCommandOpenShift creates the standard OpenShift command func NewCommandOpenShift(name string) *cobra.Command { in, out, errout := os.Stdin, os.Stdout, os.Stderr product := "Origin" switch name { case "openshift": product = "OpenShift" case "atomic-enterprise": product = "Atomic" } root := &cobra.Command{ Use: name, Short: "Build, deploy, and manage your cloud applications", Long: fmt.Sprintf(openshiftLong, name, product), Run: cmdutil.DefaultSubCommandRun(out), } startAllInOne, _ := start.NewCommandStartAllInOne(name, out) root.AddCommand(startAllInOne) root.AddCommand(admin.NewCommandAdmin("admin", name+" admin", out)) root.AddCommand(cli.NewCommandCLI("cli", name+" cli", in, out, errout)) root.AddCommand(cli.NewCmdKubectl("kube", out)) root.AddCommand(newExperimentalCommand("ex", name+" ex")) root.AddCommand(version.NewVersionCommand(name)) // infra commands are those that are bundled with the binary but not displayed to end users // directly infra := &cobra.Command{ Use: "infra", // Because this command exposes no description, it will not be shown in help } infra.AddCommand( irouter.NewCommandTemplateRouter("router"), irouter.NewCommandF5Router("f5-router"), deployer.NewCommandDeployer("deploy"), builder.NewCommandSTIBuilder("sti-build"), builder.NewCommandDockerBuilder("docker-build"), ) root.AddCommand(infra) root.AddCommand(cmd.NewCmdOptions(out)) // TODO: add groups templates.ActsAsRootCommand(root) return root }
// NewCommandOpenShift creates the standard OpenShift command func NewCommandOpenShift(name string) *cobra.Command { in, out, errout := os.Stdin, term.NewResponsiveWriter(os.Stdout), os.Stderr root := &cobra.Command{ Use: name, Short: "Build, deploy, and manage your cloud applications", Long: fmt.Sprintf(openshiftLong, name, cmdutil.GetPlatformName(name), cmdutil.GetDistributionName(name)), Run: kcmdutil.DefaultSubCommandRun(out), } f := clientcmd.New(pflag.NewFlagSet("", pflag.ContinueOnError)) startAllInOne, _ := start.NewCommandStartAllInOne(name, out, errout) root.AddCommand(startAllInOne) root.AddCommand(admin.NewCommandAdmin("admin", name+" admin", in, out, errout)) root.AddCommand(cli.NewCommandCLI("cli", name+" cli", in, out, errout)) root.AddCommand(cli.NewCmdKubectl("kube", out)) root.AddCommand(newExperimentalCommand("ex", name+" ex")) root.AddCommand(newCompletionCommand("completion", name+" completion")) root.AddCommand(cmd.NewCmdVersion(name, f, out, cmd.VersionOptions{PrintEtcdVersion: true, IsServer: true})) // infra commands are those that are bundled with the binary but not displayed to end users // directly infra := &cobra.Command{ Use: "infra", // Because this command exposes no description, it will not be shown in help } infra.AddCommand( irouter.NewCommandTemplateRouter("router"), irouter.NewCommandF5Router("f5-router"), deployer.NewCommandDeployer("deploy"), recycle.NewCommandRecycle("recycle", out), builder.NewCommandS2IBuilder("sti-build"), builder.NewCommandDockerBuilder("docker-build"), diagnostics.NewCommandPodDiagnostics("diagnostic-pod", out), diagnostics.NewCommandNetworkPodDiagnostics("network-diagnostic-pod", out), ) root.AddCommand(infra) root.AddCommand(cmd.NewCmdOptions(out)) // TODO: add groups templates.ActsAsRootCommand(root, []string{"options"}) return root }
func NewCommandAdmin(name, fullName string, out io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Tools for managing an OpenShift cluster", Long: fmt.Sprintf(adminLong), Run: cmdutil.DefaultSubCommandRun(out), } f := clientcmd.New(cmds.PersistentFlags()) cmds.AddCommand(project.NewCmdNewProject(project.NewProjectRecommendedName, fullName+" "+project.NewProjectRecommendedName, f, out)) cmds.AddCommand(policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out)) cmds.AddCommand(exipfailover.NewCmdIPFailoverConfig(f, fullName, "ipfailover", out)) cmds.AddCommand(router.NewCmdRouter(f, fullName, "router", out)) cmds.AddCommand(registry.NewCmdRegistry(f, fullName, "registry", out)) cmds.AddCommand(buildchain.NewCmdBuildChain(f, fullName, "build-chain")) cmds.AddCommand(node.NewCommandManageNode(f, node.ManageNodeCommandName, fullName+" "+node.ManageNodeCommandName, out)) cmds.AddCommand(cmd.NewCmdConfig(fullName, "config")) cmds.AddCommand(prune.NewCommandPrune(prune.PruneRecommendedName, fullName+" "+prune.PruneRecommendedName, f, out)) // TODO: these probably belong in a sub command cmds.AddCommand(admin.NewCommandCreateKubeConfig(admin.CreateKubeConfigCommandName, fullName+" "+admin.CreateKubeConfigCommandName, out)) cmds.AddCommand(admin.NewCommandCreateBootstrapPolicyFile(admin.CreateBootstrapPolicyFileCommand, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out)) cmds.AddCommand(admin.NewCommandCreateBootstrapProjectTemplate(f, admin.CreateBootstrapProjectTemplateCommand, fullName+" "+admin.CreateBootstrapProjectTemplateCommand, out)) cmds.AddCommand(admin.NewCommandOverwriteBootstrapPolicy(admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out)) cmds.AddCommand(admin.NewCommandNodeConfig(admin.NodeConfigCommandName, fullName+" "+admin.NodeConfigCommandName, out)) // TODO: these should be rolled up together cmds.AddCommand(admin.NewCommandCreateMasterCerts(admin.CreateMasterCertsCommandName, fullName+" "+admin.CreateMasterCertsCommandName, out)) cmds.AddCommand(admin.NewCommandCreateClient(admin.CreateClientCommandName, fullName+" "+admin.CreateClientCommandName, out)) cmds.AddCommand(admin.NewCommandCreateKeyPair(admin.CreateKeyPairCommandName, fullName+" "+admin.CreateKeyPairCommandName, out)) cmds.AddCommand(admin.NewCommandCreateServerCert(admin.CreateServerCertCommandName, fullName+" "+admin.CreateServerCertCommandName, out)) cmds.AddCommand(admin.NewCommandCreateSignerCert(admin.CreateSignerCertCommandName, fullName+" "+admin.CreateSignerCertCommandName, out)) // TODO: use groups templates.ActsAsRootCommand(cmds) if name == fullName { cmds.AddCommand(version.NewVersionCommand(fullName)) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
// NewCmdKubectl provides exactly the functionality from Kubernetes, // but with support for OpenShift resources func NewCmdKubectl(name string, out io.Writer) *cobra.Command { flags := pflag.NewFlagSet("", pflag.ContinueOnError) f := clientcmd.New(flags) cmds := kubecmd.NewKubectlCommand(f.Factory, os.Stdin, out, os.Stderr) cmds.Aliases = []string{"kubectl"} cmds.Use = name cmds.Short = "Kubernetes cluster management via kubectl" cmds.Long = cmds.Long + "\n\nThis command is provided for direct management of the Kubernetes cluster OpenShift runs on." flags.VisitAll(func(flag *pflag.Flag) { if f := cmds.PersistentFlags().Lookup(flag.Name); f == nil { cmds.PersistentFlags().AddFlag(flag) } else { glog.V(5).Infof("already registered flag %s", flag.Name) } }) templates.ActsAsRootCommand(cmds) cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
// NewCmdKubectl provides exactly the functionality from Kubernetes, // but with support for OpenShift resources func NewCmdKubectl(name string, out io.Writer) *cobra.Command { flags := pflag.NewFlagSet("", pflag.ContinueOnError) f := clientcmd.New(flags) cmds := kubecmd.NewKubectlCommand(f.Factory, os.Stdin, out, os.Stderr) cmds.Aliases = []string{"kubectl"} cmds.Use = name cmds.Short = "Kubernetes cluster management via kubectl" flags.VisitAll(func(flag *pflag.Flag) { if f := cmds.PersistentFlags().Lookup(flag.Name); f == nil { cmds.PersistentFlags().AddFlag(flag) } else { glog.V(5).Infof("already registered flag %s", flag.Name) } }) cmds.PersistentFlags().Var(flags.Lookup("config").Value, "kubeconfig", "Specify a kubeconfig file to define the configuration") templates.ActsAsRootCommand(cmds) cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func newExperimentalCommand(name, fullName string) *cobra.Command { out := os.Stdout experimental := &cobra.Command{ Use: name, Short: "Experimental commands under active development", Long: "The commands grouped here are under development and may change without notice.", Run: func(c *cobra.Command, args []string) { c.SetOutput(out) c.Help() }, } f := clientcmd.New(experimental.PersistentFlags()) experimental.AddCommand(tokens.NewCmdTokens(tokens.TokenRecommendedCommandName, fullName+" "+tokens.TokenRecommendedCommandName, f, out)) experimental.AddCommand(exipfailover.NewCmdIPFailoverConfig(f, fullName, "ipfailover", out)) experimental.AddCommand(buildchain.NewCmdBuildChain(name, fullName+" "+buildchain.BuildChainRecommendedCommandName, f, out)) experimental.AddCommand(cmd.NewCmdOptions(out)) return experimental }
// NewCommandOpenShift creates the standard OpenShift command func NewCommandOpenShift(name string) *cobra.Command { out := os.Stdout root := &cobra.Command{ Use: name, Short: "OpenShift helps you build, deploy, and manage your cloud applications", Long: openshiftLong, Run: cmdutil.DefaultSubCommandRun(out), } startAllInOne, _ := start.NewCommandStartAllInOne(name, out) root.AddCommand(startAllInOne) root.AddCommand(admin.NewCommandAdmin("admin", name+" admin", out)) root.AddCommand(cli.NewCommandCLI("cli", name+" cli")) root.AddCommand(cli.NewCmdKubectl("kube", out)) root.AddCommand(newExperimentalCommand("ex", name+" ex")) root.AddCommand(version.NewVersionCommand(name)) // infra commands are those that are bundled with the binary but not displayed to end users // directly infra := &cobra.Command{ Use: "infra", // Because this command exposes no description, it will not be shown in help } infra.AddCommand( irouter.NewCommandTemplateRouter("router"), deployer.NewCommandDeployer("deploy"), builder.NewCommandSTIBuilder("sti-build"), builder.NewCommandDockerBuilder("docker-build"), gitserver.NewCommandGitServer("git-server"), ) root.AddCommand(infra) root.AddCommand(cmd.NewCmdOptions(out)) // TODO: add groups templates.ActsAsRootCommand(root) return root }
// NewCmdKubectl provides exactly the functionality from Kubernetes, // but with support for OpenShift resources func NewCmdKubectl(name string, out io.Writer) *cobra.Command { flags := pflag.NewFlagSet("", pflag.ContinueOnError) f := clientcmd.New(flags) cmds := kubecmd.NewKubectlCommand(f.Factory, os.Stdin, out, os.Stderr) cmds.Aliases = []string{"kubectl"} cmds.Use = name cmds.Short = "Kubernetes cluster management via kubectl" cmds.Long = cmds.Long + ` This command exposes the exact semantics of the Kubernetes command line client with additional support for application lifecycles.` flags.VisitAll(func(flag *pflag.Flag) { if f := cmds.PersistentFlags().Lookup(flag.Name); f == nil { cmds.PersistentFlags().AddFlag(flag) } else { glog.V(5).Infof("already registered flag %s", flag.Name) } }) templates.ActsAsRootCommand(cmds) cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func NewCommandAdmin(name, fullName string, out io.Writer, errout io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Tools for managing a cluster", Long: fmt.Sprintf(adminLong), Run: cmdutil.DefaultSubCommandRun(out), } f := clientcmd.New(cmds.PersistentFlags()) groups := templates.CommandGroups{ { Message: "Basic Commands:", Commands: []*cobra.Command{ project.NewCmdNewProject(project.NewProjectRecommendedName, fullName+" "+project.NewProjectRecommendedName, f, out), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out, errout), groups.NewCmdGroups(groups.GroupsRecommendedName, fullName+" "+groups.GroupsRecommendedName, f, out), }, }, { Message: "Install Commands:", Commands: []*cobra.Command{ router.NewCmdRouter(f, fullName, "router", out), exipfailover.NewCmdIPFailoverConfig(f, fullName, "ipfailover", out, errout), registry.NewCmdRegistry(f, fullName, "registry", out), }, }, { Message: "Maintenance Commands:", Commands: []*cobra.Command{ buildchain.NewCmdBuildChain(name, fullName+" "+buildchain.BuildChainRecommendedCommandName, f, out), diagnostics.NewCmdDiagnostics(diagnostics.DiagnosticsRecommendedName, fullName+" "+diagnostics.DiagnosticsRecommendedName, out), node.NewCommandManageNode(f, node.ManageNodeCommandName, fullName+" "+node.ManageNodeCommandName, out, errout), prune.NewCommandPrune(prune.PruneRecommendedName, fullName+" "+prune.PruneRecommendedName, f, out), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ cmd.NewCmdConfig(fullName, "config"), // TODO: these probably belong in a sub command admin.NewCommandCreateKubeConfig(admin.CreateKubeConfigCommandName, fullName+" "+admin.CreateKubeConfigCommandName, out), admin.NewCommandCreateClient(admin.CreateClientCommandName, fullName+" "+admin.CreateClientCommandName, out), cmd.NewCmdCompletion(fullName, f, out), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ network.NewCmdPodNetwork(network.PodNetworkCommandName, fullName+" "+network.PodNetworkCommandName, f, out), admin.NewCommandCreateBootstrapProjectTemplate(f, admin.CreateBootstrapProjectTemplateCommand, fullName+" "+admin.CreateBootstrapProjectTemplateCommand, out), admin.NewCommandCreateBootstrapPolicyFile(admin.CreateBootstrapPolicyFileCommand, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out), admin.NewCommandCreateLoginTemplate(f, admin.CreateLoginTemplateCommand, fullName+" "+admin.CreateLoginTemplateCommand, out), admin.NewCommandCreateProviderSelectionTemplate(f, admin.CreateProviderSelectionTemplateCommand, fullName+" "+admin.CreateProviderSelectionTemplateCommand, out), admin.NewCommandCreateErrorTemplate(f, admin.CreateErrorTemplateCommand, fullName+" "+admin.CreateErrorTemplateCommand, out), admin.NewCommandOverwriteBootstrapPolicy(admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out), admin.NewCommandNodeConfig(admin.NodeConfigCommandName, fullName+" "+admin.NodeConfigCommandName, out), cert.NewCmdCert(cert.CertRecommendedName, fullName+" "+cert.CertRecommendedName, out, errout), }, }, } groups.Add(cmds) templates.ActsAsRootCommand(cmds, []string{"options"}, groups...) // Deprecated commands that are bundled with the binary but not displayed to end users directly deprecatedCommands := []*cobra.Command{ admin.NewCommandCreateMasterCerts(admin.CreateMasterCertsCommandName, fullName+" "+admin.CreateMasterCertsCommandName, out), admin.NewCommandCreateKeyPair(admin.CreateKeyPairCommandName, fullName+" "+admin.CreateKeyPairCommandName, out), admin.NewCommandCreateServerCert(admin.CreateServerCertCommandName, fullName+" "+admin.CreateServerCertCommandName, out), admin.NewCommandCreateSignerCert(admin.CreateSignerCertCommandName, fullName+" "+admin.CreateSignerCertCommandName, out), } for _, cmd := range deprecatedCommands { // Unsetting Short description will not show this command in help cmd.Short = "" cmd.Deprecated = fmt.Sprintf("Use '%s ca' instead.", fullName) cmds.AddCommand(cmd) } if name == fullName { cmds.AddCommand(version.NewVersionCommand(fullName, false)) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func NewCommandCLI(name, fullName string) *cobra.Command { in := os.Stdin out := os.Stdout // Main command cmds := &cobra.Command{ Use: name, Short: "Client tools for OpenShift", Long: fmt.Sprintf(cliLong, fullName), Run: cmdutil.DefaultSubCommandRun(out), BashCompletionFunction: bashCompletionFunc, } f := clientcmd.New(cmds.PersistentFlags()) loginCmd := cmd.NewCmdLogin(fullName, f, in, out) groups := templates.CommandGroups{ { Message: "Basic Commands:", Commands: []*cobra.Command{ cmd.NewCmdTypes(fullName, f, out), loginCmd, cmd.NewCmdRequestProject("new-project", fullName+" new-project", fullName+" login", fullName+" project", f, out), cmd.NewCmdNewApplication(fullName, f, out), cmd.NewCmdStatus(fullName, f, out), cmd.NewCmdProject(fullName+" project", f, out), }, }, { Message: "Build and Deploy Commands:", Commands: []*cobra.Command{ cmd.NewCmdStartBuild(fullName, f, out), cmd.NewCmdBuildLogs(fullName, f, out), cmd.NewCmdDeploy(fullName, f, out), cmd.NewCmdRollback(fullName, f, out), cmd.NewCmdNewBuild(fullName, f, out), cmd.NewCmdCancelBuild(fullName, f, out), cmd.NewCmdImportImage(fullName, f, out), cmd.NewCmdScale(fullName, f, out), cmd.NewCmdTag(fullName, f, out), }, }, { Message: "Application Modification Commands:", Commands: []*cobra.Command{ cmd.NewCmdGet(fullName, f, out), cmd.NewCmdDescribe(fullName, f, out), cmd.NewCmdEdit(fullName, f, out), cmd.NewCmdEnv(fullName, f, os.Stdin, out), cmd.NewCmdVolume(fullName, f, out), cmd.NewCmdLabel(fullName, f, out), cmd.NewCmdExpose(fullName, f, out), cmd.NewCmdStop(fullName, f, out), cmd.NewCmdDelete(fullName, f, out), }, }, { Message: "Troubleshooting and Debugging Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogs(fullName, f, out), cmd.NewCmdExec(fullName, f, os.Stdin, out, os.Stderr), cmd.NewCmdPortForward(fullName, f), cmd.NewCmdProxy(fullName, f, out), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ cmd.NewCmdCreate(fullName, f, out), cmd.NewCmdUpdate(fullName, f, out), cmd.NewCmdProcess(fullName, f, out), cmd.NewCmdExport(fullName, f, os.Stdin, out), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out), secrets.NewCmdSecrets(secrets.SecretsRecommendedName, fullName+" "+secrets.SecretsRecommendedName, f, out, fullName+" edit"), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out), cmd.NewCmdConfig(fullName, "config"), cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out), }, }, } groups.Add(cmds) templates.ActsAsRootCommand(cmds, groups...). ExposeFlags(loginCmd, "certificate-authority", "insecure-skip-tls-verify") if name == fullName { cmds.AddCommand(version.NewVersionCommand(fullName)) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func NewCommandAdmin(name, fullName string, in io.Reader, out io.Writer, errout io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Tools for managing a cluster", Long: fmt.Sprintf(adminLong), Run: kcmdutil.DefaultSubCommandRun(out), } f := clientcmd.New(cmds.PersistentFlags()) groups := templates.CommandGroups{ { Message: "Component Installation:", Commands: []*cobra.Command{ router.NewCmdRouter(f, fullName, "router", out, errout), exipfailover.NewCmdIPFailoverConfig(f, fullName, "ipfailover", out, errout), registry.NewCmdRegistry(f, fullName, "registry", out, errout), }, }, { Message: "Security and Policy:", Commands: []*cobra.Command{ project.NewCmdNewProject(project.NewProjectRecommendedName, fullName+" "+project.NewProjectRecommendedName, f, out), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out, errout), groups.NewCmdGroups(groups.GroupsRecommendedName, fullName+" "+groups.GroupsRecommendedName, f, out, errout), cert.NewCmdCert(cert.CertRecommendedName, fullName+" "+cert.CertRecommendedName, out, errout), admin.NewCommandOverwriteBootstrapPolicy(admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.OverwriteBootstrapPolicyCommandName, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out), }, }, { Message: "Node Management:", Commands: []*cobra.Command{ admin.NewCommandNodeConfig(admin.NodeConfigCommandName, fullName+" "+admin.NodeConfigCommandName, out), node.NewCommandManageNode(f, node.ManageNodeCommandName, fullName+" "+node.ManageNodeCommandName, out, errout), cmdutil.ReplaceCommandName("kubectl", fullName, templates.Normalize(kubectl.NewCmdCordon(f, out))), cmdutil.ReplaceCommandName("kubectl", fullName, templates.Normalize(kubectl.NewCmdUncordon(f, out))), cmdutil.ReplaceCommandName("kubectl", fullName, templates.Normalize(kubectl.NewCmdDrain(f, out, errout))), cmdutil.ReplaceCommandName("kubectl", fullName, templates.Normalize(kubectl.NewCmdTaint(f, out))), network.NewCmdPodNetwork(network.PodNetworkCommandName, fullName+" "+network.PodNetworkCommandName, f, out, errout), }, }, { Message: "Maintenance:", Commands: []*cobra.Command{ diagnostics.NewCmdDiagnostics(diagnostics.DiagnosticsRecommendedName, fullName+" "+diagnostics.DiagnosticsRecommendedName, out), prune.NewCommandPrune(prune.PruneRecommendedName, fullName+" "+prune.PruneRecommendedName, f, out, errout), buildchain.NewCmdBuildChain(name, fullName+" "+buildchain.BuildChainRecommendedCommandName, f, out), migrate.NewCommandMigrate( migrate.MigrateRecommendedName, fullName+" "+migrate.MigrateRecommendedName, f, out, errout, // Migration commands migrateimages.NewCmdMigrateImageReferences("image-references", fullName+" "+migrate.MigrateRecommendedName+" image-references", f, in, out, errout), migratestorage.NewCmdMigrateAPIStorage("storage", fullName+" "+migrate.MigrateRecommendedName+" storage", f, in, out, errout), ), top.NewCommandTop(top.TopRecommendedName, fullName+" "+top.TopRecommendedName, f, out, errout), }, }, { Message: "Configuration:", Commands: []*cobra.Command{ admin.NewCommandCreateKubeConfig(admin.CreateKubeConfigCommandName, fullName+" "+admin.CreateKubeConfigCommandName, out), admin.NewCommandCreateClient(admin.CreateClientCommandName, fullName+" "+admin.CreateClientCommandName, out), admin.NewCommandCreateBootstrapProjectTemplate(f, admin.CreateBootstrapProjectTemplateCommand, fullName+" "+admin.CreateBootstrapProjectTemplateCommand, out), admin.NewCommandCreateBootstrapPolicyFile(admin.CreateBootstrapPolicyFileCommand, fullName+" "+admin.CreateBootstrapPolicyFileCommand, out), admin.NewCommandCreateLoginTemplate(f, admin.CreateLoginTemplateCommand, fullName+" "+admin.CreateLoginTemplateCommand, out), admin.NewCommandCreateProviderSelectionTemplate(f, admin.CreateProviderSelectionTemplateCommand, fullName+" "+admin.CreateProviderSelectionTemplateCommand, out), admin.NewCommandCreateErrorTemplate(f, admin.CreateErrorTemplateCommand, fullName+" "+admin.CreateErrorTemplateCommand, out), }, }, } groups.Add(cmds) templates.ActsAsRootCommand(cmds, []string{"options"}, groups...) // Deprecated commands that are bundled with the binary but not displayed to end users directly deprecatedCommands := []*cobra.Command{ admin.NewCommandCreateMasterCerts(admin.CreateMasterCertsCommandName, fullName+" "+admin.CreateMasterCertsCommandName, out), admin.NewCommandCreateKeyPair(admin.CreateKeyPairCommandName, fullName+" "+admin.CreateKeyPairCommandName, out), admin.NewCommandCreateServerCert(admin.CreateServerCertCommandName, fullName+" "+admin.CreateServerCertCommandName, out), admin.NewCommandCreateSignerCert(admin.CreateSignerCertCommandName, fullName+" "+admin.CreateSignerCertCommandName, out), } for _, cmd := range deprecatedCommands { // Unsetting Short description will not show this command in help cmd.Short = "" cmd.Deprecated = fmt.Sprintf("Use '%s ca' instead.", fullName) cmds.AddCommand(cmd) } cmds.AddCommand( // part of every root command cmd.NewCmdConfig(fullName, "config", out, errout), cmd.NewCmdCompletion(fullName, f, out), // hidden cmd.NewCmdOptions(out), ) if name == fullName { cmds.AddCommand(cmd.NewCmdVersion(fullName, f, out, cmd.VersionOptions{})) } return cmds }
func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Command line tools for managing applications", Long: fmt.Sprintf(cliLong, fullName), Run: cmdutil.DefaultSubCommandRun(out), BashCompletionFunction: bashCompletionFunc, } f := clientcmd.New(cmds.PersistentFlags()) loginCmd := cmd.NewCmdLogin(fullName, f, in, out) groups := templates.CommandGroups{ { Message: "Basic Commands:", Commands: []*cobra.Command{ cmd.NewCmdTypes(fullName, f, out), loginCmd, cmd.NewCmdRequestProject("new-project", fullName+" new-project", fullName+" login", fullName+" project", f, out), cmd.NewCmdNewApplication(fullName, f, out), cmd.NewCmdStatus(cmd.StatusRecommendedName, fullName+" "+cmd.StatusRecommendedName, f, out), cmd.NewCmdProject(fullName+" project", f, out), }, }, { Message: "Build and Deploy Commands:", Commands: []*cobra.Command{ cmd.NewCmdStartBuild(fullName, f, in, out), cmd.NewCmdBuildLogs(fullName, f, out), cmd.NewCmdDeploy(fullName, f, out), cmd.NewCmdRollback(fullName, f, out), cmd.NewCmdNewBuild(fullName, f, in, out), cmd.NewCmdCancelBuild(fullName, f, out), cmd.NewCmdImportImage(fullName, f, out), cmd.NewCmdScale(fullName, f, out), cmd.NewCmdTag(fullName, f, out), }, }, { Message: "Application Modification Commands:", Commands: []*cobra.Command{ cmd.NewCmdGet(fullName, f, out), cmd.NewCmdDescribe(fullName, f, out), cmd.NewCmdEdit(fullName, f, out), cmd.NewCmdEnv(fullName, f, in, out), cmd.NewCmdVolume(fullName, f, out, errout), cmd.NewCmdLabel(fullName, f, out), cmd.NewCmdAnnotate(fullName, f, out), cmd.NewCmdExpose(fullName, f, out), cmd.NewCmdStop(fullName, f, out), cmd.NewCmdDelete(fullName, f, out), }, }, { Message: "Troubleshooting and Debugging Commands:", Commands: []*cobra.Command{ cmd.NewCmdExplain(fullName, f, out), cmd.NewCmdLogs(fullName, f, out), cmd.NewCmdRsh(cmd.RshRecommendedName, fullName, f, in, out, errout), cmd.NewCmdRsync(cmd.RsyncRecommendedName, fullName, f, out, errout), cmd.NewCmdExec(fullName, f, in, out, errout), cmd.NewCmdPortForward(fullName, f), cmd.NewCmdProxy(fullName, f, out), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ cmd.NewCmdCreate(fullName, f, out), cmd.NewCmdReplace(fullName, f, out), // TODO decide what to do about apply. Its doing unusual things // cmd.NewCmdApply(fullName, f, out), cmd.NewCmdPatch(fullName, f, out), cmd.NewCmdProcess(fullName, f, out), cmd.NewCmdExport(fullName, f, in, out), cmd.NewCmdRun(fullName, f, in, out, errout), cmd.NewCmdAttach(fullName, f, in, out, errout), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out), secrets.NewCmdSecrets(secrets.SecretsRecommendedName, fullName+" "+secrets.SecretsRecommendedName, f, in, out, fullName+" edit"), cmd.NewCmdConvert(fullName, f, out), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out), cmd.NewCmdConfig(fullName, "config"), cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out), }, }, } groups.Add(cmds) changeSharedFlagDefaults(cmds) templates.ActsAsRootCommand(cmds, groups...). ExposeFlags(loginCmd, "certificate-authority", "insecure-skip-tls-verify") if name == fullName { cmds.AddCommand(version.NewVersionCommand(fullName, false)) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Command line tools for managing applications", Long: cliLong, Run: func(c *cobra.Command, args []string) { c.SetOutput(out) cmdutil.RequireNoArguments(c, args) fmt.Fprint(out, cliLong) fmt.Fprintf(out, cliExplain, fullName) }, BashCompletionFunction: bashCompletionFunc, } f := clientcmd.New(cmds.PersistentFlags()) loginCmd := cmd.NewCmdLogin(fullName, f, in, out) groups := templates.CommandGroups{ { Message: "Basic Commands:", Commands: []*cobra.Command{ cmd.NewCmdTypes(fullName, f, out), loginCmd, cmd.NewCmdRequestProject(fullName, "new-project", fullName+" login", fullName+" project", f, out), cmd.NewCmdNewApplication(fullName, f, out), cmd.NewCmdStatus(cmd.StatusRecommendedName, fullName+" "+cmd.StatusRecommendedName, f, out), cmd.NewCmdProject(fullName+" project", f, out), cmd.NewCmdExplain(fullName, f, out), }, }, { Message: "Build and Deploy Commands:", Commands: []*cobra.Command{ cmd.NewCmdDeploy(fullName, f, out), cmd.NewCmdRollback(fullName, f, out), cmd.NewCmdNewBuild(fullName, f, in, out), cmd.NewCmdStartBuild(fullName, f, in, out), cmd.NewCmdCancelBuild(fullName, f, out), cmd.NewCmdImportImage(fullName, f, out), cmd.NewCmdTag(fullName, f, out), }, }, { Message: "Application Management Commands:", Commands: []*cobra.Command{ cmd.NewCmdGet(fullName, f, out), cmd.NewCmdDescribe(fullName, f, out), cmd.NewCmdEdit(fullName, f, out), set.NewCmdSet(fullName, f, in, out, errout), cmd.NewCmdLabel(fullName, f, out), cmd.NewCmdAnnotate(fullName, f, out), cmd.NewCmdExpose(fullName, f, out), cmd.NewCmdDelete(fullName, f, out), cmd.NewCmdScale(fullName, f, out), cmd.NewCmdAutoscale(fullName, f, out), secrets.NewCmdSecrets(secrets.SecretsRecommendedName, fullName+" "+secrets.SecretsRecommendedName, f, in, out, fullName+" edit"), }, }, { Message: "Troubleshooting and Debugging Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogs(cmd.LogsRecommendedName, fullName, f, out), cmd.NewCmdRsh(cmd.RshRecommendedName, fullName, f, in, out, errout), rsync.NewCmdRsync(rsync.RsyncRecommendedName, fullName, f, out, errout), cmd.NewCmdExec(fullName, f, in, out, errout), cmd.NewCmdPortForward(fullName, f), cmd.NewCmdProxy(fullName, f, out), cmd.NewCmdAttach(fullName, f, in, out, errout), cmd.NewCmdRun(fullName, f, in, out, errout), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ admin.NewCommandAdmin("adm", fullName+" "+"adm", out), cmd.NewCmdCreate(fullName, f, out), cmd.NewCmdReplace(fullName, f, out), cmd.NewCmdApply(fullName, f, out), cmd.NewCmdPatch(fullName, f, out), cmd.NewCmdProcess(fullName, f, out), cmd.NewCmdExport(fullName, f, in, out), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out), cmd.NewCmdConvert(fullName, f, out), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out), cmd.NewCmdConfig(fullName, "config"), cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out), }, }, } groups.Add(cmds) filters := []string{ "options", // These commands are deprecated and should not appear in help moved(fullName, "set env", cmds, set.NewCmdEnv(fullName, f, in, out)), moved(fullName, "set volume", cmds, set.NewCmdVolume(fullName, f, out, errout)), moved(fullName, "logs", cmds, cmd.NewCmdBuildLogs(fullName, f, out)), } changeSharedFlagDefaults(cmds) templates.ActsAsRootCommand(cmds, filters, groups...). ExposeFlags(loginCmd, "certificate-authority", "insecure-skip-tls-verify", "token") if name == fullName { cmds.AddCommand(version.NewVersionCommand(fullName, false)) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }
func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) *cobra.Command { // Main command cmds := &cobra.Command{ Use: name, Short: "Command line tools for managing applications", Long: cliLong, Run: func(c *cobra.Command, args []string) { c.SetOutput(out) cmdutil.RequireNoArguments(c, args) fmt.Fprint(out, cliLong) fmt.Fprintf(out, cliExplain, fullName) }, BashCompletionFunction: bashCompletionFunc, } f := clientcmd.New(cmds.PersistentFlags()) loginCmd := login.NewCmdLogin(fullName, f, in, out) secretcmds := secrets.NewCmdSecrets(secrets.SecretsRecommendedName, fullName+" "+secrets.SecretsRecommendedName, f, in, out, fullName+" edit") groups := templates.CommandGroups{ { Message: "Basic Commands:", Commands: []*cobra.Command{ cmd.NewCmdTypes(fullName, f, out), loginCmd, cmd.NewCmdRequestProject(cmd.RequestProjectRecommendedCommandName, fullName, f, out), cmd.NewCmdNewApplication(cmd.NewAppRecommendedCommandName, fullName, f, out), cmd.NewCmdStatus(cmd.StatusRecommendedName, fullName, fullName+" "+cmd.StatusRecommendedName, f, out), cmd.NewCmdProject(fullName+" project", f, out), cmd.NewCmdProjects(fullName, f, out), cmd.NewCmdExplain(fullName, f, out, errout), cluster.NewCmdCluster(cluster.ClusterRecommendedName, fullName+" "+cluster.ClusterRecommendedName, f, out), cmd.NewCmdIdle(fullName, f, out, errout), }, }, { Message: "Build and Deploy Commands:", Commands: []*cobra.Command{ rollout.NewCmdRollout(fullName, f, out), cmd.NewCmdDeploy(fullName, f, out), cmd.NewCmdRollback(fullName, f, out), cmd.NewCmdNewBuild(cmd.NewBuildRecommendedCommandName, fullName, f, in, out), cmd.NewCmdStartBuild(fullName, f, in, out), cmd.NewCmdCancelBuild(cmd.CancelBuildRecommendedCommandName, fullName, f, in, out), cmd.NewCmdImportImage(fullName, f, out, errout), cmd.NewCmdTag(fullName, f, out), }, }, { Message: "Application Management Commands:", Commands: []*cobra.Command{ cmd.NewCmdGet(fullName, f, out, errout), cmd.NewCmdDescribe(fullName, f, out, errout), cmd.NewCmdEdit(fullName, f, out, errout), set.NewCmdSet(fullName, f, in, out, errout), cmd.NewCmdLabel(fullName, f, out), cmd.NewCmdAnnotate(fullName, f, out), cmd.NewCmdExpose(fullName, f, out), cmd.NewCmdDelete(fullName, f, out), cmd.NewCmdScale(fullName, f, out), cmd.NewCmdAutoscale(fullName, f, out), secretcmds, sa.NewCmdServiceAccounts(sa.ServiceAccountsRecommendedName, fullName+" "+sa.ServiceAccountsRecommendedName, f, out), }, }, { Message: "Troubleshooting and Debugging Commands:", Commands: []*cobra.Command{ cmd.NewCmdLogs(cmd.LogsRecommendedCommandName, fullName, f, out), cmd.NewCmdRsh(cmd.RshRecommendedName, fullName, f, in, out, errout), rsync.NewCmdRsync(rsync.RsyncRecommendedName, fullName, f, out, errout), cmd.NewCmdPortForward(fullName, f, out, errout), cmd.NewCmdDebug(fullName, f, in, out, errout), cmd.NewCmdExec(fullName, f, in, out, errout), cmd.NewCmdProxy(fullName, f, out), cmd.NewCmdAttach(fullName, f, in, out, errout), cmd.NewCmdRun(fullName, f, in, out, errout), }, }, { Message: "Advanced Commands:", Commands: []*cobra.Command{ admin.NewCommandAdmin("adm", fullName+" "+"adm", in, out, errout), cmd.NewCmdCreate(fullName, f, out), cmd.NewCmdReplace(fullName, f, out), cmd.NewCmdApply(fullName, f, out), cmd.NewCmdPatch(fullName, f, out), cmd.NewCmdProcess(fullName, f, out), cmd.NewCmdExport(fullName, f, in, out), cmd.NewCmdExtract(fullName, f, in, out, errout), observe.NewCmdObserve(fullName, f, out, errout), policy.NewCmdPolicy(policy.PolicyRecommendedName, fullName+" "+policy.PolicyRecommendedName, f, out), cmd.NewCmdConvert(fullName, f, out), importer.NewCmdImport(fullName, f, in, out, errout), }, }, { Message: "Settings Commands:", Commands: []*cobra.Command{ login.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out), cmd.NewCmdConfig(fullName, "config"), cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out), cmd.NewCmdCompletion(fullName, f, out), }, }, } groups.Add(cmds) filters := []string{ "options", // These commands are deprecated and should not appear in help moved(fullName, "set env", cmds, set.NewCmdEnv(fullName, f, in, out)), moved(fullName, "set volume", cmds, set.NewCmdVolume(fullName, f, out, errout)), moved(fullName, "logs", cmds, cmd.NewCmdBuildLogs(fullName, f, out)), moved(fullName, "secrets link", secretcmds, secrets.NewCmdLinkSecret("add", fullName, f.Factory, out)), } changeSharedFlagDefaults(cmds) templates.ActsAsRootCommand(cmds, filters, groups...). ExposeFlags(loginCmd, "certificate-authority", "insecure-skip-tls-verify", "token") // experimental commands are those that are bundled with the binary but not displayed to end users // directly experimental := &cobra.Command{ Use: "ex", // Because this command exposes no description, it will not be shown in help } experimental.AddCommand( dockerbuild.NewCmdDockerbuild(fullName, f, out, errout), ) cmds.AddCommand(experimental) if name == fullName { cmds.AddCommand(cmd.NewCmdVersion(fullName, f, out, cmd.VersionOptions{PrintClientFeatures: true})) } cmds.AddCommand(cmd.NewCmdOptions(out)) return cmds }