github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/create_org_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/sharedaction"
     5  	"code.cloudfoundry.org/cli/actor/v7action"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     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 . CreateOrgActor
    15  
    16  type CreateOrgActor interface {
    17  	CreateOrganization(orgName string) (v7action.Organization, v7action.Warnings, error)
    18  	CreateOrgRole(roleType constant.RoleType, orgGUID string, userNameOrGUID string, userOrigin string, isClient bool) (v7action.Warnings, error)
    19  }
    20  
    21  type CreateOrgCommand struct {
    22  	RequiredArgs    flag.Organization `positional-args:"yes"`
    23  	usage           interface{}       `usage:"CF_NAME create-org ORG"`
    24  	relatedCommands interface{}       `related_commands:"create-space, orgs, quotas, set-org-role"`
    25  
    26  	UI          command.UI
    27  	Config      command.Config
    28  	Actor       CreateOrgActor
    29  	SharedActor command.SharedActor
    30  }
    31  
    32  func (cmd *CreateOrgCommand) Setup(config command.Config, ui command.UI) error {
    33  	cmd.UI = ui
    34  	cmd.Config = config
    35  	sharedActor := sharedaction.NewActor(config)
    36  	cmd.SharedActor = sharedActor
    37  
    38  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    43  	return nil
    44  }
    45  
    46  func (cmd CreateOrgCommand) Execute(args []string) error {
    47  	err := cmd.SharedActor.CheckTarget(false, false)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	user, err := cmd.Config.CurrentUser()
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	orgName := cmd.RequiredArgs.Organization
    58  
    59  	cmd.UI.DisplayTextWithFlavor("Creating org {{.Organization}} as {{.User}}...",
    60  		map[string]interface{}{
    61  			"User":         user.Name,
    62  			"Organization": orgName,
    63  		})
    64  
    65  	org, warnings, err := cmd.Actor.CreateOrganization(orgName)
    66  
    67  	cmd.UI.DisplayWarnings(warnings)
    68  	if err != nil {
    69  		if _, ok := err.(ccerror.OrganizationNameTakenError); ok {
    70  			cmd.UI.DisplayText(err.Error())
    71  			cmd.UI.DisplayOK()
    72  			return nil
    73  		}
    74  		return err
    75  	}
    76  	cmd.UI.DisplayOK()
    77  
    78  	cmd.UI.DisplayTextWithFlavor("Assigning role OrgManager to user {{.User}} in org {{.Organization}} as {{.User}}...",
    79  		map[string]interface{}{
    80  			"User":         user.Name,
    81  			"Organization": orgName,
    82  		})
    83  	warnings, err = cmd.Actor.CreateOrgRole(constant.OrgManagerRole, org.GUID, user.Name, user.Origin, user.IsClient)
    84  	cmd.UI.DisplayWarnings(warnings)
    85  	if err != nil {
    86  		return err
    87  	}
    88  	cmd.UI.DisplayOK()
    89  
    90  	cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.Organization}}"' to target new org`,
    91  		map[string]interface{}{
    92  			"Organization": orgName,
    93  		})
    94  
    95  	return nil
    96  }