github.com/loafoe/cli@v7.1.0+incompatible/command/v7/set_label_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 "strings" 6 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/types" 10 ) 11 12 //go:generate counterfeiter . LabelSetter 13 14 type LabelSetter interface { 15 Execute(resource TargetResource, labels map[string]types.NullString) error 16 } 17 18 type SetLabelCommand struct { 19 BaseCommand 20 21 RequiredArgs flag.SetLabelArgs `positional-args:"yes"` 22 usage interface{} `usage:"CF_NAME set-label RESOURCE RESOURCE_NAME KEY=VALUE...\n\nEXAMPLES:\n cf set-label app dora env=production\n cf set-label org business pci=true public-facing=false\n cf set-label buildpack go_buildpack go=1.12 -s cflinuxfs3\n\nRESOURCES:\n app\n buildpack\n domain\n org\n route\n service-broker\n service-offering\n service-plan\n space\n stack"` 23 relatedCommands interface{} `related_commands:"labels, unset-label"` 24 BuildpackStack string `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"` 25 ServiceBroker string `long:"broker" short:"b" description:"Specify a service broker to disambiguate service offerings or service plans with the same name."` 26 ServiceOffering string `long:"offering" short:"e" description:"Specify a service offering to disambiguate service plans with the same name."` 27 28 LabelSetter LabelSetter 29 } 30 31 func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error { 32 err := cmd.BaseCommand.Setup(config, ui) 33 if err != nil { 34 return err 35 } 36 37 cmd.LabelSetter = &LabelUpdater{ 38 UI: ui, 39 Config: config, 40 SharedActor: cmd.SharedActor, 41 Actor: cmd.Actor, 42 Action: Set, 43 } 44 return nil 45 } 46 47 func (cmd SetLabelCommand) Execute(args []string) error { 48 targetResource := TargetResource{ 49 ResourceType: cmd.RequiredArgs.ResourceType, 50 ResourceName: cmd.RequiredArgs.ResourceName, 51 BuildpackStack: cmd.BuildpackStack, 52 ServiceBroker: cmd.ServiceBroker, 53 ServiceOffering: cmd.ServiceOffering, 54 } 55 56 labels := make(map[string]types.NullString) 57 for _, label := range cmd.RequiredArgs.Labels { 58 parts := strings.SplitN(label, "=", 2) 59 if len(parts) < 2 { 60 return fmt.Errorf("Metadata error: no value provided for label '%s'", label) 61 } 62 labels[parts[0]] = types.NewNullString(parts[1]) 63 } 64 65 return cmd.LabelSetter.Execute(targetResource, labels) 66 }