github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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/actor/sharedaction"
     6  	"code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/command"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/command/v7/shared"
    10  	"code.cloudfoundry.org/clock"
    11  )
    12  
    13  //go:generate counterfeiter . DeleteActor
    14  
    15  type DeleteActor interface {
    16  	CloudControllerAPIVersion() string
    17  	DeleteApplicationByNameAndSpace(name, spaceGUID string, deleteRoutes bool) (v7action.Warnings, error)
    18  }
    19  
    20  type DeleteCommand struct {
    21  	RequiredArgs       flag.AppName `positional-args:"yes"`
    22  	Force              bool         `short:"f" description:"Force deletion without confirmation"`
    23  	DeleteMappedRoutes bool         `short:"r" description:"Also delete any mapped routes"`
    24  	usage              interface{}  `usage:"CF_NAME delete APP_NAME [-r] [-f]"`
    25  	relatedCommands    interface{}  `related_commands:"apps, scale, stop"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	SharedActor command.SharedActor
    30  	Actor       DeleteActor
    31  }
    32  
    33  func (cmd *DeleteCommand) Setup(config command.Config, ui command.UI) error {
    34  	cmd.UI = ui
    35  	cmd.Config = config
    36  	cmd.SharedActor = sharedaction.NewActor(config)
    37  
    38  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock())
    43  
    44  	return nil
    45  }
    46  
    47  func (cmd DeleteCommand) Execute(args []string) error {
    48  	err := cmd.SharedActor.CheckTarget(true, true)
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	currentUser, err := cmd.Config.CurrentUser()
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	if !cmd.Force {
    59  		prompt := "Really delete the app {{.AppName}}?"
    60  		if cmd.DeleteMappedRoutes {
    61  			prompt = "Really delete the app {{.AppName}} and associated routes?"
    62  			cmd.UI.DisplayText("Deleting the app and associated routes will make apps with this route, in any org, unreachable.")
    63  		}
    64  
    65  		response, promptErr := cmd.UI.DisplayBoolPrompt(false, prompt, map[string]interface{}{
    66  			"AppName": cmd.RequiredArgs.AppName,
    67  		})
    68  
    69  		if promptErr != nil {
    70  			return promptErr
    71  		}
    72  
    73  		if !response {
    74  			cmd.UI.DisplayText("App '{{.AppName}}' has not been deleted.", map[string]interface{}{
    75  				"AppName": cmd.RequiredArgs.AppName,
    76  			})
    77  			return nil
    78  		}
    79  	}
    80  
    81  	cmd.UI.DisplayTextWithFlavor("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    82  		"AppName":   cmd.RequiredArgs.AppName,
    83  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    84  		"SpaceName": cmd.Config.TargetedSpace().Name,
    85  		"Username":  currentUser.Name,
    86  	})
    87  
    88  	warnings, err := cmd.Actor.DeleteApplicationByNameAndSpace(
    89  		cmd.RequiredArgs.AppName,
    90  		cmd.Config.TargetedSpace().GUID,
    91  		cmd.DeleteMappedRoutes,
    92  	)
    93  	cmd.UI.DisplayWarnings(warnings)
    94  	if err != nil {
    95  		switch err.(type) {
    96  		case actionerror.ApplicationNotFoundError:
    97  			cmd.UI.DisplayWarning("App '{{.AppName}}' does not exist.", map[string]interface{}{
    98  				"AppName": cmd.RequiredArgs.AppName,
    99  			})
   100  		case actionerror.RouteBoundToMultipleAppsError:
   101  			cmd.UI.DeferText(
   102  				"\nTIP: Run 'cf delete {{.AppName}}' to delete the app and 'cf delete-route' to delete the route.",
   103  				map[string]interface{}{
   104  					"AppName": cmd.RequiredArgs.AppName,
   105  				},
   106  			)
   107  			return err
   108  		default:
   109  			return err
   110  		}
   111  	}
   112  
   113  	cmd.UI.DisplayOK()
   114  
   115  	return nil
   116  }