github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/service/create_user_provided_service.go (about) 1 package service 2 3 import ( 4 "encoding/json" 5 "strings" 6 7 . "github.com/cloudfoundry/cli/cf/i18n" 8 "github.com/cloudfoundry/cli/flags" 9 "github.com/cloudfoundry/cli/flags/flag" 10 11 "github.com/cloudfoundry/cli/cf/api" 12 "github.com/cloudfoundry/cli/cf/command_registry" 13 "github.com/cloudfoundry/cli/cf/configuration/core_config" 14 "github.com/cloudfoundry/cli/cf/requirements" 15 "github.com/cloudfoundry/cli/cf/terminal" 16 ) 17 18 type CreateUserProvidedService struct { 19 ui terminal.UI 20 config core_config.Reader 21 userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository 22 } 23 24 func init() { 25 command_registry.Register(&CreateUserProvidedService{}) 26 } 27 28 func (cmd *CreateUserProvidedService) MetaData() command_registry.CommandMetadata { 29 fs := make(map[string]flags.FlagSet) 30 fs["p"] = &cliFlags.StringFlag{Name: "p", Usage: T("Credentials")} 31 fs["l"] = &cliFlags.StringFlag{Name: "l", Usage: T("Syslog Drain Url")} 32 33 return command_registry.CommandMetadata{ 34 Name: "create-user-provided-service", 35 ShortName: "cups", 36 Description: T("Make a user-provided service instance available to cf apps"), 37 Usage: T(`CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL] 38 39 Pass comma separated credential parameter names to enable interactive mode: 40 CF_NAME create-user-provided-service SERVICE_INSTANCE -p "comma, separated, parameter, names" 41 42 Pass credential parameters as JSON to create a service non-interactively: 43 CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{"name":"value","name":"value"}' 44 45 EXAMPLE 46 CF_NAME create-user-provided-service my-db-mine -p "username, password" 47 CF_NAME create-user-provided-service my-drain-service -l syslog://example.com 48 49 Linux/Mac: 50 CF_NAME create-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}' 51 52 Windows Command Line 53 CF_NAME create-user-provided-service my-db-mine -p "{\"username\":\"admin\",\"password\":\"pa55woRD\"}" 54 55 Windows PowerShell 56 CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}' 57 `), 58 Flags: fs, 59 } 60 } 61 62 func (cmd *CreateUserProvidedService) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 63 if len(fc.Args()) != 1 { 64 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("create-user-provided-service")) 65 } 66 67 reqs = []requirements.Requirement{ 68 requirementsFactory.NewLoginRequirement(), 69 requirementsFactory.NewTargetedSpaceRequirement(), 70 } 71 return 72 } 73 74 func (cmd *CreateUserProvidedService) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 75 cmd.ui = deps.Ui 76 cmd.config = deps.Config 77 cmd.userProvidedServiceInstanceRepo = deps.RepoLocator.GetUserProvidedServiceInstanceRepository() 78 return cmd 79 } 80 81 func (cmd *CreateUserProvidedService) Execute(c flags.FlagContext) { 82 name := c.Args()[0] 83 drainUrl := c.String("l") 84 85 params := c.String("p") 86 params = strings.Trim(params, `"`) 87 paramsMap := make(map[string]interface{}) 88 89 err := json.Unmarshal([]byte(params), ¶msMap) 90 if err != nil && params != "" { 91 paramsMap = cmd.mapValuesFromPrompt(params, paramsMap) 92 } 93 94 cmd.ui.Say(T("Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", 95 map[string]interface{}{ 96 "ServiceName": terminal.EntityNameColor(name), 97 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 98 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 99 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 100 })) 101 102 apiErr := cmd.userProvidedServiceInstanceRepo.Create(name, drainUrl, paramsMap) 103 if apiErr != nil { 104 cmd.ui.Failed(apiErr.Error()) 105 return 106 } 107 108 cmd.ui.Ok() 109 } 110 111 func (cmd CreateUserProvidedService) mapValuesFromPrompt(params string, paramsMap map[string]interface{}) map[string]interface{} { 112 for _, param := range strings.Split(params, ",") { 113 param = strings.Trim(param, " ") 114 paramsMap[param] = cmd.ui.Ask("%s", param) 115 } 116 return paramsMap 117 }