github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/v3_delete_command.go (about) 1 package v3 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 11 "code.cloudfoundry.org/cli/command" 12 "code.cloudfoundry.org/cli/command/flag" 13 "code.cloudfoundry.org/cli/command/translatableerror" 14 "code.cloudfoundry.org/cli/command/v3/shared" 15 ) 16 17 //go:generate counterfeiter . V3DeleteActor 18 19 type V3DeleteActor interface { 20 CloudControllerAPIVersion() string 21 DeleteApplicationByNameAndSpace(name string, spaceGUID string) (v3action.Warnings, error) 22 } 23 24 type V3DeleteCommand struct { 25 RequiredArgs flag.AppName `positional-args:"yes"` 26 Force bool `short:"f" description:"Force deletion without confirmation"` 27 usage interface{} `usage:"CF_NAME v3-delete APP_NAME [-f]"` 28 29 UI command.UI 30 Config command.Config 31 SharedActor command.SharedActor 32 Actor V3DeleteActor 33 } 34 35 func (cmd *V3DeleteCommand) Setup(config command.Config, ui command.UI) error { 36 cmd.UI = ui 37 cmd.Config = config 38 cmd.SharedActor = sharedaction.NewActor(config) 39 40 ccClient, _, err := shared.NewClients(config, ui, true) 41 if err != nil { 42 if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound { 43 return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionV3} 44 } 45 46 return err 47 } 48 cmd.Actor = v3action.NewActor(ccClient, config, nil, nil) 49 50 return nil 51 } 52 53 func (cmd V3DeleteCommand) Execute(args []string) error { 54 cmd.UI.DisplayWarning(command.ExperimentalWarning) 55 56 err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionV3) 57 if err != nil { 58 return err 59 } 60 61 err = cmd.SharedActor.CheckTarget(true, true) 62 if err != nil { 63 return err 64 } 65 66 currentUser, err := cmd.Config.CurrentUser() 67 if err != nil { 68 return err 69 } 70 71 if !cmd.Force { 72 response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the app {{.AppName}}?", map[string]interface{}{ 73 "AppName": cmd.RequiredArgs.AppName, 74 }) 75 76 if promptErr != nil { 77 return promptErr 78 } 79 80 if !response { 81 cmd.UI.DisplayText("Delete cancelled") 82 return nil 83 } 84 } 85 86 cmd.UI.DisplayTextWithFlavor("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 87 "AppName": cmd.RequiredArgs.AppName, 88 "OrgName": cmd.Config.TargetedOrganization().Name, 89 "SpaceName": cmd.Config.TargetedSpace().Name, 90 "Username": currentUser.Name, 91 }) 92 93 warnings, err := cmd.Actor.DeleteApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID) 94 cmd.UI.DisplayWarnings(warnings) 95 if err != nil { 96 switch err.(type) { 97 case actionerror.ApplicationNotFoundError: 98 cmd.UI.DisplayTextWithFlavor("App {{.AppName}} does not exist", map[string]interface{}{ 99 "AppName": cmd.RequiredArgs.AppName, 100 }) 101 default: 102 return err 103 } 104 } 105 106 cmd.UI.DisplayOK() 107 108 return nil 109 }