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 }