code.cloudfoundry.org/cli@v7.1.0+incompatible/command/v7/delete_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/command/flag"
     6  )
     7  
     8  type DeleteCommand struct {
     9  	BaseCommand
    10  
    11  	RequiredArgs       flag.AppName `positional-args:"yes"`
    12  	Force              bool         `short:"f" description:"Force deletion without confirmation"`
    13  	DeleteMappedRoutes bool         `short:"r" description:"Also delete any mapped routes"`
    14  	usage              interface{}  `usage:"CF_NAME delete APP_NAME [-r] [-f]"`
    15  	relatedCommands    interface{}  `related_commands:"apps, scale, stop"`
    16  }
    17  
    18  func (cmd DeleteCommand) Execute(args []string) error {
    19  	err := cmd.SharedActor.CheckTarget(true, true)
    20  	if err != nil {
    21  		return err
    22  	}
    23  
    24  	currentUser, err := cmd.Config.CurrentUser()
    25  	if err != nil {
    26  		return err
    27  	}
    28  
    29  	if !cmd.Force {
    30  		prompt := "Really delete the app {{.AppName}}?"
    31  		if cmd.DeleteMappedRoutes {
    32  			prompt = "Really delete the app {{.AppName}} and associated routes?"
    33  			cmd.UI.DisplayText("Deleting the app and associated routes will make apps with this route, in any org, unreachable.")
    34  		}
    35  
    36  		response, promptErr := cmd.UI.DisplayBoolPrompt(false, prompt, map[string]interface{}{
    37  			"AppName": cmd.RequiredArgs.AppName,
    38  		})
    39  
    40  		if promptErr != nil {
    41  			return promptErr
    42  		}
    43  
    44  		if !response {
    45  			cmd.UI.DisplayText("App '{{.AppName}}' has not been deleted.", map[string]interface{}{
    46  				"AppName": cmd.RequiredArgs.AppName,
    47  			})
    48  			return nil
    49  		}
    50  	}
    51  
    52  	cmd.UI.DisplayTextWithFlavor("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    53  		"AppName":   cmd.RequiredArgs.AppName,
    54  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    55  		"SpaceName": cmd.Config.TargetedSpace().Name,
    56  		"Username":  currentUser.Name,
    57  	})
    58  
    59  	warnings, err := cmd.Actor.DeleteApplicationByNameAndSpace(
    60  		cmd.RequiredArgs.AppName,
    61  		cmd.Config.TargetedSpace().GUID,
    62  		cmd.DeleteMappedRoutes,
    63  	)
    64  	cmd.UI.DisplayWarnings(warnings)
    65  	if err != nil {
    66  		switch err.(type) {
    67  		case actionerror.ApplicationNotFoundError:
    68  			cmd.UI.DisplayWarning("App '{{.AppName}}' does not exist.", map[string]interface{}{
    69  				"AppName": cmd.RequiredArgs.AppName,
    70  			})
    71  		case actionerror.RouteBoundToMultipleAppsError:
    72  			cmd.UI.DeferText(
    73  				"\nTIP: Run 'cf delete {{.AppName}}' to delete the app and 'cf delete-route' to delete the route.",
    74  				map[string]interface{}{
    75  					"AppName": cmd.RequiredArgs.AppName,
    76  				},
    77  			)
    78  			return err
    79  		default:
    80  			return err
    81  		}
    82  	}
    83  
    84  	cmd.UI.DisplayOK()
    85  
    86  	return nil
    87  }