github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/delete_space_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 . DeleteSpaceActor 14 15 type DeleteSpaceActor interface { 16 DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (v7action.Warnings, error) 17 } 18 19 type DeleteSpaceCommand struct { 20 RequiredArgs flag.Space `positional-args:"yes"` 21 Force bool `short:"f" description:"Force deletion without confirmation"` 22 Org string `short:"o" description:"Delete space within specified org"` 23 usage interface{} `usage:"CF_NAME delete-space SPACE [-o ORG] [-f]"` 24 25 Config command.Config 26 UI command.UI 27 SharedActor command.SharedActor 28 Actor DeleteSpaceActor 29 } 30 31 func (cmd *DeleteSpaceCommand) Setup(config command.Config, ui command.UI) error { 32 cmd.Config = config 33 cmd.UI = ui 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 DeleteSpaceCommand) Execute(args []string) error { 47 var ( 48 err error 49 orgName string 50 ) 51 52 if cmd.Org == "" { 53 err = cmd.SharedActor.CheckTarget(true, false) 54 orgName = cmd.Config.TargetedOrganization().Name 55 } else { 56 err = cmd.SharedActor.CheckTarget(false, false) 57 orgName = cmd.Org 58 } 59 60 if err != nil { 61 return err 62 } 63 64 user, err := cmd.Config.CurrentUser() 65 if err != nil { 66 return err 67 } 68 69 if !cmd.Force { 70 cmd.UI.DisplayText("This action impacts all resources scoped to this space, including apps, service instances, and space-scoped service brokers.") 71 promptMessage := "Really delete the space {{.SpaceName}}?" 72 deleteSpace, promptErr := cmd.UI.DisplayBoolPrompt(false, promptMessage, map[string]interface{}{"SpaceName": cmd.RequiredArgs.Space}) 73 74 if promptErr != nil { 75 return promptErr 76 } 77 78 if !deleteSpace { 79 cmd.UI.DisplayText("'{{.TargetSpace}}' has not been deleted.", 80 map[string]interface{}{ 81 "TargetSpace": cmd.RequiredArgs.Space, 82 }) 83 return nil 84 } 85 } 86 87 cmd.UI.DisplayTextWithFlavor("Deleting space {{.TargetSpace}} in org {{.TargetOrg}} as {{.CurrentUser}}...", 88 map[string]interface{}{ 89 "TargetSpace": cmd.RequiredArgs.Space, 90 "TargetOrg": orgName, 91 "CurrentUser": user.Name, 92 }) 93 94 warnings, err := cmd.Actor.DeleteSpaceByNameAndOrganizationName(cmd.RequiredArgs.Space, orgName) 95 cmd.UI.DisplayWarnings(warnings) 96 if err != nil { 97 switch err.(type) { 98 case actionerror.SpaceNotFoundError: 99 cmd.UI.DisplayWarning("Space '{{.SpaceName}}' does not exist.", map[string]interface{}{ 100 "SpaceName": cmd.RequiredArgs.Space, 101 }) 102 default: 103 return err 104 } 105 } 106 107 cmd.UI.DisplayOK() 108 109 if cmd.Config.TargetedOrganization().Name == orgName && 110 cmd.Config.TargetedSpace().Name == cmd.RequiredArgs.Space { 111 cmd.Config.UnsetSpaceInformation() 112 cmd.UI.DisplayText("TIP: No space targeted, use '{{.CfTargetCommand}}' to target a space.", 113 map[string]interface{}{"CfTargetCommand": cmd.Config.BinaryName() + " target -s"}) 114 } 115 116 return nil 117 }