github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/update_user_provided_service_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccerror" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/resources" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/types" 9 ) 10 11 type UpdateUserProvidedServiceCommand struct { 12 BaseCommand 13 14 RequiredArgs flag.ServiceInstance `positional-args:"yes"` 15 SyslogDrainURL flag.OptionalString `short:"l" description:"URL to which logs for bound applications will be streamed"` 16 Credentials flag.CredentialsOrJSON `short:"p" description:"Credentials, provided inline or in a file, to be exposed in the VCAP_SERVICES environment variable for bound applications. Provided credentials will override existing credentials."` 17 RouteServiceURL flag.OptionalString `short:"r" description:"URL to which requests for bound routes will be forwarded. Scheme for this URL must be https"` 18 Tags flag.Tags `short:"t" description:"User provided tags"` 19 usage interface{} `usage:"CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG_DRAIN_URL] [-r ROUTE_SERVICE_URL] [-t TAGS]\n\n Pass comma separated credential parameter names to enable interactive mode:\n CF_NAME update-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n Pass credential parameters as JSON to create a service non-interactively:\n CF_NAME update-user-provided-service SERVICE_INSTANCE -p '{\"key1\":\"value1\",\"key2\":\"value2\"}'\n\n Specify a path to a file containing JSON:\n CF_NAME update-user-provided-service SERVICE_INSTANCE -p PATH_TO_FILE\n\nEXAMPLES:\n CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\", \"password\":\"pa55woRD\"}'\n CF_NAME update-user-provided-service my-db-mine -p /path/to/credentials.json\n CF_NAME create-user-provided-service my-db-mine -t \"list, of, tags\"\n CF_NAME update-user-provided-service my-drain-service -l syslog://example.com\n CF_NAME update-user-provided-service my-route-service -r https://example.com"` 20 relatedCommands interface{} `related_commands:"rename-service, services, update-service"` 21 } 22 23 func (cmd *UpdateUserProvidedServiceCommand) Execute(args []string) error { 24 if err := cmd.SharedActor.CheckTarget(true, true); err != nil { 25 return err 26 } 27 28 if err := PromptUserForCredentialsIfRequired(&cmd.Credentials, cmd.UI); err != nil { 29 return err 30 } 31 32 if err := cmd.displayMessage(); err != nil { 33 return err 34 } 35 36 if cmd.noFlagsProvided() { 37 cmd.UI.DisplayText("No flags specified. No changes were made.") 38 cmd.UI.DisplayOK() 39 return nil 40 } 41 42 serviceInstanceName := string(cmd.RequiredArgs.ServiceInstance) 43 44 warnings, err := cmd.Actor.UpdateUserProvidedServiceInstance(serviceInstanceName, cmd.Config.TargetedSpace().GUID, resources.ServiceInstance{ 45 Tags: types.OptionalStringSlice(cmd.Tags), 46 SyslogDrainURL: types.OptionalString(cmd.SyslogDrainURL), 47 RouteServiceURL: types.OptionalString(cmd.RouteServiceURL), 48 Credentials: cmd.Credentials.OptionalObject, 49 }) 50 cmd.UI.DisplayWarnings(warnings) 51 switch err.(type) { 52 case ccerror.ServiceInstanceNotFoundError: 53 return actionerror.ServiceInstanceNotFoundError{Name: serviceInstanceName} 54 default: 55 return err 56 case nil: 57 } 58 59 cmd.UI.DisplayOK() 60 cmd.UI.DisplayText("TIP: Use 'cf restage' for any bound apps to ensure your env variable changes take effect") 61 62 return nil 63 } 64 65 func (cmd UpdateUserProvidedServiceCommand) displayMessage() error { 66 user, err := cmd.Actor.GetCurrentUser() 67 if err != nil { 68 return err 69 } 70 71 cmd.UI.DisplayTextWithFlavor("Updating user provided service {{.ServiceInstance}} in org {{.Org}} / space {{.Space}} as {{.User}}...", 72 map[string]interface{}{ 73 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 74 "Org": cmd.Config.TargetedOrganization().Name, 75 "Space": cmd.Config.TargetedSpace().Name, 76 "User": user.Name, 77 }, 78 ) 79 80 return nil 81 } 82 83 func (cmd *UpdateUserProvidedServiceCommand) noFlagsProvided() bool { 84 return !cmd.SyslogDrainURL.IsSet && !cmd.RouteServiceURL.IsSet && !cmd.Tags.IsSet && !cmd.Credentials.IsSet 85 }