github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/unmap_route_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/v7/shared"
    10  	"code.cloudfoundry.org/clock"
    11  )
    12  
    13  //go:generate counterfeiter . UnmapRouteActor
    14  
    15  type UnmapRouteActor interface {
    16  	GetApplicationByNameAndSpace(appName string, spaceGUID string) (v7action.Application, v7action.Warnings, error)
    17  	GetRouteByAttributes(domainName string, domainGUID string, hostname string, path string) (v7action.Route, v7action.Warnings, error)
    18  	GetDomainByName(domainName string) (v7action.Domain, v7action.Warnings, error)
    19  	GetRouteDestinationByAppGUID(routeGUID string, appGUID string) (v7action.RouteDestination, v7action.Warnings, error)
    20  	UnmapRoute(routeGUID string, destinationGUID string) (v7action.Warnings, error)
    21  }
    22  
    23  type UnmapRouteCommand struct {
    24  	RequiredArgs    flag.AppDomain   `positional-args:"yes"`
    25  	Hostname        string           `long:"hostname" short:"n" description:"Hostname used to identify the HTTP route"`
    26  	Path            flag.V7RoutePath `long:"path" description:"Path used to identify the HTTP route"`
    27  	usage           interface{}      `usage:"CF_NAME unmap-route APP_NAME DOMAIN [--hostname HOSTNAME] [--path PATH]\n\nEXAMPLES:\n   CF_NAME unmap-route my-app example.com                              # example.com\n   CF_NAME unmap-route my-app example.com --hostname myhost            # myhost.example.com\n   CF_NAME unmap-route my-app example.com --hostname myhost --path foo # myhost.example.com/foo"`
    28  	relatedCommands interface{}      `related_commands:"delete-route, map-route, routes"`
    29  
    30  	UI          command.UI
    31  	Config      command.Config
    32  	Actor       UnmapRouteActor
    33  	SharedActor command.SharedActor
    34  }
    35  
    36  func (cmd *UnmapRouteCommand) Setup(config command.Config, ui command.UI) error {
    37  	cmd.UI = ui
    38  	cmd.Config = config
    39  	sharedActor := sharedaction.NewActor(config)
    40  	cmd.SharedActor = sharedActor
    41  
    42  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    43  	if err != nil {
    44  		return err
    45  	}
    46  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    47  	return nil
    48  }
    49  
    50  func (cmd UnmapRouteCommand) Execute(args []string) error {
    51  	err := cmd.SharedActor.CheckTarget(true, true)
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	user, err := cmd.Config.CurrentUser()
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	domain, warnings, err := cmd.Actor.GetDomainByName(cmd.RequiredArgs.Domain)
    62  	cmd.UI.DisplayWarnings(warnings)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	spaceGUID := cmd.Config.TargetedSpace().GUID
    68  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.App, spaceGUID)
    69  	cmd.UI.DisplayWarnings(warnings)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	path := cmd.Path.Path
    75  	route, warnings, err := cmd.Actor.GetRouteByAttributes(domain.Name, domain.GUID, cmd.Hostname, path)
    76  	fqdn := desiredFQDN(domain.Name, cmd.Hostname, path)
    77  	cmd.UI.DisplayWarnings(warnings)
    78  	if err != nil {
    79  		return err
    80  	}
    81  
    82  	cmd.UI.DisplayTextWithFlavor("Removing route {{.FQDN}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{
    83  		"FQDN":      fqdn,
    84  		"AppName":   cmd.RequiredArgs.App,
    85  		"User":      user.Name,
    86  		"SpaceName": cmd.Config.TargetedSpace().Name,
    87  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    88  	})
    89  
    90  	destination, warnings, err := cmd.Actor.GetRouteDestinationByAppGUID(route.GUID, app.GUID)
    91  	cmd.UI.DisplayWarnings(warnings)
    92  	if err != nil {
    93  		if _, ok := err.(actionerror.RouteDestinationNotFoundError); ok {
    94  			cmd.UI.DisplayText("Route to be unmapped is not currently mapped to the application.")
    95  			cmd.UI.DisplayOK()
    96  			return nil
    97  		}
    98  
    99  		return err
   100  	}
   101  
   102  	warnings, err = cmd.Actor.UnmapRoute(route.GUID, destination.GUID)
   103  	cmd.UI.DisplayWarnings(warnings)
   104  	if err != nil {
   105  		return err
   106  	}
   107  
   108  	cmd.UI.DisplayOK()
   109  
   110  	return nil
   111  }