github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/create_org_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 . CreateOrgActor
    13  
    14  type CreateOrgActor interface {
    15  	CreateOrganization(orgName string, quotaName string) (v2action.Organization, v2action.Warnings, error)
    16  	GrantOrgManagerByUsername(guid string, username string) (v2action.Warnings, error)
    17  }
    18  
    19  type CreateOrgCommand struct {
    20  	RequiredArgs    flag.Organization `positional-args:"yes"`
    21  	Quota           string            `short:"q" description:"Quota to assign to the newly created org (excluding this option results in assignment of default quota)"`
    22  	usage           interface{}       `usage:"CF_NAME create-org ORG"`
    23  	relatedCommands interface{}       `related_commands:"create-space, orgs, quotas, set-org-role"`
    24  
    25  	UI          command.UI
    26  	Config      command.Config
    27  	Actor       CreateOrgActor
    28  	SharedActor command.SharedActor
    29  }
    30  
    31  func (cmd *CreateOrgCommand) Setup(config command.Config, ui command.UI) error {
    32  	cmd.UI = ui
    33  	cmd.Config = config
    34  
    35  	cmd.SharedActor = sharedaction.NewActor(config)
    36  
    37  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui)
    38  	if err != nil {
    39  		return err
    40  	}
    41  	cmd.Actor = v2action.NewActor(ccClient, uaaClient, config)
    42  
    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  	orgName := cmd.RequiredArgs.Organization
    53  
    54  	user, err := cmd.Config.CurrentUser()
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	cmd.UI.DisplayTextWithFlavor("Creating org {{.OrgName}} as {{.Username}}...",
    60  		map[string]interface{}{
    61  			"OrgName":  orgName,
    62  			"Username": user.Name,
    63  		})
    64  
    65  	org, warnings, err := cmd.Actor.CreateOrganization(orgName, cmd.Quota)
    66  	cmd.UI.DisplayWarnings(warnings)
    67  	if err != nil {
    68  		if _, ok := err.(actionerror.OrganizationNameTakenError); ok {
    69  			cmd.UI.DisplayOK()
    70  			cmd.UI.DisplayWarning("Org {{.OrgName}} already exists.", map[string]interface{}{
    71  				"OrgName": cmd.RequiredArgs.Organization,
    72  			})
    73  			return nil
    74  		}
    75  		return err
    76  	}
    77  	cmd.UI.DisplayOK()
    78  
    79  	cmd.UI.DisplayTextWithFlavor("Assigning role {{.Role}} to user {{.Username}} in org {{.OrgName}}...",
    80  		map[string]interface{}{
    81  			"Role":     "OrgManager",
    82  			"OrgName":  orgName,
    83  			"Username": user.Name,
    84  		})
    85  
    86  	warnings, err = cmd.Actor.GrantOrgManagerByUsername(org.GUID, user.Name)
    87  	cmd.UI.DisplayWarnings(warnings)
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	cmd.UI.DisplayOK()
    93  
    94  	cmd.UI.DisplayText(`TIP: Use 'cf target -o "{{.OrgName}}"' to target new org`,
    95  		map[string]interface{}{
    96  			"OrgName": orgName,
    97  		})
    98  	return nil
    99  }