github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/delete_private_domain_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/sharedaction"
     8  	"code.cloudfoundry.org/cli/actor/v7action"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/command/flag"
    11  	"code.cloudfoundry.org/cli/command/v7/shared"
    12  	"code.cloudfoundry.org/clock"
    13  )
    14  
    15  //go:generate counterfeiter . DeletePrivateDomainActor
    16  
    17  type DeletePrivateDomainActor interface {
    18  	DeleteDomain(domain v7action.Domain) (v7action.Warnings, error)
    19  	GetDomainByName(domainName string) (v7action.Domain, v7action.Warnings, error)
    20  }
    21  
    22  type DeletePrivateDomainCommand struct {
    23  	RequiredArgs    flag.Domain `positional-args:"yes"`
    24  	Force           bool        `short:"f" description:"Force deletion without confirmation"`
    25  	usage           interface{} `usage:"CF_NAME delete-private-domain DOMAIN [-f]"`
    26  	relatedCommands interface{} `related_commands:"delete-shared-domain, domains, unshare-private-domain"`
    27  
    28  	UI          command.UI
    29  	Config      command.Config
    30  	SharedActor command.SharedActor
    31  	Actor       DeletePrivateDomainActor
    32  }
    33  
    34  func (cmd *DeletePrivateDomainCommand) Setup(config command.Config, ui command.UI) error {
    35  	cmd.UI = ui
    36  	cmd.Config = config
    37  	cmd.SharedActor = sharedaction.NewActor(config)
    38  
    39  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    40  	if err != nil {
    41  		return err
    42  	}
    43  	cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock())
    44  
    45  	return nil
    46  }
    47  
    48  func (cmd DeletePrivateDomainCommand) Execute(args []string) error {
    49  	domainName := cmd.RequiredArgs.Domain
    50  	err := cmd.SharedActor.CheckTarget(true, false)
    51  	if err != nil {
    52  		return err
    53  	}
    54  
    55  	currentUser, err := cmd.Config.CurrentUser()
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	domain, warnings, err := cmd.Actor.GetDomainByName(domainName)
    61  	cmd.UI.DisplayWarnings(warnings)
    62  
    63  	cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{
    64  		"DomainName": domainName,
    65  		"Username":   currentUser.Name,
    66  	})
    67  
    68  	if err != nil {
    69  		if _, ok := err.(actionerror.DomainNotFoundError); ok {
    70  			cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{
    71  				"DomainName": domainName,
    72  				"Username":   currentUser.Name,
    73  			})
    74  			cmd.UI.DisplayWarning("Domain '{{.DomainName}}' does not exist.", map[string]interface{}{
    75  				"DomainName": cmd.RequiredArgs.Domain,
    76  			})
    77  			cmd.UI.DisplayOK()
    78  			return nil
    79  		}
    80  		return err
    81  	}
    82  
    83  	if domain.Shared() {
    84  		return fmt.Errorf("Domain '%s' is a shared domain, not a private domain.", domainName)
    85  	}
    86  
    87  	cmd.UI.DisplayText("Deleting the private domain will remove associated routes which will make apps with this domain unreachable.")
    88  
    89  	if !cmd.Force {
    90  		response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really delete the private domain {{.DomainName}}?", map[string]interface{}{
    91  			"DomainName": domainName,
    92  		})
    93  
    94  		if promptErr != nil {
    95  			return promptErr
    96  		}
    97  
    98  		if !response {
    99  			cmd.UI.DisplayText("'{{.DomainName}}' has not been deleted.", map[string]interface{}{
   100  				"DomainName": domainName,
   101  			})
   102  			return nil
   103  		}
   104  	}
   105  	cmd.UI.DisplayTextWithFlavor("Deleting private domain {{.DomainName}} as {{.Username}}...", map[string]interface{}{
   106  		"DomainName": domainName,
   107  		"Username":   currentUser.Name,
   108  	})
   109  
   110  	warnings, err = cmd.Actor.DeleteDomain(domain)
   111  	cmd.UI.DisplayWarnings(warnings)
   112  
   113  	if err != nil {
   114  		return err
   115  	}
   116  
   117  	cmd.UI.DisplayOK()
   118  
   119  	cmd.UI.DisplayText("TIP: Run 'cf domains' to view available domains.")
   120  
   121  	return nil
   122  }