github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/unbind_route_service_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/shared" 8 ) 9 10 type UnbindRouteServiceCommand struct { 11 BaseCommand 12 13 RequiredArgs flag.RouteServiceArgs `positional-args:"yes"` 14 Force bool `short:"f" description:"Force unbinding without confirmation"` 15 Hostname string `long:"hostname" short:"n" description:"Hostname used in combination with DOMAIN to specify the route to unbind"` 16 Path flag.V7RoutePath `long:"path" description:"Path used in combination with HOSTNAME and DOMAIN to specify the route to unbind"` 17 Wait bool `short:"w" long:"wait" description:"Wait for the operation to complete"` 18 relatedCommands interface{} `related_commands:"delete-service, routes, services"` 19 } 20 21 func (cmd UnbindRouteServiceCommand) Execute(args []string) error { 22 if err := cmd.SharedActor.CheckTarget(true, true); err != nil { 23 return err 24 } 25 26 if !cmd.Force { 27 delete, err := cmd.displayPrompt() 28 if err != nil { 29 return err 30 } 31 32 if !delete { 33 cmd.UI.DisplayText("Unbind cancelled") 34 return nil 35 } 36 } 37 38 if err := cmd.displayIntro(); err != nil { 39 return err 40 } 41 42 stream, warnings, err := cmd.Actor.DeleteRouteBinding(v7action.DeleteRouteBindingParams{ 43 SpaceGUID: cmd.Config.TargetedSpace().GUID, 44 ServiceInstanceName: cmd.RequiredArgs.ServiceInstance, 45 DomainName: cmd.RequiredArgs.Domain, 46 Hostname: cmd.Hostname, 47 Path: cmd.Path.Path, 48 }) 49 cmd.UI.DisplayWarnings(warnings) 50 switch err.(type) { 51 case nil: 52 case actionerror.RouteBindingNotFoundError: 53 cmd.displayNotFound() 54 return nil 55 default: 56 return err 57 } 58 59 completed, err := shared.WaitForResult(stream, cmd.UI, cmd.Wait) 60 switch { 61 case err != nil: 62 return err 63 case completed: 64 cmd.UI.DisplayOK() 65 return nil 66 default: 67 cmd.UI.DisplayOK() 68 cmd.UI.DisplayText("Unbinding in progress.") 69 return nil 70 } 71 } 72 73 func (UnbindRouteServiceCommand) Usage() string { 74 return `CF_NAME unbind-route-service DOMAIN [--hostname HOSTNAME] [--path PATH] SERVICE_INSTANCE [-f]` 75 } 76 77 func (UnbindRouteServiceCommand) Examples() string { 78 return `CF_NAME unbind-route-service example.com --hostname myapp --path foo myratelimiter` 79 } 80 81 func (cmd UnbindRouteServiceCommand) displayPrompt() (bool, error) { 82 delete, err := cmd.UI.DisplayBoolPrompt( 83 false, 84 "Really unbind route {{.URL}} from service instance {{.ServiceInstance}}?", 85 map[string]interface{}{ 86 "URL": desiredURL(cmd.RequiredArgs.Domain, cmd.Hostname, cmd.Path.Path, 0), 87 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 88 }, 89 ) 90 if err != nil { 91 return false, err 92 } 93 94 return delete, nil 95 } 96 97 func (cmd UnbindRouteServiceCommand) displayIntro() error { 98 user, err := cmd.Actor.GetCurrentUser() 99 if err != nil { 100 return err 101 } 102 103 cmd.UI.DisplayTextWithFlavor( 104 "Unbinding route {{.URL}} from service instance {{.ServiceInstance}} in org {{.Org}} / space {{.Space}} as {{.User}}...", 105 map[string]interface{}{ 106 "URL": desiredURL(cmd.RequiredArgs.Domain, cmd.Hostname, cmd.Path.Path, 0), 107 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 108 "User": user.Name, 109 "Space": cmd.Config.TargetedSpace().Name, 110 "Org": cmd.Config.TargetedOrganization().Name, 111 }, 112 ) 113 114 return nil 115 } 116 117 func (cmd UnbindRouteServiceCommand) displayNotFound() { 118 cmd.UI.DisplayText( 119 "Route {{.URL}} was not bound to service instance {{.ServiceInstance}}.", 120 map[string]interface{}{ 121 "URL": desiredURL(cmd.RequiredArgs.Domain, cmd.Hostname, cmd.Path.Path, 0), 122 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 123 }, 124 ) 125 cmd.UI.DisplayOK() 126 }