github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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 action impacts all orgs using this domain.\nDeleting it will remove associated routes and could make any app with this domain, in any org, 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  }