github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/v6/create_space_command.go (about) 1 package v6 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v2action" 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 . CreateSpaceActor 13 14 type CreateSpaceActor interface { 15 CreateSpace(spaceName, orgName, quotaName string) (v2action.Space, v2action.Warnings, error) 16 GrantSpaceManagerByUsername(orgGUID string, spaceGUID string, username string) (v2action.Warnings, error) 17 GrantSpaceDeveloperByUsername(spaceGUID string, username string) (v2action.Warnings, error) 18 } 19 20 type CreateSpaceCommand struct { 21 RequiredArgs flag.Space `positional-args:"yes"` 22 Organization string `short:"o" description:"Organization"` 23 Quota string `short:"q" description:"Quota to assign to the newly created space"` 24 usage interface{} `usage:"CF_NAME create-space SPACE [-o ORG] [-q SPACE_QUOTA]"` 25 relatedCommands interface{} `related_commands:"set-space-isolation-segment, space-quotas, spaces, target"` 26 27 UI command.UI 28 Config command.Config 29 Actor CreateSpaceActor 30 SharedActor command.SharedActor 31 } 32 33 func (cmd *CreateSpaceCommand) Setup(config command.Config, ui command.UI) error { 34 ccClient, uaaClient, err := shared.NewClients(config, ui, true) 35 if err != nil { 36 return err 37 } 38 39 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 40 cmd.SharedActor = sharedaction.NewActor(config) 41 cmd.Config = config 42 cmd.UI = ui 43 return nil 44 } 45 46 func (cmd CreateSpaceCommand) Execute(args []string) error { 47 spaceName := cmd.RequiredArgs.Space 48 userName, err := cmd.SharedActor.RequireCurrentUser() 49 if err != nil { 50 return err 51 } 52 53 var orgName string 54 if cmd.Organization == "" { 55 orgName, err = cmd.SharedActor.RequireTargetedOrg() 56 if err != nil { 57 return err 58 } 59 } else { 60 orgName = cmd.Organization 61 } 62 63 cmd.UI.DisplayTextWithFlavor("Creating space {{.Space}} in org {{.Org}} as {{.User}}...", map[string]interface{}{ 64 "Space": spaceName, 65 "Org": orgName, 66 "User": userName, 67 }) 68 69 space, warnings, err := cmd.Actor.CreateSpace(spaceName, orgName, cmd.Quota) 70 cmd.UI.DisplayWarnings(warnings) 71 72 if err != nil { 73 if _, ok := err.(actionerror.SpaceNameTakenError); ok { 74 cmd.UI.DisplayOK() 75 76 cmd.UI.DisplayWarning("Space {{.SpaceName}} already exists", map[string]interface{}{ 77 "SpaceName": spaceName, 78 }) 79 return nil 80 } else { 81 return err 82 } 83 } 84 85 cmd.UI.DisplayOK() 86 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceManager to user {{.User}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 87 "Space": spaceName, 88 "Org": orgName, 89 "User": userName, 90 }) 91 92 warnings, err = cmd.Actor.GrantSpaceManagerByUsername(space.OrganizationGUID, space.GUID, userName) 93 cmd.UI.DisplayWarnings(warnings) 94 95 if err != nil { 96 return err 97 } 98 99 cmd.UI.DisplayOK() 100 101 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceDeveloper to user {{.User}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 102 "Space": spaceName, 103 "Org": orgName, 104 "User": userName, 105 }) 106 107 warnings, err = cmd.Actor.GrantSpaceDeveloperByUsername(space.GUID, userName) 108 cmd.UI.DisplayWarnings(warnings) 109 110 if err != nil { 111 return err 112 } 113 114 cmd.UI.DisplayOK() 115 cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Org}}" -s "{{.Space}}"' to target new space`, map[string]interface{}{ 116 "Org": orgName, 117 "Space": spaceName, 118 }) 119 120 return nil 121 }