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  }