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