github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/delete_buildpack_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 . DeleteBuildpackActor
    14  
    15  type DeleteBuildpackActor interface {
    16  	DeleteBuildpackByNameAndStack(buildpackName string, buildpackStack string) (v7action.Warnings, error)
    17  }
    18  
    19  type DeleteBuildpackCommand struct {
    20  	RequiredArgs    flag.BuildpackName `positional-args:"yes"`
    21  	usage           interface{}        `usage:"CF_NAME delete-buildpack BUILDPACK [-f] [-s STACK]"`
    22  	relatedCommands interface{}        `related_commands:"buildpacks"`
    23  	Force           bool               `long:"force" short:"f" description:"Force deletion without confirmation"`
    24  	Stack           string             `long:"stack" short:"s" description:"Specify stack to disambiguate buildpacks with the same name. Required when buildpack name is ambiguous"`
    25  	Actor           DeleteBuildpackActor
    26  	UI              command.UI
    27  	Config          command.Config
    28  	SharedActor     command.SharedActor
    29  }
    30  
    31  func (cmd *DeleteBuildpackCommand) Setup(config command.Config, ui command.UI) error {
    32  	cmd.UI = ui
    33  	cmd.Config = config
    34  	sharedActor := sharedaction.NewActor(config)
    35  	cmd.SharedActor = sharedActor
    36  
    37  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    38  	if err != nil {
    39  		return err
    40  	}
    41  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    42  
    43  	return nil
    44  }
    45  
    46  func (cmd DeleteBuildpackCommand) Execute(args []string) error {
    47  	err := cmd.SharedActor.CheckTarget(false, false)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	if !cmd.Force {
    53  		response, uiErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the {{.ModelType}} {{.ModelName}}?", map[string]interface{}{
    54  			"ModelType": "buildpack",
    55  			"ModelName": cmd.RequiredArgs.Buildpack,
    56  		})
    57  		if uiErr != nil {
    58  			return uiErr
    59  		}
    60  
    61  		if !response {
    62  			cmd.UI.DisplayText("Delete cancelled")
    63  			return nil
    64  		}
    65  	}
    66  
    67  	if cmd.Stack == "" {
    68  		cmd.UI.DisplayTextWithFlavor("Deleting buildpack {{.BuildpackName}}...", map[string]interface{}{
    69  			"BuildpackName": cmd.RequiredArgs.Buildpack,
    70  		})
    71  
    72  	} else {
    73  		cmd.UI.DisplayTextWithFlavor("Deleting buildpack {{.BuildpackName}} with stack {{.Stack}}...", map[string]interface{}{
    74  			"BuildpackName": cmd.RequiredArgs.Buildpack,
    75  			"Stack":         cmd.Stack,
    76  		})
    77  	}
    78  	warnings, err := cmd.Actor.DeleteBuildpackByNameAndStack(cmd.RequiredArgs.Buildpack, cmd.Stack)
    79  	cmd.UI.DisplayWarnings(warnings)
    80  
    81  	if err != nil {
    82  		switch err.(type) {
    83  		case actionerror.BuildpackNotFoundError:
    84  			if cmd.Stack == "" {
    85  				cmd.UI.DisplayWarning("Buildpack '{{.BuildpackName}}' does not exist.", map[string]interface{}{
    86  					"BuildpackName": cmd.RequiredArgs.Buildpack,
    87  				})
    88  			} else {
    89  				cmd.UI.DisplayWarning("Buildpack '{{.BuildpackName}}' with stack '{{.Stack}}' not found.", map[string]interface{}{
    90  					"BuildpackName": cmd.RequiredArgs.Buildpack,
    91  					"Stack":         cmd.Stack,
    92  				})
    93  			}
    94  		default:
    95  			return err
    96  		}
    97  	}
    98  
    99  	cmd.UI.DisplayOK()
   100  
   101  	return nil
   102  }