github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/set_label_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 "strings" 6 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/v7/shared" 12 "code.cloudfoundry.org/cli/types" 13 "code.cloudfoundry.org/clock" 14 ) 15 16 //go:generate counterfeiter . LabelSetter 17 18 type LabelSetter interface { 19 Execute(resource TargetResource, labels map[string]types.NullString) error 20 } 21 22 type SetLabelCommand struct { 23 RequiredArgs flag.SetLabelArgs `positional-args:"yes"` 24 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 space\n stack"` 25 relatedCommands interface{} `related_commands:"labels, unset-label"` 26 BuildpackStack string `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"` 27 LabelSetter LabelSetter 28 } 29 30 func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error { 31 sharedActor := sharedaction.NewActor(config) 32 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 33 if err != nil { 34 return err 35 } 36 actor := v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 37 38 cmd.LabelSetter = &LabelUpdater{ 39 UI: ui, 40 Config: config, 41 SharedActor: sharedActor, 42 Actor: actor, 43 Action: Set, 44 } 45 return nil 46 } 47 48 func (cmd SetLabelCommand) Execute(args []string) error { 49 targetResource := TargetResource{ 50 ResourceType: cmd.RequiredArgs.ResourceType, 51 ResourceName: cmd.RequiredArgs.ResourceName, 52 BuildpackStack: cmd.BuildpackStack, 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 }