github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/cf/commands/securitygroup/unbind_security_group.go (about)

     1  package securitygroup
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"code.cloudfoundry.org/cli/cf/api/organizations"
     7  	"code.cloudfoundry.org/cli/cf/api/securitygroups"
     8  	sgbinder "code.cloudfoundry.org/cli/cf/api/securitygroups/spaces"
     9  	"code.cloudfoundry.org/cli/cf/api/spaces"
    10  	"code.cloudfoundry.org/cli/cf/commandregistry"
    11  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    12  	"code.cloudfoundry.org/cli/cf/flags"
    13  	. "code.cloudfoundry.org/cli/cf/i18n"
    14  	"code.cloudfoundry.org/cli/cf/requirements"
    15  	"code.cloudfoundry.org/cli/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  }