github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/delete_private_domain_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/command" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/v7/shared" 12 "code.cloudfoundry.org/clock" 13 ) 14 15 //go:generate counterfeiter . DeletePrivateDomainActor 16 17 type DeletePrivateDomainActor interface { 18 DeleteDomain(domain v7action.Domain) (v7action.Warnings, error) 19 GetDomainByName(domainName string) (v7action.Domain, v7action.Warnings, error) 20 } 21 22 type DeletePrivateDomainCommand struct { 23 RequiredArgs flag.Domain `positional-args:"yes"` 24 Force bool `short:"f" description:"Force deletion without confirmation"` 25 usage interface{} `usage:"CF_NAME delete-private-domain DOMAIN [-f]"` 26 relatedCommands interface{} `related_commands:"delete-shared-domain, domains, unshare-private-domain"` 27 28 UI command.UI 29 Config command.Config 30 SharedActor command.SharedActor 31 Actor DeletePrivateDomainActor 32 } 33 34 func (cmd *DeletePrivateDomainCommand) Setup(config command.Config, ui command.UI) error { 35 cmd.UI = ui 36 cmd.Config = config 37 cmd.SharedActor = sharedaction.NewActor(config) 38 39 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 40 if err != nil { 41 return err 42 } 43 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 44 45 return nil 46 } 47 48 func (cmd DeletePrivateDomainCommand) Execute(args []string) error { 49 domainName := cmd.RequiredArgs.Domain 50 err := cmd.SharedActor.CheckTarget(true, false) 51 if err != nil { 52 return err 53 } 54 55 currentUser, err := cmd.Config.CurrentUser() 56 if err != nil { 57 return err 58 } 59 60 domain, warnings, err := cmd.Actor.GetDomainByName(domainName) 61 cmd.UI.DisplayWarnings(warnings) 62 63 cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{ 64 "DomainName": domainName, 65 "Username": currentUser.Name, 66 }) 67 68 if err != nil { 69 if _, ok := err.(actionerror.DomainNotFoundError); ok { 70 cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{ 71 "DomainName": domainName, 72 "Username": currentUser.Name, 73 }) 74 cmd.UI.DisplayWarning("Domain '{{.DomainName}}' does not exist.", map[string]interface{}{ 75 "DomainName": cmd.RequiredArgs.Domain, 76 }) 77 cmd.UI.DisplayOK() 78 return nil 79 } 80 return err 81 } 82 83 if domain.Shared() { 84 return fmt.Errorf("Domain '%s' is a shared domain, not a private domain.", domainName) 85 } 86 87 cmd.UI.DisplayText("Deleting the private domain will remove associated routes which will make apps with this domain unreachable.") 88 89 if !cmd.Force { 90 response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the private domain {{.DomainName}}?", map[string]interface{}{ 91 "DomainName": domainName, 92 }) 93 94 if promptErr != nil { 95 return promptErr 96 } 97 98 if !response { 99 cmd.UI.DisplayText("'{{.DomainName}}' has not been deleted.", map[string]interface{}{ 100 "DomainName": domainName, 101 }) 102 return nil 103 } 104 } 105 cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{ 106 "DomainName": domainName, 107 "Username": currentUser.Name, 108 }) 109 110 warnings, err = cmd.Actor.DeleteDomain(domain) 111 cmd.UI.DisplayWarnings(warnings) 112 113 if err != nil { 114 return err 115 } 116 117 cmd.UI.DisplayOK() 118 119 cmd.UI.DisplayText("TIP: Run 'cf domains' to view available domains.") 120 121 return nil 122 }