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