github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  }