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 }