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

     1  package v6
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/sharedaction"
     5  	"code.cloudfoundry.org/cli/actor/v2action"
     6  	"code.cloudfoundry.org/cli/command"
     7  	"code.cloudfoundry.org/cli/command/flag"
     8  	"code.cloudfoundry.org/cli/command/v6/shared"
     9  )
    10  
    11  //go:generate counterfeiter . DeleteSpaceActor
    12  
    13  type DeleteSpaceActor interface {
    14  	DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (v2action.Warnings, error)
    15  }
    16  
    17  type DeleteSpaceCommand struct {
    18  	RequiredArgs flag.Space  `positional-args:"yes"`
    19  	Force        bool        `short:"f" description:"Force deletion without confirmation"`
    20  	Org          string      `short:"o" description:"Delete space within specified org"`
    21  	usage        interface{} `usage:"CF_NAME delete-space SPACE [-o ORG] [-f]"`
    22  
    23  	Config      command.Config
    24  	UI          command.UI
    25  	SharedActor command.SharedActor
    26  	Actor       DeleteSpaceActor
    27  }
    28  
    29  func (cmd *DeleteSpaceCommand) 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.GetNewClientsAndConnectToCF(config, ui)
    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 DeleteSpaceCommand) Execute(args []string) error {
    44  	var (
    45  		err     error
    46  		orgName string
    47  	)
    48  
    49  	if cmd.Org == "" {
    50  		err = cmd.SharedActor.CheckTarget(true, false)
    51  		orgName = cmd.Config.TargetedOrganization().Name
    52  	} else {
    53  		err = cmd.SharedActor.CheckTarget(false, false)
    54  		orgName = cmd.Org
    55  	}
    56  
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	user, err := cmd.Config.CurrentUser()
    62  	if err != nil {
    63  		return err
    64  	}
    65  
    66  	if !cmd.Force {
    67  		promptMessage := "Really delete the space {{.SpaceName}}?"
    68  		deleteSpace, promptErr := cmd.UI.DisplayBoolPrompt(false, promptMessage, map[string]interface{}{"SpaceName": cmd.RequiredArgs.Space})
    69  
    70  		if promptErr != nil {
    71  			return promptErr
    72  		}
    73  
    74  		if !deleteSpace {
    75  			cmd.UI.DisplayText("Delete cancelled")
    76  			return nil
    77  		}
    78  	}
    79  
    80  	cmd.UI.DisplayTextWithFlavor("Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...",
    81  		map[string]interface{}{
    82  			"TargetSpace": cmd.RequiredArgs.Space,
    83  			"TargetOrg":   orgName,
    84  			"CurrentUser": user.Name,
    85  		})
    86  
    87  	warnings, err := cmd.Actor.DeleteSpaceByNameAndOrganizationName(cmd.RequiredArgs.Space, orgName)
    88  	cmd.UI.DisplayWarnings(warnings)
    89  	if err != nil {
    90  		return err
    91  	}
    92  
    93  	cmd.UI.DisplayOK()
    94  
    95  	if cmd.Config.TargetedOrganization().Name == orgName &&
    96  		cmd.Config.TargetedSpace().Name == cmd.RequiredArgs.Space {
    97  		cmd.Config.UnsetSpaceInformation()
    98  		cmd.UI.DisplayText("TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space.",
    99  			map[string]interface{}{"CfTargetCommand": cmd.Config.BinaryName() + " target -s"})
   100  	}
   101  
   102  	return nil
   103  }