github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/service/update_user_provided_service.go (about) 1 package service 2 3 import ( 4 "encoding/json" 5 6 . "github.com/cloudfoundry/cli/cf/i18n" 7 "github.com/cloudfoundry/cli/flags" 8 "github.com/cloudfoundry/cli/flags/flag" 9 10 "github.com/cloudfoundry/cli/cf" 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 UpdateUserProvidedService struct { 19 ui terminal.UI 20 config core_config.Reader 21 userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository 22 serviceInstanceReq requirements.ServiceInstanceRequirement 23 } 24 25 func init() { 26 command_registry.Register(&UpdateUserProvidedService{}) 27 } 28 29 func (cmd *UpdateUserProvidedService) MetaData() command_registry.CommandMetadata { 30 fs := make(map[string]flags.FlagSet) 31 fs["p"] = &cliFlags.StringFlag{Name: "p", Usage: T("Credentials")} 32 fs["l"] = &cliFlags.StringFlag{Name: "l", Usage: T("Syslog Drain Url")} 33 34 return command_registry.CommandMetadata{ 35 Name: "update-user-provided-service", 36 ShortName: "uups", 37 Description: T("Update user-provided service instance name value pairs"), 38 Usage: T(`CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]' 39 40 EXAMPLE: 41 CF_NAME update-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}' 42 CF_NAME update-user-provided-service my-drain-service -l syslog://example.com`), 43 Flags: fs, 44 } 45 } 46 47 func (cmd *UpdateUserProvidedService) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 48 if len(fc.Args()) != 1 { 49 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("update-user-provided-service")) 50 } 51 52 cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(fc.Args()[0]) 53 54 reqs := []requirements.Requirement{ 55 requirementsFactory.NewLoginRequirement(), 56 cmd.serviceInstanceReq, 57 } 58 return reqs, nil 59 } 60 61 func (cmd *UpdateUserProvidedService) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 62 cmd.ui = deps.Ui 63 cmd.config = deps.Config 64 cmd.userProvidedServiceInstanceRepo = deps.RepoLocator.GetUserProvidedServiceInstanceRepository() 65 return cmd 66 } 67 68 func (cmd *UpdateUserProvidedService) Execute(c flags.FlagContext) { 69 serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() 70 if !serviceInstance.IsUserProvided() { 71 cmd.ui.Failed(T("Service Instance is not user provided")) 72 return 73 } 74 75 drainUrl := c.String("l") 76 params := c.String("p") 77 78 paramsMap := make(map[string]interface{}) 79 if params != "" { 80 81 err := json.Unmarshal([]byte(params), ¶msMap) 82 if err != nil { 83 cmd.ui.Failed(T("JSON is invalid: {{.ErrorDescription}}", map[string]interface{}{"ErrorDescription": err.Error()})) 84 return 85 } 86 } 87 88 cmd.ui.Say(T("Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", 89 map[string]interface{}{ 90 "ServiceName": terminal.EntityNameColor(serviceInstance.Name), 91 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 92 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 93 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 94 })) 95 96 serviceInstance.Params = paramsMap 97 serviceInstance.SysLogDrainUrl = drainUrl 98 99 apiErr := cmd.userProvidedServiceInstanceRepo.Update(serviceInstance.ServiceInstanceFields) 100 if apiErr != nil { 101 cmd.ui.Failed(apiErr.Error()) 102 return 103 } 104 105 cmd.ui.Ok() 106 cmd.ui.Say(T("TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", 107 map[string]interface{}{ 108 "CFRestageCommand": terminal.CommandColor(cf.Name() + " restage"), 109 })) 110 111 if params == "" && drainUrl == "" { 112 cmd.ui.Warn(T("No flags specified. No changes were made.")) 113 } 114 }