github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/bind_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 . BindSecurityGroupActor 15 16 type BindSecurityGroupActor interface { 17 BindSecurityGroupToSpace(securityGroupGUID string, spaceGUID string, lifecycle ccv2.SecurityGroupLifecycle) (v2action.Warnings, error) 18 CloudControllerAPIVersion() string 19 GetOrganizationByName(orgName string) (v2action.Organization, v2action.Warnings, error) 20 GetOrganizationSpaces(orgGUID string) ([]v2action.Space, v2action.Warnings, error) 21 GetSecurityGroupByName(securityGroupName string) (v2action.SecurityGroup, v2action.Warnings, error) 22 GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (v2action.Space, v2action.Warnings, error) 23 } 24 25 type BindSecurityGroupCommand struct { 26 RequiredArgs flag.BindSecurityGroupArgs `positional-args:"yes"` 27 Lifecycle flag.SecurityGroupLifecycle `long:"lifecycle" choice:"running" choice:"staging" default:"running" description:"Lifecycle phase the group applies to"` 28 usage interface{} `usage:"CF_NAME bind-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."` 29 relatedCommands interface{} `related_commands:"apps, bind-running-security-group, bind-staging-security-group, restart, security-groups"` 30 31 UI command.UI 32 Config command.Config 33 SharedActor command.SharedActor 34 Actor BindSecurityGroupActor 35 } 36 37 func (cmd *BindSecurityGroupCommand) Setup(config command.Config, ui command.UI) error { 38 cmd.UI = ui 39 cmd.Config = config 40 cmd.SharedActor = sharedaction.NewActor(config) 41 42 ccClient, uaaClient, err := shared.NewClients(config, ui, true) 43 if err != nil { 44 return err 45 } 46 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 47 48 return nil 49 } 50 51 func (cmd BindSecurityGroupCommand) Execute(args []string) error { 52 var err error 53 if ccv2.SecurityGroupLifecycle(cmd.Lifecycle) == ccv2.SecurityGroupLifecycleStaging { 54 err = command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionLifecyleStagingV2) 55 if err != nil { 56 switch e := err.(type) { 57 case translatableerror.MinimumAPIVersionNotMetError: 58 return translatableerror.LifecycleMinimumAPIVersionNotMetError{ 59 CurrentVersion: e.CurrentVersion, 60 MinimumVersion: e.MinimumVersion, 61 } 62 default: 63 return err 64 } 65 } 66 } 67 68 err = cmd.SharedActor.CheckTarget(cmd.Config, false, false) 69 if err != nil { 70 return shared.HandleError(err) 71 } 72 73 user, err := cmd.Config.CurrentUser() 74 if err != nil { 75 return err 76 } 77 78 securityGroup, warnings, err := cmd.Actor.GetSecurityGroupByName(cmd.RequiredArgs.SecurityGroupName) 79 cmd.UI.DisplayWarnings(warnings) 80 if err != nil { 81 return shared.HandleError(err) 82 } 83 84 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.OrganizationName) 85 cmd.UI.DisplayWarnings(warnings) 86 if err != nil { 87 return shared.HandleError(err) 88 } 89 90 spacesToBind := []v2action.Space{} 91 if cmd.RequiredArgs.SpaceName != "" { 92 var space v2action.Space 93 space, warnings, err = cmd.Actor.GetSpaceByOrganizationAndName(org.GUID, cmd.RequiredArgs.SpaceName) 94 cmd.UI.DisplayWarnings(warnings) 95 if err != nil { 96 return shared.HandleError(err) 97 } 98 spacesToBind = append(spacesToBind, space) 99 } else { 100 var spaces []v2action.Space 101 spaces, warnings, err = cmd.Actor.GetOrganizationSpaces(org.GUID) 102 cmd.UI.DisplayWarnings(warnings) 103 if err != nil { 104 return shared.HandleError(err) 105 } 106 spacesToBind = append(spacesToBind, spaces...) 107 } 108 109 for _, space := range spacesToBind { 110 cmd.UI.DisplayTextWithFlavor("Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", map[string]interface{}{ 111 "security_group": securityGroup.Name, 112 "space": space.Name, 113 "organization": org.Name, 114 "username": user.Name, 115 }) 116 117 warnings, err = cmd.Actor.BindSecurityGroupToSpace(securityGroup.GUID, space.GUID, ccv2.SecurityGroupLifecycle(cmd.Lifecycle)) 118 cmd.UI.DisplayWarnings(warnings) 119 if err != nil { 120 return shared.HandleError(err) 121 } 122 123 cmd.UI.DisplayOK() 124 } 125 126 cmd.UI.DisplayText("TIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications.") 127 128 return nil 129 }