github.com/niteshexa/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  }