github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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 }