github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/create_space_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/resources"
     9  )
    10  
    11  type CreateSpaceActor interface {
    12  	CreateSpace(spaceName, orgGUID string) (resources.Space, v7action.Warnings, error)
    13  	CreateSpaceRole(roleType constant.RoleType, orgGUID string, spaceGUID string, userNameOrGUID string, userOrigin string, isClient bool) (v7action.Warnings, error)
    14  	GetOrganizationByName(orgName string) (resources.Organization, v7action.Warnings, error)
    15  	ApplySpaceQuotaByName(quotaName string, spaceGUID string, orgGUID string) (v7action.Warnings, error)
    16  }
    17  
    18  type CreateSpaceCommand struct {
    19  	BaseCommand
    20  
    21  	RequiredArgs    flag.Space  `positional-args:"yes"`
    22  	Organization    string      `short:"o" description:"Organization"`
    23  	Quota           string      `long:"quota" short:"q" description:"Quota to assign to the newly created space"`
    24  	usage           interface{} `usage:"CF_NAME create-space SPACE [-o ORG] [-q QUOTA]"`
    25  	relatedCommands interface{} `related_commands:"set-space-isolation-segment, space-quotas, spaces, target"`
    26  }
    27  
    28  func (cmd CreateSpaceCommand) Execute(args []string) error {
    29  	err := cmd.SharedActor.CheckTarget(false, false)
    30  	if err != nil {
    31  		return err
    32  	}
    33  
    34  	var orgName, orgGUID string
    35  
    36  	if cmd.Organization == "" {
    37  		_, err = cmd.SharedActor.RequireTargetedOrg()
    38  		if err != nil {
    39  			return err
    40  		}
    41  		orgName = cmd.Config.TargetedOrganization().Name
    42  		orgGUID = cmd.Config.TargetedOrganization().GUID
    43  	} else {
    44  		orgName = cmd.Organization
    45  		org, warnings, err := cmd.Actor.GetOrganizationByName(orgName)
    46  		cmd.UI.DisplayWarnings(warnings)
    47  		if err != nil {
    48  			return err
    49  		}
    50  		orgGUID = org.GUID
    51  	}
    52  
    53  	user, err := cmd.Actor.GetCurrentUser()
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	spaceName := cmd.RequiredArgs.Space
    59  
    60  	cmd.UI.DisplayTextWithFlavor("Creating space {{.Space}} in org {{.Organization}} as {{.User}}...",
    61  		map[string]interface{}{
    62  			"User":         user.Name,
    63  			"Space":        spaceName,
    64  			"Organization": orgName,
    65  		})
    66  	space, warnings, err := cmd.Actor.CreateSpace(spaceName, orgGUID)
    67  	cmd.UI.DisplayWarnings(warnings)
    68  
    69  	if _, ok := err.(actionerror.SpaceAlreadyExistsError); ok {
    70  		cmd.UI.DisplayText(err.Error())
    71  		cmd.UI.DisplayOK()
    72  		return nil
    73  	} else if err != nil {
    74  		return err
    75  	}
    76  
    77  	cmd.UI.DisplayOK()
    78  
    79  	if cmd.Quota != "" {
    80  		cmd.UI.DisplayTextWithFlavor("Setting space quota {{.Quota}} to space {{.Space}} as {{.User}}...",
    81  			map[string]interface{}{
    82  				"Quota": cmd.Quota,
    83  				"Space": spaceName,
    84  				"User":  user.Name,
    85  			})
    86  
    87  		warnings, err = cmd.Actor.ApplySpaceQuotaByName(cmd.Quota, space.GUID, orgGUID)
    88  		cmd.UI.DisplayWarnings(warnings)
    89  		if err != nil {
    90  			return err
    91  		}
    92  
    93  		cmd.UI.DisplayOK()
    94  	}
    95  
    96  	cmd.UI.DisplayTextWithFlavor("Assigning role SpaceManager to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...",
    97  		map[string]interface{}{
    98  			"User":         user.Name,
    99  			"Space":        spaceName,
   100  			"Organization": orgName,
   101  		})
   102  	warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceManagerRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient)
   103  	cmd.UI.DisplayWarnings(warnings)
   104  	if err != nil {
   105  		return err
   106  	}
   107  	cmd.UI.DisplayOK()
   108  
   109  	cmd.UI.DisplayTextWithFlavor("Assigning role SpaceDeveloper to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...",
   110  		map[string]interface{}{
   111  			"User":         user.Name,
   112  			"Space":        spaceName,
   113  			"Organization": orgName,
   114  		})
   115  	warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceDeveloperRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient)
   116  	cmd.UI.DisplayWarnings(warnings)
   117  	if err != nil {
   118  		return err
   119  	}
   120  	cmd.UI.DisplayOK()
   121  
   122  	cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Organization}}" -s "{{.Space}}"' to target new space`,
   123  		map[string]interface{}{
   124  			"Organization": orgName,
   125  			"Space":        spaceName,
   126  		})
   127  
   128  	return nil
   129  }