github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/create_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 . CreateRouteActor
    14  
    15  type CreateRouteActor interface {
    16  	CreateRoute(spaceGUID, domainName, hostname, path string) (v7action.Route, v7action.Warnings, error)
    17  }
    18  
    19  type CreateRouteCommand struct {
    20  	RequiredArgs    flag.Domain      `positional-args:"yes"`
    21  	usage           interface{}      `usage:"CF_NAME create-route DOMAIN [--hostname HOSTNAME] [--path PATH]\n\nEXAMPLES:\n   CF_NAME create-route example.com                             # example.com\n   CF_NAME create-route example.com --hostname myapp            # myapp.example.com\n   CF_NAME create-route example.com --hostname myapp --path foo # myapp.example.com/foo"`
    22  	Hostname        string           `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"`
    23  	Path            flag.V7RoutePath `long:"path" description:"Path for the HTTP route"`
    24  	relatedCommands interface{}      `related_commands:"check-route, domains, map-route, routes, unmap-route"`
    25  
    26  	UI          command.UI
    27  	Config      command.Config
    28  	Actor       CreateRouteActor
    29  	SharedActor command.SharedActor
    30  }
    31  
    32  func (cmd *CreateRouteCommand) Setup(config command.Config, ui command.UI) error {
    33  	cmd.UI = ui
    34  	cmd.Config = config
    35  	sharedActor := sharedaction.NewActor(config)
    36  	cmd.SharedActor = sharedActor
    37  
    38  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    43  	return nil
    44  }
    45  
    46  func (cmd CreateRouteCommand) Execute(args []string) error {
    47  	err := cmd.SharedActor.CheckTarget(true, true)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	user, err := cmd.Config.CurrentUser()
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	domain := cmd.RequiredArgs.Domain
    58  	hostname := cmd.Hostname
    59  	pathName := cmd.Path.Path
    60  	spaceName := cmd.Config.TargetedSpace().Name
    61  	orgName := cmd.Config.TargetedOrganization().Name
    62  	spaceGUID := cmd.Config.TargetedSpace().GUID
    63  	fqdn := desiredFQDN(domain, hostname, pathName)
    64  
    65  	cmd.UI.DisplayTextWithFlavor("Creating route {{.FQDN}} for org {{.Organization}} / space {{.Space}} as {{.User}}...",
    66  		map[string]interface{}{
    67  			"FQDN":         fqdn,
    68  			"User":         user.Name,
    69  			"Space":        spaceName,
    70  			"Organization": orgName,
    71  		})
    72  
    73  	_, warnings, err := cmd.Actor.CreateRoute(spaceGUID, domain, hostname, pathName)
    74  
    75  	cmd.UI.DisplayWarnings(warnings)
    76  	if err != nil {
    77  		if _, ok := err.(actionerror.RouteAlreadyExistsError); ok {
    78  			cmd.UI.DisplayWarning(err.Error())
    79  			cmd.UI.DisplayOK()
    80  			return nil
    81  		}
    82  		return err
    83  	}
    84  
    85  	cmd.UI.DisplayText("Route {{.FQDN}} has been created.",
    86  		map[string]interface{}{
    87  			"FQDN": fqdn,
    88  		})
    89  
    90  	cmd.UI.DisplayOK()
    91  	return nil
    92  }
    93  
    94  func desiredFQDN(domain, hostname, path string) string {
    95  	fqdn := ""
    96  
    97  	if hostname != "" {
    98  		fqdn += hostname + "."
    99  	}
   100  	fqdn += domain
   101  
   102  	if path != "" {
   103  		fqdn += path
   104  	}
   105  
   106  	return fqdn
   107  }