github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/unset_label_command.go (about) 1 package v7 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/cf/errors" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/translatableerror" 12 "code.cloudfoundry.org/cli/command/v7/shared" 13 "code.cloudfoundry.org/cli/types" 14 "code.cloudfoundry.org/clock" 15 ) 16 17 type UnsetLabelCommand struct { 18 RequiredArgs flag.UnsetLabelArgs `positional-args:"yes"` 19 BuildpackStack string `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name"` 20 usage interface{} `usage:"CF_NAME unset-label RESOURCE RESOURCE_NAME KEY...\n\nEXAMPLES:\n cf unset-label app dora ci_signature_sha2\n cf unset-label org business pci public-facing\n cf unset-label buildpack go_buildpack go -s cflinuxfs3\n\nRESOURCES:\n app\n buildpack\n domain\n org\n route\n space\n stack"` 21 relatedCommands interface{} `related_commands:"labels, set-label"` 22 UI command.UI 23 Config command.Config 24 SharedActor command.SharedActor 25 Actor SetLabelActor 26 } 27 28 func (cmd *UnsetLabelCommand) Setup(config command.Config, ui command.UI) error { 29 cmd.UI = ui 30 cmd.Config = config 31 cmd.SharedActor = sharedaction.NewActor(config) 32 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 33 if err != nil { 34 return err 35 } 36 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 37 return nil 38 } 39 40 func (cmd UnsetLabelCommand) Execute(args []string) error { 41 user, err := cmd.Config.CurrentUser() 42 if err != nil { 43 return err 44 } 45 46 err = cmd.validateFlags() 47 if err != nil { 48 return err 49 } 50 51 labels := make(map[string]types.NullString) 52 for _, value := range cmd.RequiredArgs.LabelKeys { 53 labels[value] = types.NewNullString() 54 } 55 56 resourceTypeString := strings.ToLower(cmd.RequiredArgs.ResourceType) 57 switch ResourceType(resourceTypeString) { 58 case App: 59 err = cmd.executeApp(user.Name, labels) 60 case Buildpack: 61 err = cmd.executeBuildpack(user.Name, labels) 62 case Domain: 63 err = cmd.executeDomain(user.Name, labels) 64 case Org: 65 err = cmd.executeOrg(user.Name, labels) 66 case Route: 67 err = cmd.executeRoute(user.Name, labels) 68 case Space: 69 err = cmd.executeSpace(user.Name, labels) 70 case Stack: 71 err = cmd.executeStack(user.Name, labels) 72 73 default: 74 err = errors.New(cmd.UI.TranslateText("Unsupported resource type of '{{.ResourceType}}'", map[string]interface{}{"ResourceType": cmd.RequiredArgs.ResourceType})) 75 } 76 77 if err != nil { 78 return err 79 } 80 81 cmd.UI.DisplayOK() 82 return nil 83 } 84 85 func (cmd UnsetLabelCommand) executeApp(username string, labels map[string]types.NullString) error { 86 err := cmd.SharedActor.CheckTarget(true, true) 87 if err != nil { 88 return err 89 } 90 91 cmd.UI.DisplayTextWithFlavor("Removing label(s) for app {{.ResourceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{ 92 "ResourceName": cmd.RequiredArgs.ResourceName, 93 "OrgName": cmd.Config.TargetedOrganization().Name, 94 "SpaceName": cmd.Config.TargetedSpace().Name, 95 "User": username, 96 }) 97 98 warnings, err := cmd.Actor.UpdateApplicationLabelsByApplicationName(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID, labels) 99 100 cmd.UI.DisplayWarnings(warnings) 101 102 return err 103 } 104 105 func (cmd UnsetLabelCommand) executeDomain(username string, labels map[string]types.NullString) error { 106 cmd.UI.DisplayTextWithFlavor("Removing label(s) for domain {{.ResourceName}} as {{.User}}...", map[string]interface{}{ 107 "ResourceName": cmd.RequiredArgs.ResourceName, 108 "User": username, 109 }) 110 111 warnings, err := cmd.Actor.UpdateDomainLabelsByDomainName(cmd.RequiredArgs.ResourceName, labels) 112 113 cmd.UI.DisplayWarnings(warnings) 114 115 return err 116 } 117 118 func (cmd UnsetLabelCommand) executeRoute(username string, labels map[string]types.NullString) error { 119 cmd.UI.DisplayTextWithFlavor("Removing label(s) for route {{.ResourceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{ 120 "ResourceName": cmd.RequiredArgs.ResourceName, 121 "OrgName": cmd.Config.TargetedOrganization().Name, 122 "SpaceName": cmd.Config.TargetedSpace().Name, 123 "User": username, 124 }) 125 126 warnings, err := cmd.Actor.UpdateRouteLabels(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedSpace().GUID, labels) 127 128 cmd.UI.DisplayWarnings(warnings) 129 130 return err 131 } 132 133 func (cmd UnsetLabelCommand) executeBuildpack(username string, labels map[string]types.NullString) error { 134 err := cmd.SharedActor.CheckTarget(false, false) 135 if err != nil { 136 return err 137 } 138 139 var template string 140 if cmd.BuildpackStack == "" { 141 template = "Removing label(s) for buildpack {{.ResourceName}} as {{.User}}..." 142 } else { 143 template = "Removing label(s) for buildpack {{.ResourceName}} with stack {{.StackName}} as {{.User}}..." 144 } 145 cmd.UI.DisplayTextWithFlavor(template, map[string]interface{}{ 146 "ResourceName": cmd.RequiredArgs.ResourceName, 147 "StackName": cmd.BuildpackStack, 148 "User": username, 149 }) 150 151 warnings, err := cmd.Actor.UpdateBuildpackLabelsByBuildpackNameAndStack(cmd.RequiredArgs.ResourceName, cmd.BuildpackStack, labels) 152 153 cmd.UI.DisplayWarnings(warnings) 154 155 return err 156 } 157 158 func (cmd UnsetLabelCommand) executeOrg(username string, labels map[string]types.NullString) error { 159 err := cmd.SharedActor.CheckTarget(false, false) 160 if err != nil { 161 return err 162 } 163 164 cmd.UI.DisplayTextWithFlavor("Removing label(s) for org {{.ResourceName}} as {{.User}}...", map[string]interface{}{ 165 "ResourceName": cmd.RequiredArgs.ResourceName, 166 "User": username, 167 }) 168 169 warnings, err := cmd.Actor.UpdateOrganizationLabelsByOrganizationName(cmd.RequiredArgs.ResourceName, labels) 170 171 cmd.UI.DisplayWarnings(warnings) 172 173 return err 174 } 175 176 func (cmd UnsetLabelCommand) executeSpace(username string, labels map[string]types.NullString) error { 177 err := cmd.SharedActor.CheckTarget(true, false) 178 if err != nil { 179 return err 180 } 181 182 cmd.UI.DisplayTextWithFlavor("Removing label(s) for space {{.ResourceName}} in org {{.OrgName}} as {{.User}}...", map[string]interface{}{ 183 "ResourceName": cmd.RequiredArgs.ResourceName, 184 "OrgName": cmd.Config.TargetedOrganization().Name, 185 "User": username, 186 }) 187 188 warnings, err := cmd.Actor.UpdateSpaceLabelsBySpaceName(cmd.RequiredArgs.ResourceName, cmd.Config.TargetedOrganization().GUID, labels) 189 190 cmd.UI.DisplayWarnings(warnings) 191 192 return err 193 } 194 195 func (cmd UnsetLabelCommand) executeStack(username string, labels map[string]types.NullString) error { 196 err := cmd.SharedActor.CheckTarget(false, false) 197 if err != nil { 198 return err 199 } 200 201 cmd.UI.DisplayTextWithFlavor("Removing label(s) for stack {{.ResourceName}} as {{.User}}...", map[string]interface{}{ 202 "ResourceName": cmd.RequiredArgs.ResourceName, 203 "User": username, 204 }) 205 206 warnings, err := cmd.Actor.UpdateStackLabelsByStackName(cmd.RequiredArgs.ResourceName, labels) 207 208 cmd.UI.DisplayWarnings(warnings) 209 210 return err 211 } 212 213 func (cmd UnsetLabelCommand) validateFlags() error { 214 resourceTypeString := strings.ToLower(cmd.RequiredArgs.ResourceType) 215 if cmd.BuildpackStack != "" && ResourceType(resourceTypeString) != Buildpack { 216 return translatableerror.ArgumentCombinationError{ 217 Args: []string{ 218 cmd.RequiredArgs.ResourceType, "--stack, -s", 219 }, 220 } 221 } 222 return nil 223 }