github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/v7/shared" 11 "code.cloudfoundry.org/clock" 12 ) 13 14 //go:generate counterfeiter . CreateSpaceActor 15 16 type CreateSpaceActor interface { 17 CreateSpace(spaceName, orgGUID string) (v7action.Space, v7action.Warnings, error) 18 CreateSpaceRole(roleType constant.RoleType, orgGUID string, spaceGUID string, userNameOrGUID string, userOrigin string, isClient bool) (v7action.Warnings, error) 19 GetOrganizationByName(orgName string) (v7action.Organization, v7action.Warnings, error) 20 } 21 22 type CreateSpaceCommand struct { 23 RequiredArgs flag.Space `positional-args:"yes"` 24 Organization string `short:"o" description:"Organization"` 25 usage interface{} `usage:"CF_NAME create-space SPACE [-o ORG]"` 26 relatedCommands interface{} `related_commands:"set-space-isolation-segment, space-quotas, spaces, target"` 27 28 UI command.UI 29 Config command.Config 30 Actor CreateSpaceActor 31 SharedActor command.SharedActor 32 } 33 34 func (cmd *CreateSpaceCommand) Setup(config command.Config, ui command.UI) error { 35 cmd.UI = ui 36 cmd.Config = config 37 sharedActor := sharedaction.NewActor(config) 38 cmd.SharedActor = sharedActor 39 40 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 41 if err != nil { 42 return err 43 } 44 cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock()) 45 return nil 46 } 47 48 func (cmd CreateSpaceCommand) Execute(args []string) error { 49 err := cmd.SharedActor.CheckTarget(false, false) 50 if err != nil { 51 return err 52 } 53 54 var ( 55 orgName, orgGUID string 56 ) 57 58 if cmd.Organization == "" { 59 _, err = cmd.SharedActor.RequireTargetedOrg() 60 if err != nil { 61 return err 62 } 63 orgName = cmd.Config.TargetedOrganization().Name 64 orgGUID = cmd.Config.TargetedOrganization().GUID 65 } else { 66 orgName = cmd.Organization 67 org, warnings, err := cmd.Actor.GetOrganizationByName(orgName) 68 cmd.UI.DisplayWarnings(warnings) 69 if err != nil { 70 return err 71 } 72 orgGUID = org.GUID 73 } 74 75 user, err := cmd.Config.CurrentUser() 76 if err != nil { 77 return err 78 } 79 80 spaceName := cmd.RequiredArgs.Space 81 82 cmd.UI.DisplayTextWithFlavor("Creating space {{.Space}} in org {{.Organization}} as {{.User}}...", 83 map[string]interface{}{ 84 "User": user.Name, 85 "Space": spaceName, 86 "Organization": orgName, 87 }) 88 space, warnings, err := cmd.Actor.CreateSpace(spaceName, orgGUID) 89 cmd.UI.DisplayWarnings(warnings) 90 if err != nil { 91 if _, ok := err.(actionerror.SpaceAlreadyExistsError); ok { 92 cmd.UI.DisplayText(err.Error()) 93 cmd.UI.DisplayOK() 94 return nil 95 } 96 return err 97 } 98 cmd.UI.DisplayOK() 99 100 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceManager to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...", 101 map[string]interface{}{ 102 "User": user.Name, 103 "Space": spaceName, 104 "Organization": orgName, 105 }) 106 warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceManagerRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient) 107 cmd.UI.DisplayWarnings(warnings) 108 if err != nil { 109 return err 110 } 111 cmd.UI.DisplayOK() 112 113 cmd.UI.DisplayTextWithFlavor("Assigning role SpaceDeveloper to user {{.User}} in org {{.Organization}} / space {{.Space}} as {{.User}}...", 114 map[string]interface{}{ 115 "User": user.Name, 116 "Space": spaceName, 117 "Organization": orgName, 118 }) 119 warnings, err = cmd.Actor.CreateSpaceRole(constant.SpaceDeveloperRole, orgGUID, space.GUID, user.Name, user.Origin, user.IsClient) 120 cmd.UI.DisplayWarnings(warnings) 121 if err != nil { 122 return err 123 } 124 cmd.UI.DisplayOK() 125 126 cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Organization}}" -s "{{.Space}}"' to target new space`, 127 map[string]interface{}{ 128 "Organization": orgName, 129 "Space": spaceName, 130 }) 131 132 return nil 133 }