func (m *Manager) handleFlags(command Command, name string, args []string) (Command, []string, error) { var flagset *gnuflag.FlagSet if flagged, ok := command.(FlaggedCommand); ok { flagset = flagged.Flags() } else { flagset = gnuflag.NewFlagSet(name, gnuflag.ExitOnError) } var helpRequested bool flagset.SetOutput(m.stderr) if flagset.Lookup("help") == nil { flagset.BoolVar(&helpRequested, "help", false, "Display help and exit") } if flagset.Lookup("h") == nil { flagset.BoolVar(&helpRequested, "h", false, "Display help and exit") } err := flagset.Parse(true, args) if err != nil { return nil, nil, err } if helpRequested { command = m.Commands["help"] args = []string{name} } else { args = flagset.Args() } return command, args, nil }
func (c *toolsMetadataCommand) SetFlags(f *gnuflag.FlagSet) { f.StringVar(&c.metadataDir, "d", "", "local directory in which to store metadata") // If no stream is specified, we'll generate metadata for the legacy tools location. f.StringVar(&c.stream, "stream", "", "simplestreams stream for which to generate the metadata") f.BoolVar(&c.clean, "clean", false, "remove any existing metadata for the specified stream before generating new metadata") f.BoolVar(&c.public, "public", false, "tools are for a public cloud, so generate mirrors information") }
func (c *RunCommand) SetFlags(f *gnuflag.FlagSet) { f.BoolVar(&c.noContext, "no-context", false, "do not run the command in a unit context") f.StringVar(&c.relationId, "r", "", "run the commands for a specific relation context on a unit") f.StringVar(&c.relationId, "relation", "", "") f.StringVar(&c.remoteUnitName, "remote-unit", "", "run the commands for a specific remote unit in a relation context on a unit") f.BoolVar(&c.forceRemoteUnit, "force-remote-unit", false, "run the commands for a specific relation context, bypassing the remote unit check") }
func (c *BootstrapCommand) SetFlags(f *gnuflag.FlagSet) { c.EnvCommandBase.SetFlags(f) f.Var(constraints.ConstraintsValue{&c.Constraints}, "constraints", "set environment constraints") f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools before bootstrapping") f.Var(seriesVar{&c.Series}, "series", "upload tools for supplied comma-separated series list") f.StringVar(&c.Source, "source", "", "local path to use as tools source") }
func (c *UpgradeJujuCommand) SetFlags(f *gnuflag.FlagSet) { c.EnvCommandBase.SetFlags(f) f.StringVar(&c.vers, "version", "", "upgrade to specific version") f.BoolVar(&c.Development, "dev", false, "allow development versions to be chosen") f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools") f.Var(seriesVar{&c.Series}, "series", "upload tools for supplied comma-separated series list") }
func (c *UpgradeCharmCommand) SetFlags(f *gnuflag.FlagSet) { c.EnvCommandBase.SetFlags(f) f.BoolVar(&c.Force, "force", false, "upgrade all units immediately, even if in error state") f.StringVar(&c.RepoPath, "repository", os.Getenv("JUJU_REPOSITORY"), "local charm repository path") f.StringVar(&c.SwitchURL, "switch", "", "crossgrade to a different charm") f.IntVar(&c.Revision, "revision", -1, "explicit revision of current charm") }
// SetFlags handles known option flags. func (c *restoreCommand) SetFlags(f *gnuflag.FlagSet) { f.Var(constraints.ConstraintsValue{Target: &c.constraints}, "constraints", "set environment constraints") f.BoolVar(&c.bootstrap, "b", false, "bootstrap a new state machine") f.StringVar(&c.filename, "file", "", "provide a file to be used as the backup.") f.StringVar(&c.backupId, "id", "", "provide the name of the backup to be restored.") }
// SetFlags adds the flags for this command to the passed gnuflag.FlagSet. func (u *UpgradeMongoCommand) SetFlags(f *gnuflag.FlagSet) { f.StringVar(&u.machineTag, "machinetag", "machine-0", "unique tag identifier for machine to be upgraded") f.StringVar(&u.series, "series", "", "series for the machine") f.StringVar(&u.configFilePath, "configfile", "", "path to the config file") f.StringVar(&u.members, "members", "", "a comma separated list of replicaset member ips") f.BoolVar(&u.rollback, "rollback", false, "rollback a previous attempt at upgrading that was cut in the process") f.BoolVar(&u.slave, "slave", false, "this is a slave machine in a replicaset") }
func (c *upgradeJujuCommand) SetFlags(f *gnuflag.FlagSet) { f.StringVar(&c.vers, "version", "", "upgrade to specific version") f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools") f.BoolVar(&c.DryRun, "dry-run", false, "don't change anything, just report what would change") f.BoolVar(&c.ResetPrevious, "reset-previous-upgrade", false, "clear the previous (incomplete) upgrade status (use with care)") f.BoolVar(&c.AssumeYes, "y", false, "answer 'yes' to confirmation prompts") f.BoolVar(&c.AssumeYes, "yes", false, "") }
// SetFlags sets utc and format flags based on user specified options. func (c *listMachinesCommand) SetFlags(f *gnuflag.FlagSet) { f.BoolVar(&c.isoTime, "utc", false, "display time as UTC in RFC3339 format") c.out.AddFlags(f, "tabular", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, "tabular": status.FormatMachineTabular, }) }
func (c *listCredentialsCommand) SetFlags(f *gnuflag.FlagSet) { f.BoolVar(&c.showSecrets, "show-secrets", false, "show secrets for displayed credentials") c.out.AddFlags(f, "tabular", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, "tabular": formatCredentialsTabular, }) }
func (c *RpcCommand) Init(f *gnuflag.FlagSet, args []string) error { f.StringVar(&c.Value, "value", "", "doc") f.BoolVar(&c.Slow, "slow", false, "doc") if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
// SetFlags implements Command.SetFlags. func (c *showControllerCommand) SetFlags(f *gnuflag.FlagSet) { c.JujuCommandBase.SetFlags(f) f.BoolVar(&c.showPasswords, "show-passwords", false, "show passwords for displayed accounts") c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, }) }
func (c *BootstrapCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools before bootstrapping") if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *RunCommand) SetFlags(f *gnuflag.FlagSet) { c.out.AddFlags(f, "smart", cmd.DefaultFormatters) f.BoolVar(&c.all, "all", false, "run the commands on all the machines") f.DurationVar(&c.timeout, "timeout", 5*time.Minute, "how long to wait before the remote command is considered to have failed") f.Var(cmd.NewStringsValue(nil, &c.machines), "machine", "one or more machine ids") f.Var(cmd.NewStringsValue(nil, &c.services), "service", "one or more service names") f.Var(cmd.NewStringsValue(nil, &c.units), "unit", "one or more unit ids") }
func (c *upgradeCharmCommand) SetFlags(f *gnuflag.FlagSet) { f.BoolVar(&c.ForceUnits, "force-units", false, "upgrade all units immediately, even if in error state") f.BoolVar(&c.ForceSeries, "force-series", false, "upgrade even if series of deployed services are not supported by the new charm") f.StringVar(&c.RepoPath, "repository", os.Getenv("JUJU_REPOSITORY"), "local charm repository path") f.StringVar(&c.SwitchURL, "switch", "", "crossgrade to a different charm") f.StringVar(&c.CharmPath, "path", "", "upgrade to a charm located at path") f.IntVar(&c.Revision, "revision", -1, "explicit revision of current charm") }
// SetFlags adds the options that apply to all commands, particularly those // due to logging. func (c *SuperCommand) SetFlags(f *gnuflag.FlagSet) { c.SetCommonFlags(f) // Only flags set by SetCommonFlags are passed on to subcommands. // Any flags added below only take effect when no subcommand is // specified (e.g. juju --version). f.BoolVar(&c.showVersion, "version", false, "Show the version of juju") c.flags = f }
func (c *BootstrapCommand) SetFlags(f *gnuflag.FlagSet) { f.Var(constraints.ConstraintsValue{Target: &c.Constraints}, "constraints", "set environment constraints") f.BoolVar(&c.UploadTools, "upload-tools", false, "upload local version of tools before bootstrapping") f.Var(newSeriesValue(nil, &c.Series), "upload-series", "upload tools for supplied comma-separated series list") f.Var(newSeriesValue(nil, &c.seriesOld), "series", "upload tools for supplied comma-separated series list (DEPRECATED, see --upload-series)") f.StringVar(&c.MetadataSource, "metadata-source", "", "local path to use as tools and/or metadata source") f.StringVar(&c.Placement, "to", "", "a placement directive indicating an instance to bootstrap") }
func (c *upgradeCharmCommand) SetFlags(f *gnuflag.FlagSet) { f.BoolVar(&c.ForceUnits, "force-units", false, "upgrade all units immediately, even if in error state") f.StringVar((*string)(&c.Channel), "channel", "", "channel to use when getting the charm or bundle from the charm store") f.BoolVar(&c.ForceSeries, "force-series", false, "upgrade even if series of deployed services are not supported by the new charm") f.StringVar(&c.SwitchURL, "switch", "", "crossgrade to a different charm") f.StringVar(&c.CharmPath, "path", "", "upgrade to a charm located at path") f.IntVar(&c.Revision, "revision", -1, "explicit revision of current charm") f.Var(stringMap{&c.Resources}, "resource", "resource to be uploaded to the controller") }
// SetFlags implements Command.SetFlags. func (c *listCommand) SetFlags(f *gnuflag.FlagSet) { c.infoCommandBase.SetFlags(f) f.BoolVar(&c.All, "all", false, "Include disabled users") c.out.AddFlags(f, "tabular", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, "tabular": c.formatTabular, }) }
func (c *apiInfoCommand) SetFlags(f *gnuflag.FlagSet) { c.out.AddFlags(f, "default", map[string]cmd.Formatter{ "default": c.format, "yaml": cmd.FormatYaml, "json": cmd.FormatJson, }) f.BoolVar(&c.refresh, "refresh", false, "connect to the API to ensure an up-to-date endpoint location") f.BoolVar(&c.password, "password", false, "include the password in the output fields") }
// SetFlags adds the options that apply to all commands, particularly those // due to logging. func (c *SuperCommand) SetFlags(f *gnuflag.FlagSet) { if c.Log != nil { c.Log.AddFlags(f) } f.BoolVar(&c.showHelp, "h", false, helpPurpose) f.BoolVar(&c.showHelp, "help", false, "") c.flags = f }
// SetFlags is defined on the cmd.Command interface. func (c *listCommand) SetFlags(f *gnuflag.FlagSet) { c.SpaceCommandBase.SetFlags(f) c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, }) f.BoolVar(&c.Short, "short", false, "only display spaces.") }
// SetFlags implements cmd.Command.SetFlags. func (c *ShowServiceCommand) SetFlags(f *gnuflag.FlagSet) { const defaultFlag = "tabular" c.out.AddFlags(f, defaultFlag, map[string]cmd.Formatter{ defaultFlag: FormatSvcTabular, "yaml": cmd.FormatYaml, "json": cmd.FormatJson, }) f.BoolVar(&c.details, "details", false, "show detailed information about resources used by each unit.") }
// SetFlags implements Command.SetFlags. func (c *listCommand) SetFlags(f *gnuflag.FlagSet) { c.StorageCommandBase.SetFlags(f) c.out.AddFlags(f, "tabular", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, "tabular": formatListTabular, }) f.BoolVar(&c.filesystem, "filesystem", false, "list filesystem storage") f.BoolVar(&c.volume, "volume", false, "list volume storage") }
// SetFlags adds the options that apply to all commands, particularly those // due to logging. func (c *SuperCommand) SetFlags(f *gnuflag.FlagSet) { c.SetCommonFlags(f) // Only flags set by SetCommonFlags are passed on to subcommands. // Any flags added below only take effect when no subcommand is // specified (e.g. command --version). if c.version != "" { f.BoolVar(&c.showVersion, "version", false, "Show the command's version and exit") } c.flags = f }
func (c *DeployCommand) SetFlags(f *gnuflag.FlagSet) { c.UnitCommandBase.SetFlags(f) f.IntVar(&c.NumUnits, "n", 1, "number of service units to deploy for principal charms") f.BoolVar(&c.BumpRevision, "u", false, "increment local charm directory revision (DEPRECATED)") f.BoolVar(&c.BumpRevision, "upgrade", false, "") f.Var(&c.Config, "config", "path to yaml-formatted service config") f.Var(constraints.ConstraintsValue{Target: &c.Constraints}, "constraints", "set service constraints") f.StringVar(&c.Networks, "networks", "", "bind the service to specific networks") f.StringVar(&c.RepoPath, "repository", os.Getenv(osenv.JujuRepositoryEnvKey), "local charm repository") }
// SetFlags handles known option flags. func (c *restoreCommand) SetFlags(f *gnuflag.FlagSet) { c.CommandBase.SetFlags(f) f.Var(constraints.ConstraintsValue{Target: &c.constraints}, "constraints", "set model constraints") f.BoolVar(&c.bootstrap, "b", false, "bootstrap a new state machine") f.StringVar(&c.filename, "file", "", "provide a file to be used as the backup.") f.StringVar(&c.backupId, "id", "", "provide the name of the backup to be restored.") f.BoolVar(&c.uploadTools, "upload-tools", false, "upload tools if bootstraping a new machine.") }
func (c *DeployCommand) SetFlags(f *gnuflag.FlagSet) { c.EnvCommandBase.SetFlags(f) c.UnitCommandBase.SetFlags(f) f.IntVar(&c.NumUnits, "n", 1, "number of service units to deploy for principal charms") f.BoolVar(&c.BumpRevision, "u", false, "increment local charm directory revision") f.BoolVar(&c.BumpRevision, "upgrade", false, "") f.Var(&c.Config, "config", "path to yaml-formatted service config") f.Var(constraints.ConstraintsValue{&c.Constraints}, "constraints", "set service constraints") f.StringVar(&c.RepoPath, "repository", os.Getenv("JUJU_REPOSITORY"), "local charm repository") }
// SetFlags is defined on the cmd.Command interface. func (c *createCommand) SetFlags(f *gnuflag.FlagSet) { c.SubnetCommandBase.SetFlags(f) f.BoolVar(&c.IsPublic, "public", false, "enable public access with shadow addresses") f.BoolVar(&c.IsPrivate, "private", true, "disable public access with shadow addresses") // Because SetFlags is called before Parse, we cannot // use f.Visit() here to check both flags were not // specified at once. So we store the flag set and // defer the check to Init(). c.flagSet = f }