func (cmd *UpdateUserProvidedService) Execute(c flags.FlagContext) error { serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() if !serviceInstance.IsUserProvided() { return errors.New(T("Service Instance is not user provided")) } drainURL := c.String("l") credentials := strings.Trim(c.String("p"), `'"`) routeServiceURL := c.String("r") credentialsMap := make(map[string]interface{}) if c.IsSet("p") { jsonBytes, err := util.GetContentsFromFlagValue(credentials) if err != nil { return err } err = json.Unmarshal(jsonBytes, &credentialsMap) if err != nil { for _, param := range strings.Split(credentials, ",") { param = strings.Trim(param, " ") credentialsMap[param] = cmd.ui.Ask(param) } } } cmd.ui.Say(T("Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceName": terminal.EntityNameColor(serviceInstance.Name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) serviceInstance.Params = credentialsMap serviceInstance.SysLogDrainURL = drainURL serviceInstance.RouteServiceURL = routeServiceURL err := cmd.userProvidedServiceInstanceRepo.Update(serviceInstance.ServiceInstanceFields) if err != nil { return err } cmd.ui.Ok() cmd.ui.Say(T("TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect", map[string]interface{}{ "CFRestageCommand": terminal.CommandColor(cf.Name + " restage"), })) if routeServiceURL == "" && credentials == "" && drainURL == "" { cmd.ui.Warn(T("No flags specified. No changes were made.")) } return nil }
func (cmd *BindRouteService) Execute(c flags.FlagContext) error { var port int host := c.String("hostname") domain := cmd.domainReq.GetDomain() path := c.String("path") if !strings.HasPrefix(path, "/") && len(path) > 0 { path = fmt.Sprintf("/%s", path) } var parameters string if c.IsSet("parameters") { jsonBytes, err := util.GetContentsFromFlagValue(c.String("parameters")) if err != nil { return err } parameters = string(jsonBytes) } route, err := cmd.routeRepo.Find(host, domain, path, port) if err != nil { return err } serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() cmd.ui.Say(T("Binding route {{.URL}} to service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), "URL": terminal.EntityNameColor(route.URL()), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) err = cmd.routeServiceBindingRepo.Bind(serviceInstance.GUID, route.GUID, serviceInstance.IsUserProvided(), parameters) if err != nil { if httpErr, ok := err.(errors.HTTPError); ok && httpErr.ErrorCode() == errors.ServiceInstanceAlreadyBoundToSameRoute { cmd.ui.Warn(T("Route {{.URL}} is already bound to service instance {{.ServiceInstanceName}}.", map[string]interface{}{ "URL": route.URL(), "ServiceInstanceName": serviceInstance.Name, })) } else { return err } } cmd.ui.Ok() return nil }
func (cmd *CreateUserProvidedService) Execute(c flags.FlagContext) error { name := c.Args()[0] drainURL := c.String("l") routeServiceURL := c.String("r") credentials := strings.Trim(c.String("p"), `"'`) credentialsMap := make(map[string]interface{}) if c.IsSet("p") { jsonBytes, err := util.GetContentsFromFlagValue(credentials) if err != nil { return err } err = json.Unmarshal(jsonBytes, &credentialsMap) if err != nil { for _, param := range strings.Split(credentials, ",") { param = strings.Trim(param, " ") credentialsMap[param] = cmd.ui.Ask(param) } } } cmd.ui.Say(T("Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceName": terminal.EntityNameColor(name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) err := cmd.userProvidedServiceInstanceRepo.Create(name, drainURL, routeServiceURL, credentialsMap) if err != nil { return err } cmd.ui.Ok() return nil }
It("returns bytes when given something that isn't a file wrapped with double quotes", func() { bs, err := util.GetContentsFromOptionalFlagValue(`"param1=value1¶m2=value2"`) Expect(err).NotTo(HaveOccurred()) Expect(bs).To(Equal([]byte("param1=value1¶m2=value2"))) }) It("returns an error when it cannot read the file prefixed with @", func() { _, err := util.GetContentsFromOptionalFlagValue("@nonexistent-file") Expect(err).To(HaveOccurred()) }) }) Describe("GetContentsFromFlagValue", func() { It("returns an error when given an empty string", func() { _, err := util.GetContentsFromFlagValue("") Expect(err).To(HaveOccurred()) }) It("returns bytes when given a file name prefixed with @", func() { fileutils.TempFile("get-data-test", func(tmpFile *os.File, err error) { fileData := `{"foo": "bar"}` tmpFile.WriteString(fileData) bs, err := util.GetContentsFromFlagValue("@" + tmpFile.Name()) Expect(err).NotTo(HaveOccurred()) Expect(bs).To(Equal([]byte(fileData))) }) }) It("returns bytes when given a file name not prefixed with @", func() {