github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/set_label_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/LukasHeimann/cloudfoundrycli/v8/command" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/types" 10 ) 11 12 //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . 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 relatedCommands interface{} `related_commands:"labels, unset-label"` 23 BuildpackStack string `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"` 24 ServiceBroker string `long:"broker" short:"b" description:"Specify a service broker to disambiguate service offerings or service plans with the same name."` 25 ServiceOffering string `long:"offering" short:"e" description:"Specify a service offering to disambiguate service plans with the same name."` 26 27 LabelSetter LabelSetter 28 } 29 30 func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error { 31 err := cmd.BaseCommand.Setup(config, ui) 32 if err != nil { 33 return err 34 } 35 36 cmd.LabelSetter = &LabelUpdater{ 37 UI: ui, 38 Config: config, 39 SharedActor: cmd.SharedActor, 40 Actor: cmd.Actor, 41 Action: Set, 42 } 43 return nil 44 } 45 46 func (cmd SetLabelCommand) Execute(args []string) error { 47 targetResource := TargetResource{ 48 ResourceType: cmd.RequiredArgs.ResourceType, 49 ResourceName: cmd.RequiredArgs.ResourceName, 50 BuildpackStack: cmd.BuildpackStack, 51 ServiceBroker: cmd.ServiceBroker, 52 ServiceOffering: cmd.ServiceOffering, 53 } 54 55 labels := make(map[string]types.NullString) 56 for _, label := range cmd.RequiredArgs.Labels { 57 parts := strings.SplitN(label, "=", 2) 58 if len(parts) < 2 { 59 return fmt.Errorf("Metadata error: no value provided for label '%s'", label) 60 } 61 labels[parts[0]] = types.NewNullString(parts[1]) 62 } 63 64 return cmd.LabelSetter.Execute(targetResource, labels) 65 } 66 67 func (cmd SetLabelCommand) Usage() string { 68 return `CF_NAME set-label RESOURCE RESOURCE_NAME KEY=VALUE...` 69 } 70 71 func (cmd SetLabelCommand) Examples() string { 72 return ` 73 cf set-label app dora env=production 74 cf set-label org business pci=true public-facing=false 75 cf set-label buildpack go_buildpack go=1.12 -s cflinuxfs3` 76 } 77 78 func (cmd SetLabelCommand) Resources() string { 79 return ` 80 app 81 buildpack 82 domain 83 org 84 route 85 service-broker 86 service-instance 87 service-offering 88 service-plan 89 space 90 stack` 91 }