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  }