github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/unbind_security_group_command.go (about)

     1  package v6
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/actor/sharedaction"
     6  	"code.cloudfoundry.org/cli/actor/v2action"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     8  	"code.cloudfoundry.org/cli/command"
     9  	"code.cloudfoundry.org/cli/command/flag"
    10  	"code.cloudfoundry.org/cli/command/translatableerror"
    11  	"code.cloudfoundry.org/cli/command/v6/shared"
    12  )
    13  
    14  //go:generate counterfeiter . UnbindSecurityGroupActor
    15  
    16  type UnbindSecurityGroupActor interface {
    17  	UnbindSecurityGroupByNameAndSpace(securityGroupName string, spaceGUID string, lifecycle constant.SecurityGroupLifecycle) (v2action.Warnings, error)
    18  	UnbindSecurityGroupByNameOrganizationNameAndSpaceName(securityGroupName string, orgName string, spaceName string, lifecycle constant.SecurityGroupLifecycle) (v2action.Warnings, error)
    19  }
    20  
    21  type UnbindSecurityGroupCommand struct {
    22  	RequiredArgs    flag.UnbindSecurityGroupArgs `positional-args:"yes"`
    23  	Lifecycle       flag.SecurityGroupLifecycle  `long:"lifecycle" choice:"running" choice:"staging" default:"running" description:"Lifecycle phase the group applies to"`
    24  	usage           interface{}                  `usage:"CF_NAME unbind-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."`
    25  	relatedCommands interface{}                  `related_commands:"apps, restart, security-groups"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	Actor       UnbindSecurityGroupActor
    30  	SharedActor command.SharedActor
    31  }
    32  
    33  func (cmd *UnbindSecurityGroupCommand) Setup(config command.Config, ui command.UI) error {
    34  	cmd.UI = ui
    35  	cmd.Config = config
    36  	cmd.SharedActor = sharedaction.NewActor(config)
    37  
    38  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v2action.NewActor(ccClient, uaaClient, config)
    43  
    44  	return nil
    45  }
    46  
    47  func (cmd UnbindSecurityGroupCommand) Execute(args []string) error {
    48  	var err error
    49  
    50  	user, err := cmd.Config.CurrentUser()
    51  	if err != nil {
    52  		return err
    53  	}
    54  
    55  	var warnings v2action.Warnings
    56  
    57  	switch {
    58  	case cmd.RequiredArgs.OrganizationName == "" && cmd.RequiredArgs.SpaceName == "":
    59  		err = cmd.SharedActor.CheckTarget(true, true)
    60  		if err != nil {
    61  			return err
    62  		}
    63  
    64  		space := cmd.Config.TargetedSpace()
    65  		cmd.UI.DisplayTextWithFlavor("Unbinding security group {{.SecurityGroupName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    66  			"SecurityGroupName": cmd.RequiredArgs.SecurityGroupName,
    67  			"OrgName":           cmd.Config.TargetedOrganization().Name,
    68  			"SpaceName":         space.Name,
    69  			"Username":          user.Name,
    70  		})
    71  		warnings, err = cmd.Actor.UnbindSecurityGroupByNameAndSpace(cmd.RequiredArgs.SecurityGroupName, space.GUID, constant.SecurityGroupLifecycle(cmd.Lifecycle))
    72  
    73  	case cmd.RequiredArgs.OrganizationName != "" && cmd.RequiredArgs.SpaceName != "":
    74  		err = cmd.SharedActor.CheckTarget(false, false)
    75  		if err != nil {
    76  			return err
    77  		}
    78  
    79  		cmd.UI.DisplayTextWithFlavor("Unbinding security group {{.SecurityGroupName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    80  			"SecurityGroupName": cmd.RequiredArgs.SecurityGroupName,
    81  			"OrgName":           cmd.RequiredArgs.OrganizationName,
    82  			"SpaceName":         cmd.RequiredArgs.SpaceName,
    83  			"Username":          user.Name,
    84  		})
    85  		warnings, err = cmd.Actor.UnbindSecurityGroupByNameOrganizationNameAndSpaceName(cmd.RequiredArgs.SecurityGroupName, cmd.RequiredArgs.OrganizationName, cmd.RequiredArgs.SpaceName, constant.SecurityGroupLifecycle(cmd.Lifecycle))
    86  
    87  	default:
    88  		return translatableerror.ThreeRequiredArgumentsError{
    89  			ArgumentName1: "SECURITY_GROUP",
    90  			ArgumentName2: "ORG",
    91  			ArgumentName3: "SPACE"}
    92  	}
    93  
    94  	cmd.UI.DisplayWarnings(warnings)
    95  	if err != nil {
    96  		switch e := err.(type) {
    97  		case actionerror.SecurityGroupNotBoundError:
    98  			cmd.UI.DisplayWarning("Security group {{.Name}} not bound to this space for lifecycle phase '{{.Lifecycle}}'.",
    99  				map[string]interface{}{
   100  					"Name":      e.Name,
   101  					"Lifecycle": e.Lifecycle,
   102  				})
   103  			cmd.UI.DisplayOK()
   104  			return nil
   105  		default:
   106  			return err
   107  		}
   108  	}
   109  
   110  	cmd.UI.DisplayOK()
   111  	cmd.UI.DisplayText("TIP: Changes require an app restart (for running) or restage (for staging) to apply to existing applications.")
   112  
   113  	return nil
   114  }