github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/map_route_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/command/flag"
     6  )
     7  
     8  type MapRouteCommand struct {
     9  	BaseCommand
    10  
    11  	RequiredArgs    flag.AppDomain   `positional-args:"yes"`
    12  	Hostname        string           `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"`
    13  	Path            flag.V7RoutePath `long:"path" description:"Path for the HTTP route"`
    14  	Port            int              `long:"port" description:"Port for the TCP route (default: random port)"`
    15  	relatedCommands interface{}      `related_commands:"create-route, routes, unmap-route"`
    16  }
    17  
    18  func (cmd MapRouteCommand) Usage() string {
    19  	return `
    20  Map an HTTP route:
    21     CF_NAME map-route APP_NAME DOMAIN [--hostname HOSTNAME] [--path PATH]
    22  
    23  Map a TCP route:
    24     CF_NAME map-route APP_NAME DOMAIN [--port PORT]`
    25  }
    26  
    27  func (cmd MapRouteCommand) Examples() string {
    28  	return `
    29  CF_NAME map-route my-app example.com                              # example.com
    30  CF_NAME map-route my-app example.com --hostname myhost            # myhost.example.com
    31  CF_NAME map-route my-app example.com --hostname myhost --path foo # myhost.example.com/foo
    32  CF_NAME map-route my-app example.com --port 5000                  # example.com:5000`
    33  }
    34  
    35  func (cmd MapRouteCommand) Execute(args []string) error {
    36  	err := cmd.SharedActor.CheckTarget(true, true)
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	user, err := cmd.Config.CurrentUser()
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	domain, warnings, err := cmd.Actor.GetDomainByName(cmd.RequiredArgs.Domain)
    47  	cmd.UI.DisplayWarnings(warnings)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	spaceGUID := cmd.Config.TargetedSpace().GUID
    53  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.App, spaceGUID)
    54  	cmd.UI.DisplayWarnings(warnings)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	path := cmd.Path.Path
    60  	route, warnings, err := cmd.Actor.GetRouteByAttributes(domain, cmd.Hostname, path, cmd.Port)
    61  	url := desiredURL(domain.Name, cmd.Hostname, path, cmd.Port)
    62  	cmd.UI.DisplayWarnings(warnings)
    63  	if err != nil {
    64  		if _, ok := err.(actionerror.RouteNotFoundError); !ok {
    65  			return err
    66  		}
    67  		cmd.UI.DisplayTextWithFlavor("Creating route {{.URL}} for org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...",
    68  			map[string]interface{}{
    69  				"URL":       url,
    70  				"User":      user.Name,
    71  				"SpaceName": cmd.Config.TargetedSpace().Name,
    72  				"OrgName":   cmd.Config.TargetedOrganization().Name,
    73  			})
    74  		route, warnings, err = cmd.Actor.CreateRoute(
    75  			cmd.Config.TargetedSpace().GUID,
    76  			domain.Name,
    77  			cmd.Hostname,
    78  			path,
    79  			cmd.Port,
    80  		)
    81  		cmd.UI.DisplayWarnings(warnings)
    82  		if err != nil {
    83  			return err
    84  		}
    85  		cmd.UI.DisplayOK()
    86  	}
    87  
    88  	cmd.UI.DisplayTextWithFlavor("Mapping route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{
    89  		"URL":       route.URL,
    90  		"AppName":   cmd.RequiredArgs.App,
    91  		"User":      user.Name,
    92  		"SpaceName": cmd.Config.TargetedSpace().Name,
    93  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    94  	})
    95  	dest, err := cmd.Actor.GetRouteDestinationByAppGUID(route, app.GUID)
    96  	if err != nil {
    97  		if _, ok := err.(actionerror.RouteDestinationNotFoundError); !ok {
    98  			return err
    99  		}
   100  	}
   101  	if dest.GUID != "" {
   102  		cmd.UI.DisplayText("App '{{ .AppName }}' is already mapped to route '{{ .URL}}'.", map[string]interface{}{
   103  			"AppName": cmd.RequiredArgs.App,
   104  			"URL":     route.URL,
   105  		})
   106  		cmd.UI.DisplayOK()
   107  		return nil
   108  	}
   109  	warnings, err = cmd.Actor.MapRoute(route.GUID, app.GUID)
   110  	cmd.UI.DisplayWarnings(warnings)
   111  	if err != nil {
   112  		return err
   113  	}
   114  	cmd.UI.DisplayOK()
   115  
   116  	return nil
   117  }