func main() { c := cmd.NewCommandArchiver("archiver") flagtypes.GLog(c.Flags()) if err := c.Execute(); err != nil { os.Exit(1) } }
// CommandFor returns the appropriate command for this base name, // or the OpenShift CLI command. func CommandFor(basename string) *cobra.Command { var cmd *cobra.Command out := os.Stdout // Make case-insensitive and strip executable suffix if present if runtime.GOOS == "windows" { basename = strings.ToLower(basename) basename = strings.TrimSuffix(basename, ".exe") } switch basename { case "kubectl": cmd = NewCmdKubectl(basename, out) default: cmd = NewCommandCLI(basename, basename, out) } if cmd.UsageFunc() == nil { templates.ActsAsRootCommand(cmd) } flagtypes.GLog(cmd.PersistentFlags()) return cmd }
// CommandFor returns the appropriate command for this base name, // or the global OpenShift command func CommandFor(basename string) *cobra.Command { var cmd *cobra.Command in, out, errout := os.Stdin, os.Stdout, os.Stderr // Make case-insensitive and strip executable suffix if present if runtime.GOOS == "windows" { basename = strings.ToLower(basename) basename = strings.TrimSuffix(basename, ".exe") } switch basename { case "openshift-router": cmd = irouter.NewCommandTemplateRouter(basename) case "openshift-f5-router": cmd = irouter.NewCommandF5Router(basename) case "openshift-deploy": cmd = deployer.NewCommandDeployer(basename) case "openshift-recycle": cmd = recycle.NewCommandRecycle(basename, out) case "openshift-sti-build": cmd = builder.NewCommandSTIBuilder(basename) case "openshift-docker-build": cmd = builder.NewCommandDockerBuilder(basename) case "oc", "osc": cmd = cli.NewCommandCLI(basename, basename, in, out, errout) case "oadm", "osadm": cmd = admin.NewCommandAdmin(basename, basename, out, errout) case "kubectl": cmd = cli.NewCmdKubectl(basename, out) case "kube-apiserver": cmd = kubernetes.NewAPIServerCommand(basename, basename, out) case "kube-controller-manager": cmd = kubernetes.NewControllersCommand(basename, basename, out) case "kubelet": cmd = kubernetes.NewKubeletCommand(basename, basename, out) case "kube-proxy": cmd = kubernetes.NewProxyCommand(basename, basename, out) case "kube-scheduler": cmd = kubernetes.NewSchedulerCommand(basename, basename, out) case "kubernetes": cmd = kubernetes.NewCommand(basename, basename, out) case "origin", "atomic-enterprise": cmd = NewCommandOpenShift(basename) default: cmd = NewCommandOpenShift("openshift") } if cmd.UsageFunc() == nil { templates.ActsAsRootCommand(cmd, []string{"options"}) } flagtypes.GLog(cmd.PersistentFlags()) return cmd }
// NewCmdDiagnostics is the base command for running any diagnostics. func NewCmdDiagnostics(name string, fullName string, out io.Writer) *cobra.Command { o := &DiagnosticsOptions{ RequestedDiagnostics: []string{}, LogOptions: &log.LoggerOptions{Out: out}, ImageTemplate: variable.NewDefaultImageTemplate(), } cmd := &cobra.Command{ Use: name, Short: "Diagnose common cluster problems", Long: fmt.Sprintf(longDescription, fullName, strings.Join(availableDiagnostics().List(), ", ")), Run: func(c *cobra.Command, args []string) { kcmdutil.CheckErr(o.Complete(args)) kcmdutil.CheckErr(o.Validate()) failed, err, warnCount, errorCount := o.RunDiagnostics() o.Logger.Summary(warnCount, errorCount) kcmdutil.CheckErr(err) if failed { os.Exit(255) } }, } cmd.SetOutput(out) // for output re: usage / help o.ClientFlags = flag.NewFlagSet("client", flag.ContinueOnError) // hide the extensive set of client flags o.Factory = osclientcmd.New(o.ClientFlags) // that would otherwise be added to this command cmd.Flags().AddFlag(o.ClientFlags.Lookup(config.OpenShiftConfigFlagName)) cmd.Flags().AddFlag(o.ClientFlags.Lookup("context")) // TODO: find k8s constant cmd.Flags().StringVar(&o.ClientClusterContext, options.FlagClusterContextName, "", "Client context to use for cluster administrator") cmd.Flags().StringVar(&o.MasterConfigLocation, options.FlagMasterConfigName, "", "Path to master config file (implies --host)") cmd.Flags().StringVar(&o.NodeConfigLocation, options.FlagNodeConfigName, "", "Path to node config file (implies --host)") cmd.Flags().BoolVar(&o.IsHost, options.FlagIsHostName, false, "If true, look for systemd and journald units even without master/node config") cmd.Flags().StringVar(&o.ImageTemplate.Format, options.FlagImageTemplateName, o.ImageTemplate.Format, "Image template for DiagnosticPod to use in creating a pod") cmd.Flags().BoolVar(&o.ImageTemplate.Latest, options.FlagLatestImageName, false, "If true, when expanding the image template, use latest version, not release version") cmd.Flags().BoolVar(&o.PreventModification, options.FlagPreventModificationName, false, "If true, may be set to prevent diagnostics making any changes via the API") cmd.Flags().StringVar(&o.NetworkDiagLogDir, options.FlagNetworkDiagLogDir, netutil.NetworkDiagDefaultLogDir, "Path to store network diagnostic results in case of errors") flagtypes.GLog(cmd.Flags()) options.BindLoggerOptionFlags(cmd.Flags(), o.LogOptions, options.RecommendedLoggerOptionFlags()) return cmd }
func NewDebugAPIServerCommand() *cobra.Command { o := &DebugAPIServerOptions{Out: os.Stdout} cmd := &cobra.Command{ Use: RecommendedLoadEtcdDumpName + " etcd_dump.json", Short: "Start API server using etcddump", Run: func(cmd *cobra.Command, args []string) { kcmdutil.CheckErr(o.Complete(args)) kcmdutil.CheckErr(o.Run()) }, } cmd.Flags().BoolVar(&o.AllowAll, "allow-all", true, "change policy to grant system:authenticated cluster-admin powers") flagtypes.GLog(cmd.PersistentFlags()) return cmd }
// NewCommandDiagnostics is the base command for running any diagnostics. func NewCommandDiagnostics(name string, fullName string, out io.Writer) *cobra.Command { o := &DiagnosticsOptions{ RequestedDiagnostics: util.StringList{}, LogOptions: &log.LoggerOptions{Out: out}, } cmd := &cobra.Command{ Use: name, Short: "This utility helps you troubleshoot and diagnose.", Long: fmt.Sprintf(longDescription, fullName), Run: func(c *cobra.Command, args []string) { kcmdutil.CheckErr(o.Complete()) failed, err, warnCount, errorCount := o.RunDiagnostics() o.Logger.Summary(warnCount, errorCount) kcmdutil.CheckErr(err) if failed { os.Exit(255) } }, } cmd.SetOutput(out) // for output re: usage / help o.ClientFlags = flag.NewFlagSet("client", flag.ContinueOnError) // hide the extensive set of client flags o.Factory = osclientcmd.New(o.ClientFlags) // that would otherwise be added to this command cmd.Flags().AddFlag(o.ClientFlags.Lookup(config.OpenShiftConfigFlagName)) cmd.Flags().AddFlag(o.ClientFlags.Lookup("context")) // TODO: find k8s constant cmd.Flags().StringVar(&o.ClientClusterContext, options.FlagClusterContextName, "", "client context to use for cluster administrator") cmd.Flags().StringVar(&o.MasterConfigLocation, options.FlagMasterConfigName, "", "path to master config file (implies --host)") cmd.Flags().StringVar(&o.NodeConfigLocation, options.FlagNodeConfigName, "", "path to node config file (implies --host)") cmd.Flags().BoolVar(&o.IsHost, options.FlagIsHostName, false, "look for systemd and journald units even without master/node config") flagtypes.GLog(cmd.Flags()) options.BindLoggerOptionFlags(cmd.Flags(), o.LogOptions, options.RecommendedLoggerOptionFlags()) options.BindDiagnosticFlag(cmd.Flags(), &o.RequestedDiagnostics, options.NewRecommendedDiagnosticFlag()) return cmd }