github.com/elopio/cli@v6.21.2-0.20160902224010-ea909d1fdb2f+incompatible/cf/commands/domain/delete_shared_domain.go (about) 1 package domain 2 3 import ( 4 "fmt" 5 6 "code.cloudfoundry.org/cli/cf/api" 7 "code.cloudfoundry.org/cli/cf/commandregistry" 8 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 9 "code.cloudfoundry.org/cli/cf/errors" 10 "code.cloudfoundry.org/cli/cf/flags" 11 . "code.cloudfoundry.org/cli/cf/i18n" 12 "code.cloudfoundry.org/cli/cf/requirements" 13 "code.cloudfoundry.org/cli/cf/terminal" 14 ) 15 16 type DeleteSharedDomain struct { 17 ui terminal.UI 18 config coreconfig.Reader 19 orgReq requirements.TargetedOrgRequirement 20 domainRepo api.DomainRepository 21 } 22 23 func init() { 24 commandregistry.Register(&DeleteSharedDomain{}) 25 } 26 27 func (cmd *DeleteSharedDomain) MetaData() commandregistry.CommandMetadata { 28 fs := make(map[string]flags.FlagSet) 29 fs["f"] = &flags.BoolFlag{ShortName: "f", Usage: T("Force deletion without confirmation")} 30 31 return commandregistry.CommandMetadata{ 32 Name: "delete-shared-domain", 33 Description: T("Delete a shared domain"), 34 Usage: []string{ 35 T("CF_NAME delete-shared-domain DOMAIN [-f]"), 36 }, 37 Flags: fs, 38 } 39 } 40 41 func (cmd *DeleteSharedDomain) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 42 if len(fc.Args()) != 1 { 43 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + commandregistry.Commands.CommandUsage("delete-shared-domain")) 44 return nil, fmt.Errorf("Incorrect usage: %d arguments of %d required", len(fc.Args()), 1) 45 } 46 47 loginReq := requirementsFactory.NewLoginRequirement() 48 cmd.orgReq = requirementsFactory.NewTargetedOrgRequirement() 49 50 reqs := []requirements.Requirement{ 51 loginReq, 52 cmd.orgReq, 53 } 54 55 return reqs, nil 56 } 57 58 func (cmd *DeleteSharedDomain) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 59 cmd.ui = deps.UI 60 cmd.config = deps.Config 61 cmd.domainRepo = deps.RepoLocator.GetDomainRepository() 62 return cmd 63 } 64 65 func (cmd *DeleteSharedDomain) Execute(c flags.FlagContext) error { 66 domainName := c.Args()[0] 67 force := c.Bool("f") 68 69 cmd.ui.Say(T("Deleting domain {{.DomainName}} as {{.Username}}...", 70 map[string]interface{}{ 71 "DomainName": terminal.EntityNameColor(domainName), 72 "Username": terminal.EntityNameColor(cmd.config.Username())})) 73 74 domain, err := cmd.domainRepo.FindByNameInOrg(domainName, cmd.orgReq.GetOrganizationFields().GUID) 75 switch err.(type) { 76 case nil: 77 if !domain.Shared { 78 return errors.New(T("domain {{.DomainName}} is an owned domain, not a shared domain.", 79 map[string]interface{}{"DomainName": domainName})) 80 } 81 case *errors.ModelNotFoundError: 82 cmd.ui.Ok() 83 cmd.ui.Warn(err.Error()) 84 return nil 85 default: 86 return errors.New(T("Error finding domain {{.DomainName}}\n{{.Err}}", 87 map[string]interface{}{ 88 "DomainName": domainName, 89 "Err": err.Error()})) 90 } 91 92 if !force { 93 answer := cmd.ui.Confirm(T("This domain is shared across all orgs.\nDeleting it will remove all associated routes, and will make any app with this domain unreachable.\nAre you sure you want to delete the domain {{.DomainName}}? ", map[string]interface{}{"DomainName": domainName})) 94 95 if !answer { 96 return nil 97 } 98 } 99 100 err = cmd.domainRepo.DeleteSharedDomain(domain.GUID) 101 if err != nil { 102 return errors.New(T("Error deleting domain {{.DomainName}}\n{{.Err}}", 103 map[string]interface{}{"DomainName": domainName, "Err": err.Error()})) 104 } 105 106 cmd.ui.Ok() 107 return nil 108 }