func ParseVersion(input string) (Version, error) { parts := strings.Split(input, ".") if len(parts) != 3 { return Version{}, errors.NewWithFmt("Could not parse version number: %s", input) } major, err1 := strconv.ParseUint(parts[0], 10, 64) minor, err2 := strconv.ParseUint(parts[1], 10, 64) patch, err3 := strconv.ParseUint(parts[2], 10, 64) if err1 != nil || err2 != nil || err3 != nil { return Version{}, errors.NewWithFmt("Could not parse version number: %s", input) } return Version{major, minor, patch}, nil }
func (cmd CreateBuildpack) createBuildpack(buildpackName string, c *cli.Context) (buildpack models.Buildpack, apiErr error) { position, err := strconv.Atoi(c.Args()[2]) if err != nil { apiErr = errors.NewWithFmt(T("Error {{.ErrorDescription}} is being passed in as the argument for 'Position' but 'Position' requires an integer. For more syntax help, see `cf create-buildpack -h`.", map[string]interface{}{"ErrorDescription": c.Args()[2]})) return } enabled := c.Bool("enable") disabled := c.Bool("disable") if enabled && disabled { apiErr = errors.New(T("Cannot specify both {{.Enabled}} and {{.Disabled}}.", map[string]interface{}{ "Enabled": "enabled", "Disabled": "disabled", })) return } var enableOption *bool = nil if enabled { enableOption = &enabled } if disabled { disabled = false enableOption = &disabled } buildpack, apiErr = cmd.buildpackRepo.Create(buildpackName, &position, enableOption, nil) return }
func envVarOrEmptyMap(yamlMap generic.Map, errs *[]error) *map[string]interface{} { key := "env" switch envVars := yamlMap.Get(key).(type) { case nil: aMap := make(map[string]interface{}, 0) return &aMap case map[string]interface{}: yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) return envVarOrEmptyMap(yamlMap, errs) case map[interface{}]interface{}: yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) return envVarOrEmptyMap(yamlMap, errs) case generic.Map: merrs := validateEnvVars(envVars) if merrs != nil { *errs = append(*errs, merrs...) return nil } result := make(map[string]interface{}, envVars.Count()) generic.Each(envVars, func(key, value interface{}) { result[key.(string)] = value }) return &result default: *errs = append(*errs, errors.NewWithFmt(T("Expected {{.Name}} to be a set of key => value, but it was a {{.Type}}.", map[string]interface{}{"Name": key, "Type": envVars}))) return nil } }
func intVal(yamlMap generic.Map, key string, errs *[]error) *int { var ( intVal int err error ) switch val := yamlMap.Get(key).(type) { case string: intVal, err = strconv.Atoi(val) case int: intVal = val case int64: intVal = int(val) case nil: return nil default: err = errors.NewWithFmt(T("Expected {{.PropertyName}} to be a number, but it was a {{.PropertyType}}.", map[string]interface{}{"PropertyName": key, "PropertyType": val})) } if err != nil { *errs = append(*errs, err) return nil } return &intVal }
func (cmd CreateBuildpack) createBuildpack(buildpackName string, c *cli.Context) (buildpack models.Buildpack, apiErr error) { position, err := strconv.Atoi(c.Args()[2]) if err != nil { apiErr = errors.NewWithFmt("Invalid position. %s", err.Error()) return } enabled := c.Bool("enable") disabled := c.Bool("disable") if enabled && disabled { apiErr = errors.New("Cannot specify both enabled and disabled.") return } var enableOption *bool = nil if enabled { enableOption = &enabled } if disabled { disabled = false enableOption = &disabled } buildpack, apiErr = cmd.buildpackRepo.Create(buildpackName, &position, enableOption, nil) return }
func (cmd CreateBuildpack) createBuildpack(buildpackName string, c *cli.Context) (buildpack models.Buildpack, apiErr error) { position, err := strconv.Atoi(c.Args()[2]) if err != nil { apiErr = errors.NewWithFmt(T("Invalid position. {{.ErrorDescription}}", map[string]interface{}{"ErrorDescription": err.Error()})) return } enabled := c.Bool("enable") disabled := c.Bool("disable") if enabled && disabled { apiErr = errors.New(T("Cannot specify both {{.Enabled}} and {{.Disabled}}.", map[string]interface{}{ "Enabled": "enabled", "Disabled": "disabled", })) return } var enableOption *bool = nil if enabled { enableOption = &enabled } if disabled { disabled = false enableOption = &disabled } buildpack, apiErr = cmd.buildpackRepo.Create(buildpackName, &position, enableOption, nil) return }
func intVal(yamlMap generic.Map, key string, errs *[]error) *int { var ( intVal int err error ) switch val := yamlMap.Get(key).(type) { case string: intVal, err = strconv.Atoi(val) case int: intVal = val case int64: intVal = int(val) case nil: return nil default: err = errors.NewWithFmt("Expected %s to be a number, but it was a %T.", key, val) } if err != nil { *errs = append(*errs, err) return nil } return &intVal }
func sliceOrEmptyVal(yamlMap generic.Map, key string, errs *[]error) *[]string { if !yamlMap.Has(key) { return new([]string) } var ( stringSlice []string err error ) sliceErr := errors.NewWithFmt(T("Expected {{.PropertyName}} to be a list of strings.", map[string]interface{}{"PropertyName": key})) switch input := yamlMap.Get(key).(type) { case []interface{}: for _, value := range input { stringValue, ok := value.(string) if !ok { err = sliceErr break } stringSlice = append(stringSlice, stringValue) } default: err = sliceErr } if err != nil { *errs = append(*errs, err) return nil } return &stringSlice }
func (m Manifest) getAppMaps(data generic.Map) (apps []generic.Map, errs []error) { globalProperties := data.Except([]interface{}{"applications"}) if data.Has("applications") { appMaps, ok := data.Get("applications").([]interface{}) if !ok { errs = append(errs, errors.New(T("Expected applications to be a list"))) return } for _, appData := range appMaps { if !generic.IsMappable(appData) { errs = append(errs, errors.NewWithFmt(T("Expected application to be a list of key/value pairs\nError occurred in manifest near:\n'{{.YmlSnippet}}'", map[string]interface{}{"YmlSnippet": appData}))) continue } appMap := generic.DeepMerge(globalProperties, generic.NewMap(appData)) apps = append(apps, appMap) } } else { apps = append(apps, globalProperties) } return }
func (matcher havePassedRequirementsMatcher) Match(actual interface{}) (bool, error) { asBool, ok := actual.(bool) if !ok { return false, errors.NewWithFmt("Expected actual value to be a bool, but it was a %T", actual) } return asBool == true, nil }
func ParseVersion(input string) (Version, error) { parts := strings.Split(input, ".") if len(parts) != 3 { return Version{}, errors.NewWithFmt(T("Could not parse version number: {{.Input}}", map[string]interface{}{"Input": input})) } major, err1 := strconv.ParseInt(parts[0], 10, 64) minor, err2 := strconv.ParseInt(parts[1], 10, 64) patch, err3 := strconv.ParseInt(parts[2], 10, 64) if err1 != nil || err2 != nil || err3 != nil { return Version{}, errors.NewWithFmt(T("Could not parse version number: {{.Input}}", map[string]interface{}{"Input": input})) } return Version{major, minor, patch}, nil }
func parseJson(bytes []byte) (map[string]interface{}, error) { stringMap := map[string]interface{}{} err := json.Unmarshal(bytes, &stringMap) if err != nil { return nil, errors.NewWithFmt("Incorrect json format: %s", err.Error()) } return stringMap, nil }
func (matcher haveSucceededMatcher) Match(actual interface{}) (bool, error) { switch actual.(type) { case testcmd.RunCommandResult: result := actual.(testcmd.RunCommandResult) return result == testcmd.RunCommandResultSuccess, nil default: return false, errors.NewWithFmt("Expected actual value to be an enum, but it was a %T", actual) } }
func rolePath(role string) (string, error) { path, found := orgRoleToPathMap[role] if !found { return "", errors.NewWithFmt(T("Invalid Role {{.Role}}", map[string]interface{}{"Role": role})) } return path, nil }
func (repo CloudControllerUserRepository) checkSpaceRole(userGuid, spaceGuid, role string) (fullPath string, apiErr error) { rolePath, found := spaceRoleToPathMap[role] if !found { apiErr = errors.NewWithFmt("Invalid Role %s", role) } fullPath = fmt.Sprintf("%s/v2/spaces/%s/%s/%s", repo.config.ApiEndpoint(), spaceGuid, rolePath, userGuid) return }
func envVarOrEmptyMap(yamlMap generic.Map, errs *[]error) *map[string]string { key := "env" switch envVars := yamlMap.Get(key).(type) { case nil: aMap := make(map[string]string, 0) return &aMap case map[string]interface{}: yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) return envVarOrEmptyMap(yamlMap, errs) case map[interface{}]interface{}: yamlMap.Set(key, generic.NewMap(yamlMap.Get(key))) return envVarOrEmptyMap(yamlMap, errs) case generic.Map: merrs := validateEnvVars(envVars) if merrs != nil { *errs = append(*errs, merrs...) return nil } result := make(map[string]string, envVars.Count()) generic.Each(envVars, func(key, value interface{}) { switch value.(type) { case string: result[key.(string)] = value.(string) case int64, int, int32: result[key.(string)] = fmt.Sprintf("%d", value) case float32, float64: result[key.(string)] = fmt.Sprintf("%f", value) default: *errs = append(*errs, errors.NewWithFmt(T("Expected environment variable {{.PropertyName}} to have a string value, but it was a {{.PropertyType}}.", map[string]interface{}{"PropertyName": key, "PropertyType": value}))) } }) return &result default: *errs = append(*errs, errors.NewWithFmt(T("Expected {{.Name}} to be a set of key => value, but it was a {{.Type}}.", map[string]interface{}{"Name": key, "Type": envVars}))) return nil } }
func findAppWithNameInManifest(name string, manifestApps []models.AppParams) (app models.AppParams, err error) { for _, appParams := range manifestApps { if appParams.Name != nil && *appParams.Name == name { app = appParams return } } err = errors.NewWithFmt("Could not find app named '%s' in manifest", name) return }
func (matcher havePassedRequirementsMatcher) Match(actual interface{}) (bool, error) { switch actual.(type) { case bool: asBool := actual.(bool) return asBool == true, nil case testcmd.RunCommandResult: result := actual.(testcmd.RunCommandResult) return result == testcmd.RunCommandResultSuccess, nil default: return false, errors.NewWithFmt("Expected actual value to be a bool or enum, but it was a %T", actual) } }
func stringVal(yamlMap generic.Map, key string, errs *[]error) *string { val := yamlMap.Get(key) if val == nil { return nil } result, ok := val.(string) if !ok { *errs = append(*errs, errors.NewWithFmt("%s must be a string value", key)) return nil } return &result }
func bytesVal(yamlMap generic.Map, key string, errs *[]error) *uint64 { yamlVal := yamlMap.Get(key) if yamlVal == nil { return nil } value, err := formatters.ToMegabytes(yamlVal.(string)) if err != nil { *errs = append(*errs, errors.NewWithFmt("Unexpected value for %s :\n%s", key, err.Error())) return nil } return &value }
func stringVal(yamlMap generic.Map, key string, errs *[]error) *string { val := yamlMap.Get(key) if val == nil { return nil } result, ok := val.(string) if !ok { *errs = append(*errs, errors.NewWithFmt(T("{{.PropertyName}} must be a string value", map[string]interface{}{"PropertyName": key}))) return nil } return &result }
func checkForNulls(yamlMap generic.Map) (errs []error) { generic.Each(yamlMap, func(key interface{}, value interface{}) { if key == "command" || key == "buildpack" { return } if value == nil { errs = append(errs, errors.NewWithFmt(T("{{.PropertyName}} should not be null", map[string]interface{}{"PropertyName": key}))) } }) return }
func checkForNulls(yamlMap generic.Map) (errs []error) { generic.Each(yamlMap, func(key interface{}, value interface{}) { if key == "command" || key == "buildpack" { return } if value == nil { errs = append(errs, errors.NewWithFmt("%s should not be null", key)) } }) return }
func (repo CloudControllerUserRepository) checkSpaceRole(spaceGuid, role string) (string, error) { var apiErr error rolePath, found := spaceRoleToPathMap[role] if !found { apiErr = errors.NewWithFmt(T("Invalid Role {{.Role}}", map[string]interface{}{"Role": role})) } apiPath := fmt.Sprintf("/v2/spaces/%s/%s", spaceGuid, rolePath) return apiPath, apiErr }
func boolVal(yamlMap generic.Map, key string, errs *[]error) bool { switch val := yamlMap.Get(key).(type) { case nil: return false case bool: return val case string: return val == "true" default: *errs = append(*errs, errors.NewWithFmt(T("Expected {{.PropertyName}} to be a boolean.", map[string]interface{}{"PropertyName": key}))) return false } }
func boolVal(yamlMap generic.Map, key string, errs *[]error) bool { switch val := yamlMap.Get(key).(type) { case nil: return false case bool: return val case string: return val == "true" default: *errs = append(*errs, errors.NewWithFmt("Expected %s to be a boolean.", key)) return false } }
func bytesVal(yamlMap generic.Map, key string, errs *[]error) *uint64 { yamlVal := yamlMap.Get(key) if yamlVal == nil { return nil } value, err := formatters.ToMegabytes(yamlVal.(string)) if err != nil { *errs = append(*errs, errors.NewWithFmt(T("Unexpected value for {{.PropertyName}} :\n{{.Error}}", map[string]interface{}{"PropertyName": key, "Error": err.Error()}))) return nil } return &value }
func (cmd Target) setOrganization(orgName string) error { // setting an org necessarily invalidates any space you had previously targeted cmd.config.SetOrganizationFields(models.OrganizationFields{}) cmd.config.SetSpaceFields(models.SpaceFields{}) org, apiErr := cmd.orgRepo.FindByName(orgName) if apiErr != nil { return errors.NewWithFmt("Could not target org.\n%s", apiErr.Error()) } cmd.config.SetOrganizationFields(org.OrganizationFields) return nil }
func (cmd Target) setSpace(spaceName string) error { cmd.config.SetSpaceFields(models.SpaceFields{}) if !cmd.config.HasOrganization() { return errors.New("An org must be targeted before targeting a space") } space, apiErr := cmd.spaceRepo.FindByName(spaceName) if apiErr != nil { return errors.NewWithFmt("Unable to access space %s.\n%s", spaceName, apiErr.Error()) } cmd.config.SetSpaceFields(space.SpaceFields) return nil }
func (cmd Target) setSpace(spaceName string) error { cmd.config.SetSpaceFields(models.SpaceFields{}) if !cmd.config.HasOrganization() { return errors.New(T("An org must be targeted before targeting a space")) } space, apiErr := cmd.spaceRepo.FindByName(spaceName) if apiErr != nil { return errors.NewWithFmt(T("Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", map[string]interface{}{"SpaceName": spaceName, "ApiErr": apiErr.Error()})) } cmd.config.SetSpaceFields(space.SpaceFields) return nil }