github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/delete_shared_domain_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/translatableerror" 10 "code.cloudfoundry.org/cli/command/v7/shared" 11 "code.cloudfoundry.org/clock" 12 ) 13 14 //go:generate counterfeiter . DeleteSharedDomainActor 15 16 type DeleteSharedDomainActor interface { 17 DeleteDomain(domain v7action.Domain) (v7action.Warnings, error) 18 GetDomainByName(domainName string) (v7action.Domain, v7action.Warnings, error) 19 } 20 21 type DeleteSharedDomainCommand struct { 22 RequiredArgs flag.Domain `positional-args:"yes"` 23 Force bool `short:"f" description:"Force deletion without confirmation"` 24 usage interface{} `usage:"CF_NAME delete-shared-domain DOMAIN [-f]"` 25 relatedCommands interface{} `related_commands:"delete-private-domain, domains"` 26 27 UI command.UI 28 Config command.Config 29 SharedActor command.SharedActor 30 Actor DeleteSharedDomainActor 31 } 32 33 func (cmd *DeleteSharedDomainCommand) Setup(config command.Config, ui command.UI) error { 34 cmd.UI = ui 35 cmd.Config = config 36 cmd.SharedActor = sharedaction.NewActor(config) 37 38 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 39 if err != nil { 40 return err 41 } 42 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 43 44 return nil 45 } 46 47 func (cmd DeleteSharedDomainCommand) Execute(args []string) error { 48 err := cmd.SharedActor.CheckTarget(true, false) 49 if err != nil { 50 return err 51 } 52 domainName := cmd.RequiredArgs.Domain 53 54 currentUser, err := cmd.Config.CurrentUser() 55 if err != nil { 56 return err 57 } 58 cmd.UI.DisplayText("This action impacts all orgs using this domain.") 59 cmd.UI.DisplayText("Deleting the domain will remove associated routes which will make apps with this domain, in any org, unreachable.") 60 61 if !cmd.Force { 62 response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the shared domain {{.DomainName}}?", map[string]interface{}{ 63 "DomainName": domainName, 64 }) 65 66 if promptErr != nil { 67 return promptErr 68 } 69 70 if !response { 71 cmd.UI.DisplayText("'{{.DomainName}}' has not been deleted.", map[string]interface{}{ 72 "DomainName": domainName, 73 }) 74 return nil 75 } 76 } 77 cmd.UI.DisplayTextWithFlavor("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{ 78 "DomainName": domainName, 79 "Username": currentUser.Name, 80 }) 81 82 domain, warnings, err := cmd.Actor.GetDomainByName(domainName) 83 cmd.UI.DisplayWarnings(warnings) 84 85 if err != nil { 86 if _, ok := err.(actionerror.DomainNotFoundError); ok { 87 cmd.UI.DisplayWarning("Domain '{{.DomainName}}' does not exist.", map[string]interface{}{ 88 "DomainName": cmd.RequiredArgs.Domain, 89 }) 90 cmd.UI.DisplayOK() 91 return nil 92 } 93 return err 94 } 95 96 // Private domains always have an organization guid; shared domains, never. 97 if domain.OrganizationGUID != "" { 98 return translatableerror.NotSharedDomainError{DomainName: cmd.RequiredArgs.Domain} 99 } 100 101 warnings, err = cmd.Actor.DeleteDomain(domain) 102 cmd.UI.DisplayWarnings(warnings) 103 if err != nil { 104 return err 105 } 106 107 cmd.UI.DisplayOK() 108 109 return nil 110 }