github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/route/unmap_route.go (about)

     1  package route
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/api"
     5  	"github.com/cloudfoundry/cli/cf/command_registry"
     6  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     7  	. "github.com/cloudfoundry/cli/cf/i18n"
     8  	"github.com/cloudfoundry/cli/cf/requirements"
     9  	"github.com/cloudfoundry/cli/cf/terminal"
    10  	"github.com/cloudfoundry/cli/flags"
    11  	"github.com/cloudfoundry/cli/flags/flag"
    12  )
    13  
    14  type UnmapRoute struct {
    15  	ui        terminal.UI
    16  	config    core_config.Reader
    17  	routeRepo api.RouteRepository
    18  	appReq    requirements.ApplicationRequirement
    19  	domainReq requirements.DomainRequirement
    20  }
    21  
    22  func init() {
    23  	command_registry.Register(&UnmapRoute{})
    24  }
    25  
    26  func (cmd *UnmapRoute) MetaData() command_registry.CommandMetadata {
    27  	fs := make(map[string]flags.FlagSet)
    28  	fs["n"] = &cliFlags.StringFlag{Name: "n", Usage: T("Hostname")}
    29  
    30  	return command_registry.CommandMetadata{
    31  		Name:        "unmap-route",
    32  		Description: T("Remove a url route from an app"),
    33  		Usage:       T("CF_NAME unmap-route APP_NAME DOMAIN [-n HOSTNAME]"),
    34  		Flags:       fs,
    35  	}
    36  }
    37  
    38  func (cmd *UnmapRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) {
    39  	if len(fc.Args()) != 2 {
    40  		cmd.ui.Failed(T("Incorrect Usage. Requires app_name, domain_name as arguments\n\n") + command_registry.Commands.CommandUsage("unmap-route"))
    41  	}
    42  
    43  	domainName := fc.Args()[1]
    44  
    45  	cmd.appReq = requirementsFactory.NewApplicationRequirement(fc.Args()[0])
    46  	cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName)
    47  
    48  	reqs = []requirements.Requirement{
    49  		requirementsFactory.NewLoginRequirement(),
    50  		cmd.appReq,
    51  		cmd.domainReq,
    52  	}
    53  	return
    54  }
    55  
    56  func (cmd *UnmapRoute) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command {
    57  	cmd.ui = deps.Ui
    58  	cmd.config = deps.Config
    59  	cmd.routeRepo = deps.RepoLocator.GetRouteRepository()
    60  	return cmd
    61  }
    62  
    63  func (cmd *UnmapRoute) Execute(c flags.FlagContext) {
    64  	hostName := c.String("n")
    65  	domain := cmd.domainReq.GetDomain()
    66  	app := cmd.appReq.GetApplication()
    67  
    68  	route, apiErr := cmd.routeRepo.FindByHostAndDomain(hostName, domain)
    69  	if apiErr != nil {
    70  		cmd.ui.Failed(apiErr.Error())
    71  	}
    72  	cmd.ui.Say(T("Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    73  		map[string]interface{}{
    74  			"URL":       terminal.EntityNameColor(route.URL()),
    75  			"AppName":   terminal.EntityNameColor(app.Name),
    76  			"OrgName":   terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    77  			"SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    78  			"Username":  terminal.EntityNameColor(cmd.config.Username())}))
    79  
    80  	var routeFound bool
    81  	for _, routeApp := range route.Apps {
    82  		if routeApp.Guid == app.Guid {
    83  			routeFound = true
    84  			apiErr = cmd.routeRepo.Unbind(route.Guid, app.Guid)
    85  			if apiErr != nil {
    86  				cmd.ui.Failed(apiErr.Error())
    87  				return
    88  			}
    89  		}
    90  	}
    91  	cmd.ui.Ok()
    92  
    93  	if !routeFound {
    94  		cmd.ui.Warn(T("\nRoute to be unmapped is not currently mapped to the application."))
    95  	}
    96  
    97  }