github.com/sleungcy/cli@v7.1.0+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/command/flag"
     6  	"code.cloudfoundry.org/cli/command/translatableerror"
     7  )
     8  
     9  type DeleteSharedDomainCommand struct {
    10  	BaseCommand
    11  
    12  	RequiredArgs    flag.Domain `positional-args:"yes"`
    13  	Force           bool        `short:"f" description:"Force deletion without confirmation"`
    14  	usage           interface{} `usage:"CF_NAME delete-shared-domain DOMAIN [-f]"`
    15  	relatedCommands interface{} `related_commands:"delete-private-domain, domains"`
    16  }
    17  
    18  func (cmd DeleteSharedDomainCommand) Execute(args []string) error {
    19  	err := cmd.SharedActor.CheckTarget(true, false)
    20  	if err != nil {
    21  		return err
    22  	}
    23  	domainName := cmd.RequiredArgs.Domain
    24  
    25  	currentUser, err := cmd.Config.CurrentUser()
    26  	if err != nil {
    27  		return err
    28  	}
    29  	cmd.UI.DisplayText("This action impacts all orgs using this domain.")
    30  	cmd.UI.DisplayText("Deleting the domain will remove associated routes which will make apps with this domain, in any org, unreachable.")
    31  
    32  	if !cmd.Force {
    33  		response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the shared domain {{.DomainName}}?", map[string]interface{}{
    34  			"DomainName": domainName,
    35  		})
    36  
    37  		if promptErr != nil {
    38  			return promptErr
    39  		}
    40  
    41  		if !response {
    42  			cmd.UI.DisplayText("'{{.DomainName}}' has not been deleted.", map[string]interface{}{
    43  				"DomainName": domainName,
    44  			})
    45  			return nil
    46  		}
    47  	}
    48  	cmd.UI.DisplayTextWithFlavor("Deleting domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{
    49  		"DomainName": domainName,
    50  		"Username":   currentUser.Name,
    51  	})
    52  
    53  	domain, warnings, err := cmd.Actor.GetDomainByName(domainName)
    54  	cmd.UI.DisplayWarnings(warnings)
    55  
    56  	if err != nil {
    57  		if _, ok := err.(actionerror.DomainNotFoundError); ok {
    58  			cmd.UI.DisplayWarning("Domain '{{.DomainName}}' does not exist.", map[string]interface{}{
    59  				"DomainName": cmd.RequiredArgs.Domain,
    60  			})
    61  			cmd.UI.DisplayOK()
    62  			return nil
    63  		}
    64  		return err
    65  	}
    66  
    67  	// Private domains always have an organization guid; shared domains, never.
    68  	if domain.OrganizationGUID != "" {
    69  		return translatableerror.NotSharedDomainError{DomainName: cmd.RequiredArgs.Domain}
    70  	}
    71  
    72  	warnings, err = cmd.Actor.DeleteDomain(domain)
    73  	cmd.UI.DisplayWarnings(warnings)
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	cmd.UI.DisplayOK()
    79  
    80  	return nil
    81  }