github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/delete_org_command.go (about)

     1  package v2
     2  
     3  import (
     4  	"github.com/liamawhite/cli-with-i18n/actor/sharedaction"
     5  	"github.com/liamawhite/cli-with-i18n/actor/v2action"
     6  	"github.com/liamawhite/cli-with-i18n/command"
     7  	"github.com/liamawhite/cli-with-i18n/command/flag"
     8  	"github.com/liamawhite/cli-with-i18n/command/v2/shared"
     9  )
    10  
    11  //go:generate counterfeiter . DeleteOrganizationActor
    12  
    13  type DeleteOrganizationActor interface {
    14  	DeleteOrganization(orgName string) (v2action.Warnings, error)
    15  	ClearOrganizationAndSpace(config v2action.Config)
    16  }
    17  
    18  type DeleteOrgCommand struct {
    19  	RequiredArgs flag.Organization `positional-args:"yes"`
    20  	Force        bool              `short:"f" description:"Force deletion without confirmation"`
    21  	usage        interface{}       `usage:"CF_NAME delete-org ORG [-f]"`
    22  
    23  	Config      command.Config
    24  	UI          command.UI
    25  	SharedActor command.SharedActor
    26  	Actor       DeleteOrganizationActor
    27  }
    28  
    29  func (cmd *DeleteOrgCommand) Setup(config command.Config, ui command.UI) error {
    30  	cmd.Config = config
    31  	cmd.UI = ui
    32  	cmd.SharedActor = sharedaction.NewActor(config)
    33  
    34  	ccClient, uaaClient, err := shared.NewClients(config, ui, true)
    35  	if err != nil {
    36  		return err
    37  	}
    38  	cmd.Actor = v2action.NewActor(ccClient, uaaClient, config)
    39  
    40  	return nil
    41  }
    42  
    43  func (cmd *DeleteOrgCommand) Execute(args []string) error {
    44  	err := cmd.SharedActor.CheckTarget(cmd.Config, false, false)
    45  	if err != nil {
    46  		return shared.HandleError(err)
    47  	}
    48  
    49  	user, err := cmd.Config.CurrentUser()
    50  	if err != nil {
    51  		return err
    52  	}
    53  
    54  	if !cmd.Force {
    55  		promptMessage := "Really delete the org {{.OrgName}}, including its spaces, apps, service instances, routes, private domains and space-scoped service brokers?"
    56  		deleteOrg, promptErr := cmd.UI.DisplayBoolPrompt(false, promptMessage, map[string]interface{}{"OrgName": cmd.RequiredArgs.Organization})
    57  
    58  		if promptErr != nil {
    59  			return promptErr
    60  		}
    61  
    62  		if !deleteOrg {
    63  			cmd.UI.DisplayText("Delete cancelled")
    64  			return nil
    65  		}
    66  	}
    67  
    68  	cmd.UI.DisplayTextWithFlavor("Deleting org {{.OrgName}} as {{.Username}}...", map[string]interface{}{
    69  		"OrgName":  cmd.RequiredArgs.Organization,
    70  		"Username": user.Name,
    71  	})
    72  
    73  	warnings, err := cmd.Actor.DeleteOrganization(cmd.RequiredArgs.Organization)
    74  	cmd.UI.DisplayWarnings(warnings)
    75  	if err != nil {
    76  		switch err.(type) {
    77  		case v2action.OrganizationNotFoundError:
    78  			cmd.UI.DisplayText("Org {{.OrgName}} does not exist.", map[string]interface{}{
    79  				"OrgName": cmd.RequiredArgs.Organization,
    80  			})
    81  		default:
    82  			return shared.HandleError(err)
    83  		}
    84  	}
    85  
    86  	if cmd.Config.TargetedOrganization().Name == cmd.RequiredArgs.Organization {
    87  		cmd.Actor.ClearOrganizationAndSpace(cmd.Config)
    88  	}
    89  
    90  	cmd.UI.DisplayOK()
    91  
    92  	return nil
    93  }