github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/bind_security_group_command.go (about) 1 package v6 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/sharedaction" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/v6/shared" 10 ) 11 12 //go:generate counterfeiter . BindSecurityGroupActor 13 14 type BindSecurityGroupActor interface { 15 BindSecurityGroupToSpace(securityGroupGUID string, spaceGUID string, lifecycle constant.SecurityGroupLifecycle) (v2action.Warnings, error) 16 CloudControllerAPIVersion() string 17 GetOrganizationByName(orgName string) (v2action.Organization, v2action.Warnings, error) 18 GetOrganizationSpaces(orgGUID string) ([]v2action.Space, v2action.Warnings, error) 19 GetSecurityGroupByName(securityGroupName string) (v2action.SecurityGroup, v2action.Warnings, error) 20 GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (v2action.Space, v2action.Warnings, error) 21 } 22 23 type BindSecurityGroupCommand struct { 24 RequiredArgs flag.BindSecurityGroupArgs `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 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."` 27 relatedCommands interface{} `related_commands:"apps, bind-running-security-group, bind-staging-security-group, restart, security-groups"` 28 29 UI command.UI 30 Config command.Config 31 SharedActor command.SharedActor 32 Actor BindSecurityGroupActor 33 } 34 35 func (cmd *BindSecurityGroupCommand) 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.GetNewClientsAndConnectToCF(config, ui) 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 BindSecurityGroupCommand) Execute(args []string) error { 50 var err error 51 52 err = cmd.SharedActor.CheckTarget(false, false) 53 if err != nil { 54 return err 55 } 56 57 user, err := cmd.Config.CurrentUser() 58 if err != nil { 59 return err 60 } 61 62 securityGroup, warnings, err := cmd.Actor.GetSecurityGroupByName(cmd.RequiredArgs.SecurityGroupName) 63 cmd.UI.DisplayWarnings(warnings) 64 if err != nil { 65 return err 66 } 67 68 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.OrganizationName) 69 cmd.UI.DisplayWarnings(warnings) 70 if err != nil { 71 return err 72 } 73 74 spacesToBind := []v2action.Space{} 75 if cmd.RequiredArgs.SpaceName != "" { 76 var space v2action.Space 77 space, warnings, err = cmd.Actor.GetSpaceByOrganizationAndName(org.GUID, cmd.RequiredArgs.SpaceName) 78 cmd.UI.DisplayWarnings(warnings) 79 if err != nil { 80 return err 81 } 82 spacesToBind = append(spacesToBind, space) 83 } else { 84 var spaces []v2action.Space 85 spaces, warnings, err = cmd.Actor.GetOrganizationSpaces(org.GUID) 86 cmd.UI.DisplayWarnings(warnings) 87 if err != nil { 88 return err 89 } 90 spacesToBind = append(spacesToBind, spaces...) 91 } 92 93 for _, space := range spacesToBind { 94 cmd.UI.DisplayTextWithFlavor("Assigning security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", map[string]interface{}{ 95 "security_group": securityGroup.Name, 96 "space": space.Name, 97 "organization": org.Name, 98 "username": user.Name, 99 }) 100 101 warnings, err = cmd.Actor.BindSecurityGroupToSpace(securityGroup.GUID, space.GUID, constant.SecurityGroupLifecycle(cmd.Lifecycle)) 102 cmd.UI.DisplayWarnings(warnings) 103 if err != nil { 104 return err 105 } 106 107 cmd.UI.DisplayOK() 108 } 109 110 cmd.UI.DisplayText("TIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications.") 111 112 return nil 113 }