github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v2/unbind_security_group_command.go (about) 1 package v2 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 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/v2/shared" 13 ) 14 15 //go:generate counterfeiter . UnbindSecurityGroupActor 16 17 type UnbindSecurityGroupActor interface { 18 CloudControllerAPIVersion() string 19 UnbindSecurityGroupByNameAndSpace(securityGroupName string, spaceGUID string, lifecycle constant.SecurityGroupLifecycle) (v2action.Warnings, error) 20 UnbindSecurityGroupByNameOrganizationNameAndSpaceName(securityGroupName string, orgName string, spaceName string, lifecycle constant.SecurityGroupLifecycle) (v2action.Warnings, error) 21 } 22 23 type UnbindSecurityGroupCommand struct { 24 RequiredArgs flag.UnbindSecurityGroupArgs `positional-args:"yes"` 25 Lifecycle flag.SecurityGroupLifecycle `long:"lifecycle" choice:"running" choice:"staging" default:"running" description:"Lifecycle phase the group applies to"` 26 usage interface{} `usage:"CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE [--lifecycle (running | staging)]\n\nTIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications."` 27 relatedCommands interface{} `related_commands:"apps, restart, security-groups"` 28 29 UI command.UI 30 Config command.Config 31 Actor UnbindSecurityGroupActor 32 SharedActor command.SharedActor 33 } 34 35 func (cmd *UnbindSecurityGroupCommand) Setup(config command.Config, ui command.UI) error { 36 cmd.UI = ui 37 cmd.Config = config 38 cmd.SharedActor = sharedaction.NewActor(config) 39 40 ccClient, uaaClient, err := shared.NewClients(config, ui, true) 41 if err != nil { 42 return err 43 } 44 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 45 46 return nil 47 } 48 49 func (cmd UnbindSecurityGroupCommand) Execute(args []string) error { 50 var err error 51 if constant.SecurityGroupLifecycle(cmd.Lifecycle) == constant.SecurityGroupLifecycleStaging { 52 err = command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionLifecyleStagingV2) 53 if err != nil { 54 switch e := err.(type) { 55 case translatableerror.MinimumAPIVersionNotMetError: 56 return translatableerror.LifecycleMinimumAPIVersionNotMetError{ 57 CurrentVersion: e.CurrentVersion, 58 MinimumVersion: e.MinimumVersion, 59 } 60 default: 61 return err 62 } 63 } 64 } 65 66 user, err := cmd.Config.CurrentUser() 67 if err != nil { 68 return err 69 } 70 71 var warnings v2action.Warnings 72 73 switch { 74 case cmd.RequiredArgs.OrganizationName == "" && cmd.RequiredArgs.SpaceName == "": 75 err = cmd.SharedActor.CheckTarget(true, true) 76 if err != nil { 77 return err 78 } 79 80 space := cmd.Config.TargetedSpace() 81 cmd.UI.DisplayTextWithFlavor("Unbinding security group {{.SecurityGroupName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 82 "SecurityGroupName": cmd.RequiredArgs.SecurityGroupName, 83 "OrgName": cmd.Config.TargetedOrganization().Name, 84 "SpaceName": space.Name, 85 "Username": user.Name, 86 }) 87 warnings, err = cmd.Actor.UnbindSecurityGroupByNameAndSpace(cmd.RequiredArgs.SecurityGroupName, space.GUID, constant.SecurityGroupLifecycle(cmd.Lifecycle)) 88 89 case cmd.RequiredArgs.OrganizationName != "" && cmd.RequiredArgs.SpaceName != "": 90 err = cmd.SharedActor.CheckTarget(false, false) 91 if err != nil { 92 return err 93 } 94 95 cmd.UI.DisplayTextWithFlavor("Unbinding security group {{.SecurityGroupName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 96 "SecurityGroupName": cmd.RequiredArgs.SecurityGroupName, 97 "OrgName": cmd.RequiredArgs.OrganizationName, 98 "SpaceName": cmd.RequiredArgs.SpaceName, 99 "Username": user.Name, 100 }) 101 warnings, err = cmd.Actor.UnbindSecurityGroupByNameOrganizationNameAndSpaceName(cmd.RequiredArgs.SecurityGroupName, cmd.RequiredArgs.OrganizationName, cmd.RequiredArgs.SpaceName, constant.SecurityGroupLifecycle(cmd.Lifecycle)) 102 103 default: 104 return translatableerror.ThreeRequiredArgumentsError{ 105 ArgumentName1: "SECURITY_GROUP", 106 ArgumentName2: "ORG", 107 ArgumentName3: "SPACE"} 108 } 109 110 cmd.UI.DisplayWarnings(warnings) 111 if err != nil { 112 switch e := err.(type) { 113 case actionerror.SecurityGroupNotBoundError: 114 cmd.UI.DisplayWarning("Security group {{.Name}} not bound to this space for lifecycle phase '{{.Lifecycle}}'.", 115 map[string]interface{}{ 116 "Name": e.Name, 117 "Lifecycle": e.Lifecycle, 118 }) 119 cmd.UI.DisplayOK() 120 return nil 121 default: 122 return err 123 } 124 } 125 126 cmd.UI.DisplayOK() 127 cmd.UI.DisplayNewline() 128 cmd.UI.DisplayText("TIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications.") 129 130 return nil 131 }