func (c *portCommand) Init(f *gnuflag.FlagSet, args []string) error { if err := f.Parse(true, args); err != nil { return err } args = f.Args() if args == nil { return errors.New("no port specified") } parts := strings.Split(args[0], "/") if len(parts) > 2 { return fmt.Errorf("expected %s; got %q", portFormat, args[0]) } port, err := strconv.Atoi(parts[0]) if err != nil { return badPort(parts[0]) } if port < 1 || port > 65535 { return badPort(port) } protocol := "tcp" if len(parts) == 2 { protocol = strings.ToLower(parts[1]) if protocol != "tcp" && protocol != "udp" { return fmt.Errorf(`protocol must be "tcp" or "udp"; got %q`, protocol) } } c.Port = port c.Protocol = protocol return cmd.CheckEmpty(args[1:]) }
func (c *PublishCommand) Init(args []string) error { if len(args) == 0 { return nil } c.URL = args[0] return cmd.CheckEmpty(args[1:]) }
func (v *VersionCommand) Init(f *gnuflag.FlagSet, args []string) error { v.out.AddFlags(f, "smart", cmd.DefaultFormatters) if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *ExposeCommand) Init(args []string) error { if len(args) == 0 { return errors.New("no service name specified") } c.ServiceName = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *DestroyEnvironmentCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *UpgradeJujuCommand) Init(args []string) error { if c.vers != "" { vers, err := version.Parse(c.vers) if err != nil { return err } if vers.Major != version.Current.Major { return fmt.Errorf("cannot upgrade to version incompatible with CLI") } if c.UploadTools && vers.Build != 0 { // TODO(fwereade): when we start taking versions from actual built // code, we should disable --version when used with --upload-tools. // For now, it's the only way to experiment with version upgrade // behaviour live, so the only restriction is that Build cannot // be used (because its value needs to be chosen internally so as // not to collide with existing tools). return fmt.Errorf("cannot specify build number when uploading tools") } c.Version = vers } if len(c.Series) > 0 && !c.UploadTools { return fmt.Errorf("--series requires --upload-tools") } return cmd.CheckEmpty(args) }
func (c *RemoteCommand) Init(f *gnuflag.FlagSet, args []string) error { f.StringVar(&c.msg, "error", "", "if set, fail") if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *RelationGetCommand) Init(f *gnuflag.FlagSet, args []string) error { // TODO FWER implement --format shell lp:1033511 c.out.AddFlags(f, "smart", cmd.DefaultFormatters) f.Var(newRelationIdValue(c.ctx, &c.RelationId), "r", "specify a relation by id") if err := f.Parse(true, args); err != nil { return err } if c.RelationId == -1 { return fmt.Errorf("no relation id specified") } args = f.Args() c.Key = "" if len(args) > 0 { if c.Key = args[0]; c.Key == "-" { c.Key = "" } args = args[1:] } if name, found := c.ctx.RemoteUnitName(); found { c.UnitName = name } if len(args) > 0 { c.UnitName = args[0] args = args[1:] } if c.UnitName == "" { return fmt.Errorf("no unit id specified") } return cmd.CheckEmpty(args) }
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 *GetCommand) Init(args []string) error { // TODO(dfc) add --schema-only if len(args) == 0 { return errors.New("no service name specified") } c.ServiceName = args[0] return cmd.CheckEmpty(args[1:]) }
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()) }
func (c *GetConstraintsCommand) Init(args []string) error { if len(args) > 0 { if !state.IsServiceName(args[0]) { return fmt.Errorf("invalid service name %q", args[0]) } c.ServiceName, args = args[0], args[1:] } return cmd.CheckEmpty(args) }
func (c *TestCommand) Init(f *gnuflag.FlagSet, args []string) error { if !c.Minimal { f.StringVar(&c.Option, "option", "", "option-doc") } if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *DestroyServiceCommand) Init(args []string) error { if len(args) == 0 { return fmt.Errorf("no service specified") } if !state.IsServiceName(args[0]) { return fmt.Errorf("invalid service name %q", args[0]) } c.ServiceName, args = args[0], args[1:] return cmd.CheckEmpty(args) }
func (c *UnitGetCommand) Init(args []string) error { if args == nil { return errors.New("no setting specified") } if args[0] != "private-address" && args[0] != "public-address" { return fmt.Errorf("unknown setting %q", args[0]) } c.Key = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *StatusCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, "json": cmd.FormatJson, }) if err := f.Parse(true, args); err != nil { return err } return cmd.CheckEmpty(f.Args()) }
func (c *ConfigGetCommand) Init(args []string) error { if args == nil { return nil } c.Key = args[0] if c.Key != "" && c.All { return fmt.Errorf("cannot use argument --all together with key %q", c.Key) } return cmd.CheckEmpty(args[1:]) }
func (c *ConfigGetCommand) Init(f *gnuflag.FlagSet, args []string) error { c.out.AddFlags(f, "smart", cmd.DefaultFormatters) if err := f.Parse(true, args); err != nil { return err } args = f.Args() if args == nil { return nil } c.Key = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *RelationIdsCommand) Init(args []string) error { if r, found := c.ctx.HookRelation(); found { c.Name = r.Name() } if len(args) > 0 { c.Name = args[0] args = args[1:] } else if c.Name == "" { return fmt.Errorf("no relation name specified") } return cmd.CheckEmpty(args) }
func (c *UnexposeCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) if err := f.Parse(true, args); err != nil { return err } args = f.Args() if len(args) == 0 { return errors.New("no service name specified") } c.ServiceName = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *AddUnitCommand) Init(args []string) error { switch len(args) { case 1: c.ServiceName = args[0] case 0: return errors.New("no service specified") } if err := cmd.CheckEmpty(args[1:]); err != nil { return err } return c.UnitCommandBase.Init(args) }
func (c *ResolvedCommand) Init(args []string) error { if len(args) > 0 { c.UnitName = args[0] if !names.IsUnit(c.UnitName) { return fmt.Errorf("invalid unit name %q", c.UnitName) } args = args[1:] } else { return fmt.Errorf("no unit specified") } return cmd.CheckEmpty(args) }
func (c *UnitGetCommand) Init(f *gnuflag.FlagSet, args []string) error { c.out.AddFlags(f, "smart", cmd.DefaultFormatters) if err := f.Parse(true, args); err != nil { return err } args = f.Args() if args == nil { return errors.New("no setting specified") } if args[0] != "private-address" && args[0] != "public-address" { return fmt.Errorf("unknown setting %q", args[0]) } c.Key = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *GetCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) // TODO(dfc) add json formatting ? c.out.AddFlags(f, "yaml", map[string]cmd.Formatter{ "yaml": cmd.FormatYaml, }) // TODO(dfc) add --schema-only if err := f.Parse(true, args); err != nil { return err } args = f.Args() if len(args) == 0 { return errors.New("no service name specified") } c.ServiceName = args[0] return cmd.CheckEmpty(args[1:]) }
func (c *RelationIdsCommand) Init(f *gnuflag.FlagSet, args []string) error { c.out.AddFlags(f, "smart", cmd.DefaultFormatters) if err := f.Parse(true, args); err != nil { return err } args = f.Args() if r, found := c.ctx.HookRelation(); found { c.Name = r.Name() } if len(args) > 0 { c.Name = args[0] args = args[1:] } else if c.Name == "" { return fmt.Errorf("no relation name specified") } return cmd.CheckEmpty(args) }
func (c *UpgradeCharmCommand) Init(args []string) error { switch len(args) { case 1: if !names.IsService(args[0]) { return fmt.Errorf("invalid service name %q", args[0]) } c.ServiceName = args[0] case 0: return errors.New("no service specified") default: return cmd.CheckEmpty(args[1:]) } if c.SwitchURL != "" && c.Revision != -1 { return fmt.Errorf("--switch and --revision are mutually exclusive") } return nil }
func (c *RelationListCommand) Init(f *gnuflag.FlagSet, args []string) (err error) { c.out.AddFlags(f, "smart", cmd.DefaultFormatters) if err := f.Parse(true, args); err != nil { return err } args = f.Args() v := newRelationIdValue(c.ctx, &c.RelationId) if len(args) > 0 { if err := v.Set(args[0]); err != nil { return err } args = args[1:] } if c.RelationId == -1 { return fmt.Errorf("no relation id specified") } return cmd.CheckEmpty(args) }
func (c *ResolvedCommand) Init(f *gnuflag.FlagSet, args []string) error { addEnvironFlags(&c.EnvName, f) f.BoolVar(&c.Retry, "r", false, "re-execute failed hooks") f.BoolVar(&c.Retry, "retry", false, "") if err := f.Parse(true, args); err != nil { return err } args = f.Args() if len(args) > 0 { c.UnitName = args[0] if !state.IsUnitName(c.UnitName) { return fmt.Errorf("invalid unit name %q", c.UnitName) } args = args[1:] } else { return fmt.Errorf("no unit specified") } return cmd.CheckEmpty(args) }
func (c *ImageMetadataCommand) Init(args []string) error { cred := identity.CredentialsFromEnv() if c.Region == "" { c.Region = cred.Region } if c.Endpoint == "" { c.Endpoint = cred.URL } if c.ImageId == "" { return fmt.Errorf("image id must be specified") } if c.Region == "" { return fmt.Errorf("image region must be specified") } if c.Endpoint == "" { return fmt.Errorf("cloud endpoint URL must be specified") } return cmd.CheckEmpty(args) }
func (c *DeployCommand) Init(args []string) error { switch len(args) { case 2: if !state.IsServiceName(args[1]) { return fmt.Errorf("invalid service name %q", args[1]) } c.ServiceName = args[1] fallthrough case 1: if _, err := charm.InferURL(args[0], "fake"); err != nil { return fmt.Errorf("invalid charm name %q", args[0]) } c.CharmName = args[0] case 0: return errors.New("no charm specified") default: return cmd.CheckEmpty(args[2:]) } return c.UnitCommandBase.Init(args) }