github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/create_user_provided_service_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/command" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/resources" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/types" 8 ) 9 10 type CreateUserProvidedServiceCommand struct { 11 BaseCommand 12 13 RequiredArgs flag.ServiceInstance `positional-args:"yes"` 14 SyslogDrainURL flag.OptionalString `short:"l" description:"URL to which logs for bound applications will be streamed"` 15 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"` 16 RouteServiceURL flag.OptionalString `short:"r" description:"URL to which requests for bound routes will be forwarded. Scheme for this URL must be https"` 17 Tags flag.Tags `short:"t" description:"User provided tags"` 18 usage interface{} `usage:"CF_NAME create-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 create-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 create-user-provided-service SERVICE_INSTANCE -p '{\"key1\":\"value1\",\"key2\":\"value2\"}'\n\n Specify a path to a file containing JSON:\n CF_NAME create-user-provided-service SERVICE_INSTANCE -p PATH_TO_FILE\n\nEXAMPLES:\n CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n CF_NAME create-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 create-user-provided-service my-drain-service -l syslog://example.com\n CF_NAME create-user-provided-service my-route-service -r https://example.com\n\n Linux/Mac:\n CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n Windows Command Line:\n CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n Windows PowerShell:\n CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'"` 19 relatedCommands interface{} `related_commands:"bind-service, services"` 20 } 21 22 func (cmd CreateUserProvidedServiceCommand) Execute(args []string) error { 23 if err := cmd.SharedActor.CheckTarget(true, true); err != nil { 24 return err 25 } 26 27 if err := PromptUserForCredentialsIfRequired(&cmd.Credentials, cmd.UI); err != nil { 28 return err 29 } 30 31 if err := cmd.displayMessage(); err != nil { 32 return err 33 } 34 35 serviceInstance := resources.ServiceInstance{ 36 Name: string(cmd.RequiredArgs.ServiceInstance), 37 SpaceGUID: cmd.Config.TargetedSpace().GUID, 38 Tags: types.OptionalStringSlice(cmd.Tags), 39 SyslogDrainURL: types.OptionalString(cmd.SyslogDrainURL), 40 RouteServiceURL: types.OptionalString(cmd.RouteServiceURL), 41 Credentials: cmd.Credentials.OptionalObject, 42 } 43 44 warnings, err := cmd.Actor.CreateUserProvidedServiceInstance(serviceInstance) 45 cmd.UI.DisplayWarnings(warnings) 46 if err != nil { 47 return err 48 } 49 50 cmd.UI.DisplayOK() 51 return nil 52 } 53 54 func (cmd CreateUserProvidedServiceCommand) displayMessage() error { 55 user, err := cmd.Actor.GetCurrentUser() 56 if err != nil { 57 return err 58 } 59 60 cmd.UI.DisplayTextWithFlavor("Creating user provided service {{.ServiceInstance}} in org {{.Org}} / space {{.Space}} as {{.User}}...", 61 map[string]interface{}{ 62 "ServiceInstance": cmd.RequiredArgs.ServiceInstance, 63 "Org": cmd.Config.TargetedOrganization().Name, 64 "Space": cmd.Config.TargetedSpace().Name, 65 "User": user.Name, 66 }, 67 ) 68 69 return nil 70 } 71 72 func PromptUserForCredentialsIfRequired(flag *flag.CredentialsOrJSON, ui command.UI) error { 73 if len(flag.UserPromptCredentials) > 0 { 74 flag.Value = make(map[string]interface{}) 75 76 for _, key := range flag.UserPromptCredentials { 77 var err error 78 flag.Value[key], err = ui.DisplayPasswordPrompt(key) 79 if err != nil { 80 return err 81 } 82 } 83 } 84 85 return nil 86 }