// initCoreCommonFlags initializes common flags used by Hugo core commands. func initCoreCommonFlags(cmd *cobra.Command) { cmd.Flags().StringVar(&cfgFile, "config", "", "config file (default is path/config.yaml|json|toml)") // Set bash-completion validConfigFilenames := []string{"json", "js", "yaml", "yml", "toml", "tml"} cmd.Flags().SetAnnotation("config", cobra.BashCompFilenameExt, validConfigFilenames) }
func serverComplexFlags(ccmd *cobra.Command) { serverSimpleFlags(ccmd) ccmd.Flags().StringVarP(&server.Forwarder, "server-forwarder", "f", "g", "Forwarder method [g i m]") ccmd.Flags().IntVarP(&server.Weight, "server-weight", "w", 1, "weight of down-stream server") ccmd.Flags().IntVarP(&server.UpperThreshold, "server-upper-threshold", "u", 0, "Upper threshold of down-stream server") ccmd.Flags().IntVarP(&server.LowerThreshold, "server-lower-threshold", "l", 0, "Lower threshold of down-stream server") }
func GetFlagBool(cmd *cobra.Command, flag string) bool { b, err := cmd.Flags().GetBool(flag) if err != nil { glog.Fatalf("err accessing flag %s for command %s: %v", flag, cmd.Name(), err) } return b }
func dialTimeoutFromCmd(cmd *cobra.Command) time.Duration { dialTimeout, err := cmd.Flags().GetDuration("dial-timeout") if err != nil { ExitWithError(ExitError, err) } return dialTimeout }
func GetFlagDuration(cmd *cobra.Command, flag string) time.Duration { d, err := cmd.Flags().GetDuration(flag) if err != nil { glog.Fatalf("err accessing flag %s for command %s: %v", flag, cmd.Name(), err) } return d }
// PrinterForCommand returns the default printer for this command. // Requires that printer flags have been added to cmd (see AddPrinterFlags). func PrinterForCommand(cmd *cobra.Command) (kubectl.ResourcePrinter, bool, error) { outputFormat := GetFlagString(cmd, "output") // templates are logically optional for specifying a format. // TODO once https://github.com/kubernetes/kubernetes/issues/12668 is fixed, this should fall back to GetFlagString templateFile, _ := cmd.Flags().GetString("template") if len(outputFormat) == 0 && len(templateFile) != 0 { outputFormat = "template" } templateFormat := []string{"go-template=", "go-template-file=", "jsonpath=", "jsonpath-file="} for _, format := range templateFormat { if strings.HasPrefix(outputFormat, format) { templateFile = outputFormat[len(format):] outputFormat = format[:len(format)-1] } } printer, generic, err := kubectl.GetPrinter(outputFormat, templateFile) if err != nil { return nil, generic, err } return maybeWrapSortingPrinter(cmd, printer), generic, nil }
// GetFlagStringList can be used to accept multiple argument with flag repetition (e.g. -f arg1 -f arg2 ...) func GetFlagStringSlice(cmd *cobra.Command, flag string) []string { s, err := cmd.Flags().GetStringSlice(flag) if err != nil { glog.Fatalf("err accessing flag %s for command %s: %v", flag, cmd.Name(), err) } return s }
func GetFlagString(cmd *cobra.Command, flag string) string { s, err := cmd.Flags().GetString(flag) if err != nil { glog.Fatalf("err %v accessing flag %s for command %s: %s", err, flag, cmd.Name()) } return s }
// Assumes the flag has a default value. func GetFlagInt(cmd *cobra.Command, flag string) int { i, err := cmd.Flags().GetInt(flag) if err != nil { glog.Fatalf("err: %v accessing flag %s for command %s: %s", err, flag, cmd.Name()) } return i }
// PrinterForCommand returns the default printer for this command. // Requires that printer flags have been added to cmd (see AddPrinterFlags). func PrinterForCommand(cmd *cobra.Command) (kubectl.ResourcePrinter, bool, error) { outputFormat := GetFlagString(cmd, "output") // templates are logically optional for specifying a format. // TODO once https://github.com/kubernetes/kubernetes/issues/12668 is fixed, this should fall back to GetFlagString templateFile, _ := cmd.Flags().GetString("template") if len(outputFormat) == 0 && len(templateFile) != 0 { outputFormat = "template" } templateFormat := []string{ "go-template=", "go-template-file=", "jsonpath=", "jsonpath-file=", "custom-columns=", "custom-columns-file=", } for _, format := range templateFormat { if strings.HasPrefix(outputFormat, format) { templateFile = outputFormat[len(format):] outputFormat = format[:len(format)-1] } } // this function may be invoked by a command that did not call AddPrinterFlags first, so we need // to be safe about how we access the allow-missing-template-keys flag allowMissingTemplateKeys := false if cmd.Flags().Lookup("allow-missing-template-keys") != nil { allowMissingTemplateKeys = GetFlagBool(cmd, "allow-missing-template-keys") } printer, generic, err := kubectl.GetPrinter(outputFormat, templateFile, GetFlagBool(cmd, "no-headers"), allowMissingTemplateKeys) if err != nil { return nil, generic, err } return maybeWrapSortingPrinter(cmd, printer), generic, nil }
// isLocalUnitDifferent compares a Unit on the file system with a one // provided from the Registry. // isLocalUnitDifferent first tries to load the passed Unit from the // local file system and compares it with the Unit that is in the // Registry. If it fails to load that Unit from the filesystem and // fatal was not set, it will check again if that file name is an // instance of a template, if so it will load the template Unit and // compare it with the provided Unit. // It takes three arguments; a path to the local Unit on the file system, // the Unit in the registry, and a last boolean to fail in case fatal errors // happen. // Returns true if the local Unit on file system is different from the // one provided, false otherwise; and any error encountered. func isLocalUnitDifferent(cCmd *cobra.Command, file string, su *schema.Unit, fatal bool) (bool, error) { replace, _ := cCmd.Flags().GetBool("replace") result, err := matchLocalFileAndUnit(file, su) if err == nil { // Warn in case unit differs from local file if result == false && !replace { stderr("WARNING: Unit %s in registry differs from local unit file %s. Add --replace to override.", su.Name, file) } return !result, nil } else if fatal { return false, err } info := unit.NewUnitNameInfo(path.Base(file)) if info == nil { return false, fmt.Errorf("error extracting information from unit name %s", file) } else if !info.IsInstance() { return false, fmt.Errorf("error Unit %s does not seem to be a template unit", file) } templFile := path.Join(path.Dir(file), info.Template) result, err = matchLocalFileAndUnit(templFile, su) if err == nil { // Warn in case unit differs from local template unit file if result == false && !replace { stderr("WARNING: Unit %s in registry differs from local template unit file %s. Add --replace to override.", su.Name, file) } return !result, nil } return false, err }
func authCfgFromCmd(cmd *cobra.Command) *authCfg { userFlag, err := cmd.Flags().GetString("user") if err != nil { ExitWithError(ExitBadArgs, err) } if userFlag == "" { return nil } var cfg authCfg splitted := strings.SplitN(userFlag, ":", 2) if len(splitted) < 2 { cfg.username = userFlag cfg.password, err = speakeasy.Ask("Password: ") if err != nil { ExitWithError(ExitError, err) } } else { cfg.username = splitted[0] cfg.password = splitted[1] } return &cfg }
func insecureSkipVerifyFromCmd(cmd *cobra.Command) bool { skipVerify, err := cmd.Flags().GetBool("insecure-skip-tls-verify") if err != nil { ExitWithError(ExitError, err) } return skipVerify }
func insecureTransportFromCmd(cmd *cobra.Command) bool { insecureTr, err := cmd.Flags().GetBool("insecure-transport") if err != nil { ExitWithError(ExitError, err) } return insecureTr }
// PrinterForMapping returns a printer suitable for displaying the provided resource type. // Requires that printer flags have been added to cmd (see AddPrinterFlags). func (f *Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) { printer, ok, err := PrinterForCommand(cmd) if err != nil { return nil, err } if ok { clientConfig, err := f.ClientConfig() if err != nil { return nil, err } defaultVersion := clientConfig.Version version := OutputVersion(cmd, defaultVersion) if len(version) == 0 { version = mapping.APIVersion } if len(version) == 0 { return nil, fmt.Errorf("you must specify an output-version when using this output format") } printer = kubectl.NewVersionedPrinter(printer, mapping.ObjectConvertor, version, mapping.APIVersion) } else { // Some callers do not have "label-columns" so we can't use the GetFlagStringSlice() helper columnLabel, err := cmd.Flags().GetStringSlice("label-columns") if err != nil { columnLabel = []string{} } printer, err = f.Printer(mapping, GetFlagBool(cmd, "no-headers"), withNamespace, GetWideFlag(cmd), GetFlagBool(cmd, "show-all"), columnLabel) if err != nil { return nil, err } printer = maybeWrapSortingPrinter(cmd, printer) } return printer, nil }
func collectFlags(v *viper.Viper, cmd *cobra.Command) { v.BindPFlags(cmd.PersistentFlags()) v.BindPFlags(cmd.Flags()) for _, cmd := range cmd.Commands() { collectFlags(v, cmd) } }
func (o *AppJSONOptions) Complete(f *clientcmd.Factory, cmd *cobra.Command, args []string) error { version, _ := cmd.Flags().GetString("output-version") for _, v := range strings.Split(version, ",") { gv, err := unversioned.ParseGroupVersion(v) if err != nil { return fmt.Errorf("provided output-version %q is not valid: %v", v, err) } o.OutputVersions = append(o.OutputVersions, gv) } o.OutputVersions = append(o.OutputVersions, registered.EnabledVersions()...) o.Action.Bulk.Mapper = clientcmd.ResourceMapper(f) o.Action.Bulk.Op = configcmd.Create mapper, _ := f.Object(false) o.PrintObject = cmdutil.VersionedPrintObject(f.PrintObject, cmd, mapper, o.Action.Out) o.Generator, _ = cmd.Flags().GetString("generator") ns, _, err := f.DefaultNamespace() if err != nil { return err } o.Namespace = ns o.Client, _, err = f.Clients() return err }
func (c *GitDivertFinishCmd) Init(cc *cobra.Command) { cc.Use = "finish" cc.Short = "finish covert op" cc.Flags().StringVarP(&c.Message, "message", "m", "", "git commit message") }
func getFlag(cmd *cobra.Command, flag string) *pflag.Flag { f := cmd.Flags().Lookup(flag) if f == nil { glog.Fatalf("flag accessed but not defined for command %s: %s", cmd.Name(), flag) } return f }
// NewContent adds new content to a Hugo site. func NewContent(cmd *cobra.Command, args []string) { InitializeConfig() if cmd.Flags().Lookup("format").Changed { viper.Set("MetaDataFormat", configFormat) } if len(args) < 1 { cmd.Usage() jww.FATAL.Fatalln("path needs to be provided") } createpath := args[0] var kind string createpath, kind = newContentPathSection(createpath) if contentType != "" { kind = contentType } err := create.NewContent(kind, createpath) if err != nil { jww.ERROR.Println(err) } }
// GetWideFlag is used to determine if "-o wide" is used func GetWideFlag(cmd *cobra.Command) bool { f := cmd.Flags().Lookup("output") if f.Value.String() == "wide" { return true } return false }
func hideUnsupportedFeatures(cmd *cobra.Command, clientVersion string, hasExperimental bool) { cmd.Flags().VisitAll(func(f *pflag.Flag) { // hide experimental flags if !hasExperimental { if _, ok := f.Annotations["experimental"]; ok { f.Hidden = true } } // hide flags not supported by the server if flagVersion, ok := f.Annotations["version"]; ok && len(flagVersion) == 1 && versions.LessThan(clientVersion, flagVersion[0]) { f.Hidden = true } }) for _, subcmd := range cmd.Commands() { // hide experimental subcommands if !hasExperimental { if _, ok := subcmd.Tags["experimental"]; ok { subcmd.Hidden = true } } // hide subcommands not supported by the server if subcmdVersion, ok := subcmd.Tags["version"]; ok && versions.LessThan(clientVersion, subcmdVersion) { subcmd.Hidden = true } } }
// Assumes the flag has a default value. func GetFlagInt64(cmd *cobra.Command, flag string) int64 { i, err := cmd.Flags().GetInt64(flag) if err != nil { glog.Fatalf("err accessing flag %s for command %s: %v", flag, cmd.Name(), err) } return i }
func runDeleteContext(out io.Writer, configAccess clientcmd.ConfigAccess, cmd *cobra.Command) error { config, err := configAccess.GetStartingConfig() if err != nil { return err } args := cmd.Flags().Args() if len(args) != 1 { cmd.Help() return nil } configFile := configAccess.GetDefaultFilename() if configAccess.IsExplicitFile() { configFile = configAccess.GetExplicitFile() } name := args[0] _, ok := config.Contexts[name] if !ok { return fmt.Errorf("cannot delete context %s, not in %s", name, configFile) } delete(config.Contexts, name) if err := clientcmd.ModifyConfig(configAccess, *config, true); err != nil { return err } fmt.Fprintf(out, "deleted context %s from %s", name, configFile) return nil }
// addServiceFlags adds all flags that are common to both `create` and `update`. // Any flags that are not common are added separately in the individual command func addServiceFlags(cmd *cobra.Command, opts *serviceOptions) { flags := cmd.Flags() flags.StringVar(&opts.name, flagName, "", "Service name") flags.VarP(&opts.labels, flagLabel, "l", "Service labels") flags.VarP(&opts.env, "env", "e", "Set environment variables") flags.StringVarP(&opts.workdir, "workdir", "w", "", "Working directory inside the container") flags.StringVarP(&opts.user, flagUser, "u", "", "Username or UID") flags.VarP(&opts.mounts, flagMount, "m", "Attach a mount to the service") flags.Var(&opts.resources.limitCPU, flagLimitCPU, "Limit CPUs") flags.Var(&opts.resources.limitMemBytes, flagLimitMemory, "Limit Memory") flags.Var(&opts.resources.resCPU, flagReserveCPU, "Reserve CPUs") flags.Var(&opts.resources.resMemBytes, flagReserveMemory, "Reserve Memory") flags.Var(&opts.stopGrace, flagStopGracePeriod, "Time to wait before force killing a container") flags.Var(&opts.replicas, flagReplicas, "Number of tasks") flags.StringVar(&opts.restartPolicy.condition, flagRestartCondition, "", "Restart when condition is met (none, on-failure, or any)") flags.Var(&opts.restartPolicy.delay, flagRestartDelay, "Delay between restart attempts") flags.Var(&opts.restartPolicy.maxAttempts, flagRestartMaxAttempts, "Maximum number of restarts before giving up") flags.Var(&opts.restartPolicy.window, flagRestartWindow, "Window used to evaluate the restart policy") flags.StringSliceVar(&opts.constraints, flagConstraint, []string{}, "Placement constraints") flags.Uint64Var(&opts.update.parallelism, flagUpdateParallelism, 0, "Maximum number of tasks updated simultaneously") flags.DurationVar(&opts.update.delay, flagUpdateDelay, time.Duration(0), "Delay between updates") flags.StringSliceVar(&opts.networks, flagNetwork, []string{}, "Network attachments") flags.StringVar(&opts.endpoint.mode, flagEndpointMode, "", "Endpoint mode (vip or dnsrr)") flags.VarP(&opts.endpoint.ports, flagPublish, "p", "Publish a port as a node port") flags.BoolVar(&opts.registryAuth, flagRegistryAuth, false, "Send registry authentication details to Swarm agents") }
// addServiceFlags adds all flags that are common to both `create` and `update`. // Any flags that are not common are added separately in the individual command func addServiceFlags(cmd *cobra.Command, opts *serviceOptions) { flags := cmd.Flags() flags.StringVar(&opts.name, flagName, "", "Service name") flags.StringVarP(&opts.workdir, flagWorkdir, "w", "", "Working directory inside the container") flags.StringVarP(&opts.user, flagUser, "u", "", "Username or UID (format: <name|uid>[:<group|gid>])") flags.StringSliceVar(&opts.groups, flagGroupAdd, []string{}, "Add additional user groups to the container") flags.Var(&opts.resources.limitCPU, flagLimitCPU, "Limit CPUs") flags.Var(&opts.resources.limitMemBytes, flagLimitMemory, "Limit Memory") flags.Var(&opts.resources.resCPU, flagReserveCPU, "Reserve CPUs") flags.Var(&opts.resources.resMemBytes, flagReserveMemory, "Reserve Memory") flags.Var(&opts.stopGrace, flagStopGracePeriod, "Time to wait before force killing a container") flags.Var(&opts.replicas, flagReplicas, "Number of tasks") flags.StringVar(&opts.restartPolicy.condition, flagRestartCondition, "", "Restart when condition is met (none, on-failure, or any)") flags.Var(&opts.restartPolicy.delay, flagRestartDelay, "Delay between restart attempts") flags.Var(&opts.restartPolicy.maxAttempts, flagRestartMaxAttempts, "Maximum number of restarts before giving up") flags.Var(&opts.restartPolicy.window, flagRestartWindow, "Window used to evaluate the restart policy") flags.Uint64Var(&opts.update.parallelism, flagUpdateParallelism, 1, "Maximum number of tasks updated simultaneously (0 to update all at once)") flags.DurationVar(&opts.update.delay, flagUpdateDelay, time.Duration(0), "Delay between updates") flags.StringVar(&opts.update.onFailure, flagUpdateFailureAction, "pause", "Action on update failure (pause|continue)") flags.StringVar(&opts.endpoint.mode, flagEndpointMode, "", "Endpoint mode (vip or dnsrr)") flags.BoolVar(&opts.registryAuth, flagRegistryAuth, false, "Send registry authentication details to swarm agents") flags.StringVar(&opts.logDriver.name, flagLogDriver, "", "Logging driver for service") flags.Var(&opts.logDriver.opts, flagLogOpt, "Logging driver options") }
func GetFlagString(cmd *cobra.Command, flag string) string { f := cmd.Flags().Lookup(flag) if f == nil { glog.Fatalf("Flag accessed but not defined for command %s: %s", cmd.Name(), flag) } return f.Value.String() }
// GetFlagStringList can be used to accept multiple argument with flag repetition (e.g. -f arg1 -f arg2 ...) func GetFlagStringList(cmd *cobra.Command, flag string) util.StringList { f := cmd.Flags().Lookup(flag) if f == nil { return util.StringList{} } return *f.Value.(*util.StringList) }
func server(cmd *cobra.Command, args []string) { InitializeConfig() if cmd.Flags().Lookup("disableLiveReload").Changed { viper.Set("DisableLiveReload", disableLiveReload) } if serverWatch { viper.Set("Watch", true) } if viper.GetBool("watch") { serverWatch = true } l, err := net.Listen("tcp", net.JoinHostPort(serverInterface, strconv.Itoa(serverPort))) if err == nil { l.Close() } else { jww.ERROR.Println("port", serverPort, "already in use, attempting to use an available port") sp, err := helpers.FindAvailablePort() if err != nil { jww.ERROR.Println("Unable to find alternative port to use") jww.ERROR.Fatalln(err) } serverPort = sp.Port } viper.Set("port", serverPort) BaseURL, err := fixURL(BaseURL) if err != nil { jww.ERROR.Fatal(err) } viper.Set("BaseURL", BaseURL) if err := memStats(); err != nil { jww.ERROR.Println("memstats error:", err) } build(serverWatch) // Watch runs its own server as part of the routine if serverWatch { watched := getDirList() workingDir := helpers.AbsPathify(viper.GetString("WorkingDir")) for i, dir := range watched { watched[i], _ = helpers.GetRelativePath(dir, workingDir) } unique := strings.Join(helpers.RemoveSubpaths(watched), ",") jww.FEEDBACK.Printf("Watching for changes in %s/{%s}\n", workingDir, unique) err := NewWatcher(serverPort) if err != nil { fmt.Println(err) } } serve(serverPort) }
func setupLogger(cmd *cobra.Command, args []string) { if verbose, _ := cmd.Flags().GetBool(VerboseFlag); verbose { log.SetLevel(log.DebugLevel) } else { log.SetLevel(log.InfoLevel) } }