github.com/arunkumar7540/cli@v6.45.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/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 ) 14 15 //go:generate counterfeiter . SetLabelActor 16 17 type SetLabelActor interface { 18 UpdateApplicationLabelsByApplicationName(string, string, map[string]types.NullString) (v7action.Warnings, error) 19 UpdateOrganizationLabelsByOrganizationName(string, map[string]types.NullString) (v7action.Warnings, error) 20 UpdateSpaceLabelsBySpaceName(string, string, map[string]types.NullString) (v7action.Warnings, error) 21 } 22 23 type SetLabelCommand struct { 24 RequiredArgs flag.SetLabelArgs `positional-args:"yes"` 25 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 space business_space public-facing=false owner=jane_doe\n\nRESOURCES:\n app\n org\n space\n\nSEE ALSO:\n delete-label, labels"` 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor SetLabelActor 30 } 31 32 func (cmd *SetLabelCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 ccClient, _, err := shared.NewClients(config, ui, true, "") 37 if err != nil { 38 return err 39 } 40 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil) 41 return nil 42 } 43 44 func (cmd SetLabelCommand) Execute(args []string) error { 45 46 labels := make(map[string]types.NullString) 47 for _, label := range cmd.RequiredArgs.Labels { 48 parts := strings.SplitN(label, "=", 2) 49 if len(parts) < 2 { 50 return fmt.Errorf("Metadata error: no value provided for label '%s'", label) 51 } 52 labels[parts[0]] = types.NewNullString(parts[1]) 53 } 54 55 username, err := cmd.Config.CurrentUserName() 56 if err != nil { 57 return err 58 } 59 60 switch ResourceType(cmd.RequiredArgs.ResourceType) { 61 case App: 62 err = cmd.executeApp(username, labels) 63 case Org: 64 err = cmd.executeOrg(username, labels) 65 case Space: 66 err = cmd.executeSpace(username, labels) 67 default: 68 err = fmt.Errorf("Unsupported resource type of '%s'", cmd.RequiredArgs.ResourceType) 69 } 70 71 if err != nil { 72 return err 73 } 74 75 cmd.UI.DisplayOK() 76 return nil 77 } 78 79 func (cmd SetLabelCommand) executeOrg(username string, labels map[string]types.NullString) error { 80 err := cmd.SharedActor.CheckTarget(false, false) 81 if err != nil { 82 return err 83 } 84 85 preFlavoringText := fmt.Sprintf("Setting label(s) for %s {{.ResourceName}} as {{.User}}...", cmd.RequiredArgs.ResourceType) 86 cmd.UI.DisplayTextWithFlavor( 87 preFlavoringText, 88 map[string]interface{}{ 89 "ResourceName": cmd.RequiredArgs.ResourceName, 90 "OrgName": cmd.Config.TargetedOrganization().Name, 91 "User": username, 92 }, 93 ) 94 95 warnings, err := cmd.Actor.UpdateOrganizationLabelsByOrganizationName(cmd.RequiredArgs.ResourceName, 96 labels) 97 cmd.UI.DisplayWarnings(warnings) 98 99 return err 100 } 101 102 func (cmd SetLabelCommand) executeApp(username string, labels map[string]types.NullString) error { 103 err := cmd.SharedActor.CheckTarget(true, true) 104 if err != nil { 105 return err 106 } 107 108 appName := cmd.RequiredArgs.ResourceName 109 110 preFlavoringText := fmt.Sprintf("Setting label(s) for %s {{.ResourceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", cmd.RequiredArgs.ResourceType) 111 cmd.UI.DisplayTextWithFlavor( 112 preFlavoringText, 113 map[string]interface{}{ 114 "ResourceName": appName, 115 "OrgName": cmd.Config.TargetedOrganization().Name, 116 "SpaceName": cmd.Config.TargetedSpace().Name, 117 "User": username, 118 }, 119 ) 120 121 warnings, err := cmd.Actor.UpdateApplicationLabelsByApplicationName(appName, 122 cmd.Config.TargetedSpace().GUID, 123 labels) 124 125 cmd.UI.DisplayWarnings(warnings) 126 if err != nil { 127 return err 128 } 129 130 return nil 131 } 132 133 func (cmd SetLabelCommand) executeSpace(username string, labels map[string]types.NullString) error { 134 err := cmd.SharedActor.CheckTarget(true, false) 135 if err != nil { 136 return err 137 } 138 139 spaceName := cmd.RequiredArgs.ResourceName 140 141 preFlavoringText := fmt.Sprintf("Setting label(s) for %s {{.ResourceName}} in org {{.OrgName}} as {{.User}}...", cmd.RequiredArgs.ResourceType) 142 cmd.UI.DisplayTextWithFlavor( 143 preFlavoringText, 144 map[string]interface{}{ 145 "ResourceName": spaceName, 146 "OrgName": cmd.Config.TargetedOrganization().Name, 147 "User": username, 148 }, 149 ) 150 151 warnings, err := cmd.Actor.UpdateSpaceLabelsBySpaceName(spaceName, 152 cmd.Config.TargetedOrganization().GUID, 153 labels) 154 155 cmd.UI.DisplayWarnings(warnings) 156 if err != nil { 157 return err 158 } 159 160 return nil 161 }