github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/cf/commands/securitygroup/unbind_security_group.go (about) 1 package securitygroup 2 3 import ( 4 "fmt" 5 6 "github.com/liamawhite/cli-with-i18n/cf/api/organizations" 7 "github.com/liamawhite/cli-with-i18n/cf/api/securitygroups" 8 sgbinder "github.com/liamawhite/cli-with-i18n/cf/api/securitygroups/spaces" 9 "github.com/liamawhite/cli-with-i18n/cf/api/spaces" 10 "github.com/liamawhite/cli-with-i18n/cf/commandregistry" 11 "github.com/liamawhite/cli-with-i18n/cf/configuration/coreconfig" 12 "github.com/liamawhite/cli-with-i18n/cf/flags" 13 . "github.com/liamawhite/cli-with-i18n/cf/i18n" 14 "github.com/liamawhite/cli-with-i18n/cf/requirements" 15 "github.com/liamawhite/cli-with-i18n/cf/terminal" 16 ) 17 18 type UnbindSecurityGroup struct { 19 ui terminal.UI 20 configRepo coreconfig.Reader 21 securityGroupRepo securitygroups.SecurityGroupRepo 22 orgRepo organizations.OrganizationRepository 23 spaceRepo spaces.SpaceRepository 24 secBinder sgbinder.SecurityGroupSpaceBinder 25 } 26 27 func init() { 28 commandregistry.Register(&UnbindSecurityGroup{}) 29 } 30 31 func (cmd *UnbindSecurityGroup) MetaData() commandregistry.CommandMetadata { 32 primaryUsage := T("CF_NAME unbind-security-group SECURITY_GROUP ORG SPACE") 33 tipUsage := T("TIP: Changes will not apply to existing running applications until they are restarted.") 34 return commandregistry.CommandMetadata{ 35 Name: "unbind-security-group", 36 Description: T("Unbind a security group from a space"), 37 Usage: []string{ 38 primaryUsage, 39 "\n\n", 40 tipUsage, 41 }, 42 } 43 } 44 45 func (cmd *UnbindSecurityGroup) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 46 argLength := len(fc.Args()) 47 if argLength != 1 && argLength != 3 { 48 cmd.ui.Failed(T("Incorrect Usage. Requires SECURITY_GROUP, ORG and SPACE as arguments\n\n") + commandregistry.Commands.CommandUsage("unbind-security-group")) 49 return nil, fmt.Errorf("Incorrect usage: %d arguments of 1 or 3 required", len(fc.Args())) 50 } 51 52 reqs := []requirements.Requirement{requirementsFactory.NewLoginRequirement()} 53 return reqs, nil 54 } 55 56 func (cmd *UnbindSecurityGroup) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 57 cmd.ui = deps.UI 58 cmd.configRepo = deps.Config 59 cmd.securityGroupRepo = deps.RepoLocator.GetSecurityGroupRepository() 60 cmd.spaceRepo = deps.RepoLocator.GetSpaceRepository() 61 cmd.orgRepo = deps.RepoLocator.GetOrganizationRepository() 62 cmd.secBinder = deps.RepoLocator.GetSecurityGroupSpaceBinder() 63 return cmd 64 } 65 66 func (cmd *UnbindSecurityGroup) Execute(context flags.FlagContext) error { 67 var spaceGUID string 68 var err error 69 70 secName := context.Args()[0] 71 72 if len(context.Args()) == 1 { 73 spaceGUID = cmd.configRepo.SpaceFields().GUID 74 spaceName := cmd.configRepo.SpaceFields().Name 75 orgName := cmd.configRepo.OrganizationFields().Name 76 77 cmd.flavorText(secName, orgName, spaceName) 78 } else { 79 orgName := context.Args()[1] 80 spaceName := context.Args()[2] 81 82 cmd.flavorText(secName, orgName, spaceName) 83 84 spaceGUID, err = cmd.lookupSpaceGUID(orgName, spaceName) 85 if err != nil { 86 return err 87 } 88 } 89 90 securityGroup, err := cmd.securityGroupRepo.Read(secName) 91 if err != nil { 92 return err 93 } 94 95 secGUID := securityGroup.GUID 96 97 err = cmd.secBinder.UnbindSpace(secGUID, spaceGUID) 98 if err != nil { 99 return err 100 } 101 cmd.ui.Ok() 102 cmd.ui.Say("\n\n") 103 cmd.ui.Say(T("TIP: Changes will not apply to existing running applications until they are restarted.")) 104 return nil 105 } 106 107 func (cmd UnbindSecurityGroup) flavorText(secName string, orgName string, spaceName string) { 108 cmd.ui.Say(T("Unbinding security group {{.security_group}} from {{.organization}}/{{.space}} as {{.username}}", 109 map[string]interface{}{ 110 "security_group": terminal.EntityNameColor(secName), 111 "organization": terminal.EntityNameColor(orgName), 112 "space": terminal.EntityNameColor(spaceName), 113 "username": terminal.EntityNameColor(cmd.configRepo.Username()), 114 })) 115 } 116 117 func (cmd UnbindSecurityGroup) lookupSpaceGUID(orgName string, spaceName string) (string, error) { 118 organization, err := cmd.orgRepo.FindByName(orgName) 119 if err != nil { 120 return "", err 121 } 122 orgGUID := organization.GUID 123 124 space, err := cmd.spaceRepo.FindByNameInOrg(spaceName, orgGUID) 125 if err != nil { 126 return "", err 127 } 128 return space.GUID, nil 129 }