// Run provides the common boilerplate code around executing a cobra command. // For example, it ensures that logging is set up properly. Logging // flags get added to the command line if not added already. Flags get normalized // so that help texts show them with hyphens. Underscores are accepted // as alternative for the command parameters. // // Run tries to be smart about how to print errors that are returned by the // command: before logging is known to be set up, it prints them as plain text // to stderr. This covers command line flag parse errors and unknown commands. // Afterwards it logs them. This covers runtime errors. // // Commands like kubectl where logging is not normally part of the runtime output // should use RunNoErrOutput instead and deal with the returned error themselves. func Run(cmd *cobra.Command) int { … } // RunNoErrOutput is a version of Run which returns the cobra command error // instead of printing it. func RunNoErrOutput(cmd *cobra.Command) error { … } func run(cmd *cobra.Command) (logsInitialized bool, err error) { … }