github.com/sleungcy-sap/cli@v7.1.0+incompatible/command/v7/create_space_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v7action" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 7 "code.cloudfoundry.org/cli/command/flag" 8 "code.cloudfoundry.org/cli/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 ( 35 orgName, orgGUID string 36 ) 37 38 if cmd.Organization == "" { 39 _, err = cmd.SharedActor.RequireTargetedOrg() 40 if err != nil { 41 return err 42 } 43 orgName = cmd.Config.TargetedOrganization().Name 44 orgGUID = cmd.Config.TargetedOrganization().GUID 45 } else { 46 orgName = cmd.Organization 47 org, warnings, err := cmd.Actor.GetOrganizationByName(orgName) 48 cmd.UI.DisplayWarnings(warnings) 49 if err != nil { 50 return err 51 } 52 orgGUID = org.GUID 53 } 54 55 user, err := cmd.Config.CurrentUser() 56 if err != nil { 57 return err 58 } 59 60 spaceName := cmd.RequiredArgs.Space 61 62 cmd.UI.DisplayTextWithFlavor("Creating space {{.Space}} in org {{.Organization}} as {{.User}}...", 63 map[string]interface{}{ 64 "User": user.Name, 65 "Space": spaceName, 66 "Organization": orgName, 67 }) 68 space, warnings, err := cmd.Actor.CreateSpace(spaceName, orgGUID) 69 cmd.UI.DisplayWarnings(warnings) 70 71 if _, ok := err.(actionerror.SpaceAlreadyExistsError); ok { 72 cmd.UI.DisplayText(err.Error()) 73 cmd.UI.DisplayOK() 74 return nil 75 } else if err != nil { 76 return err 77 } 78 79 cmd.UI.DisplayOK() 80 81 if cmd.Quota != "" { 82 cmd.UI.DisplayTextWithFlavor("Setting space quota {{.Quota}} to space {{.Space}} as {{.User}}...", 83 map[string]interface{}{ 84 "Quota": cmd.Quota, 85 "Space": spaceName, 86 "User": user.Name, 87 }) 88 89 warnings, err = cmd.Actor.ApplySpaceQuotaByName(cmd.Quota, space.GUID, orgGUID) 90 cmd.UI.DisplayWarnings(warnings) 91 if err != nil { 92 return err 93 } 94 95 cmd.UI.DisplayOK() 96 } 97 98 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceManager to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...", 99 map[string]interface{}{ 100 "User": user.Name, 101 "Space": spaceName, 102 "Organization": orgName, 103 }) 104 warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceManagerRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient) 105 cmd.UI.DisplayWarnings(warnings) 106 if err != nil { 107 return err 108 } 109 cmd.UI.DisplayOK() 110 111 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceDeveloper to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...", 112 map[string]interface{}{ 113 "User": user.Name, 114 "Space": spaceName, 115 "Organization": orgName, 116 }) 117 warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceDeveloperRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient) 118 cmd.UI.DisplayWarnings(warnings) 119 if err != nil { 120 return err 121 } 122 cmd.UI.DisplayOK() 123 124 cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Organization}}" -s "{{.Space}}"' to target new space`, 125 map[string]interface{}{ 126 "Organization": orgName, 127 "Space": spaceName, 128 }) 129 130 return nil 131 }