github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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.GetNewClientsAndConnectToCF(config, ui) 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 } 81 return err 82 } 83 84 cmd.UI.DisplayOK() 85 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceManager to user {{.User}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 86 "Space": spaceName, 87 "Org": orgName, 88 "User": userName, 89 }) 90 91 warnings, err = cmd.Actor.GrantSpaceManagerByUsername(space.OrganizationGUID, space.GUID, userName) 92 cmd.UI.DisplayWarnings(warnings) 93 94 if err != nil { 95 return err 96 } 97 98 cmd.UI.DisplayOK() 99 100 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceDeveloper to user {{.User}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 101 "Space": spaceName, 102 "Org": orgName, 103 "User": userName, 104 }) 105 106 warnings, err = cmd.Actor.GrantSpaceDeveloperByUsername(space.GUID, userName) 107 cmd.UI.DisplayWarnings(warnings) 108 109 if err != nil { 110 return err 111 } 112 113 cmd.UI.DisplayOK() 114 cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Org}}" -s "{{.Space}}"' to target new space`, map[string]interface{}{ 115 "Org": orgName, 116 "Space": spaceName, 117 }) 118 119 return nil 120 }