github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/command/v7/bind_security_group_command.go (about) 1 package v7 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 7 "code.cloudfoundry.org/cli/command/flag" 8 "code.cloudfoundry.org/cli/resources" 9 "code.cloudfoundry.org/cli/util/configv3" 10 ) 11 12 type BindSecurityGroupCommand struct { 13 BaseCommand 14 15 RequiredArgs flag.BindSecurityGroupV7Args `positional-args:"yes"` 16 Lifecycle flag.SecurityGroupLifecycle `long:"lifecycle" choice:"running" choice:"staging" default:"running" description:"Lifecycle phase the group applies to."` 17 Space string `long:"space" description:"Space to bind the security group to. (Default: all existing spaces in org)"` 18 usage interface{} `usage:"CF_NAME bind-security-group SECURITY_GROUP ORG [--lifecycle (running | staging)] [--space SPACE]\n\nTIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications."` 19 relatedCommands interface{} `related_commands:"apps, bind-running-security-group, bind-staging-security-group, restart, security-groups"` 20 } 21 22 func (cmd BindSecurityGroupCommand) Execute(args []string) error { 23 var err error 24 25 err = cmd.SharedActor.CheckTarget(false, false) 26 if err != nil { 27 return err 28 } 29 30 user, err := cmd.Config.CurrentUser() 31 if err != nil { 32 return err 33 } 34 35 if cmd.Space == "" { 36 cmd.UI.DisplayTextWithFlavor("Assigning {{.lifecycle}} security group {{.security_group}} to all spaces in org {{.organization}} as {{.username}}...", map[string]interface{}{ 37 "lifecycle": constant.SecurityGroupLifecycle(cmd.Lifecycle), 38 "security_group": cmd.RequiredArgs.SecurityGroupName, 39 "organization": cmd.RequiredArgs.OrganizationName, 40 "username": user.Name, 41 }) 42 cmd.UI.DisplayNewline() 43 } else { 44 cmd.UI.DisplayTextWithFlavor("Assigning {{.lifecycle}} security group {{.security_group}} to space {{.space}} in org {{.organization}} as {{.username}}...", map[string]interface{}{ 45 "lifecycle": constant.SecurityGroupLifecycle(cmd.Lifecycle), 46 "security_group": cmd.RequiredArgs.SecurityGroupName, 47 "space": cmd.Space, 48 "organization": cmd.RequiredArgs.OrganizationName, 49 "username": user.Name, 50 }) 51 } 52 53 securityGroup, warnings, err := cmd.Actor.GetSecurityGroup(cmd.RequiredArgs.SecurityGroupName) 54 cmd.UI.DisplayWarnings(warnings) 55 if err != nil { 56 return err 57 } 58 59 org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.OrganizationName) 60 cmd.UI.DisplayWarnings(warnings) 61 if err != nil { 62 return err 63 } 64 65 spacesToBind := []resources.Space{} 66 if cmd.Space != "" { 67 var space resources.Space 68 space, warnings, err = cmd.Actor.GetSpaceByNameAndOrganization(cmd.Space, org.GUID) 69 cmd.UI.DisplayWarnings(warnings) 70 if err != nil { 71 return err 72 } 73 spacesToBind = append(spacesToBind, space) 74 } else { 75 var spaces []resources.Space 76 spaces, warnings, err = cmd.Actor.GetOrganizationSpaces(org.GUID) 77 cmd.UI.DisplayWarnings(warnings) 78 if err != nil { 79 return err 80 } 81 spacesToBind = append(spacesToBind, spaces...) 82 } 83 84 if len(spacesToBind) == 0 { 85 cmd.UI.DisplayText("No spaces in org {{.organization}}.", map[string]interface{}{ 86 "organization": org.Name, 87 }) 88 } else { 89 90 if cmd.Space == "" { 91 cmd.announceBinding(spacesToBind, user) 92 } 93 94 warnings, err = cmd.Actor.BindSecurityGroupToSpaces(securityGroup.GUID, spacesToBind, constant.SecurityGroupLifecycle(cmd.Lifecycle)) 95 cmd.UI.DisplayWarnings(warnings) 96 if err != nil { 97 return err 98 } 99 100 cmd.UI.DisplayOK() 101 102 cmd.UI.DisplayText("TIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications.") 103 } 104 105 return nil 106 } 107 108 func (cmd BindSecurityGroupCommand) announceBinding(spaces []resources.Space, user configv3.User) { 109 110 var spacenames []string 111 112 for _, space := range spaces { 113 spacenames = append(spacenames, space.Name) 114 } 115 116 tokens := map[string]interface{}{ 117 "lifecycle": constant.SecurityGroupLifecycle(cmd.Lifecycle), 118 "security_group": cmd.RequiredArgs.SecurityGroupName, 119 "spaces": strings.Join(spacenames, ", "), 120 "organization": cmd.RequiredArgs.OrganizationName, 121 "username": user.Name, 122 } 123 singular := "Assigning {{.lifecycle}} security group {{.security_group}} to space {{.spaces}} in org {{.organization}} as {{.username}}..." 124 plural := "Assigning {{.lifecycle}} security group {{.security_group}} to spaces {{.spaces}} in org {{.organization}} as {{.username}}..." 125 126 if len(spaces) == 1 { 127 cmd.UI.DisplayTextWithFlavor(singular, tokens) 128 } else { 129 cmd.UI.DisplayTextWithFlavor(plural, tokens) 130 } 131 }