Fix VDC flow and FullPipe example
This commit is contained in:
@@ -272,15 +272,10 @@ func (c *UniversalClient) CreateGenericInstanceUniversalV6(ctx context.Context,
|
||||
opDetailsResp, _, err := c.doRequest(ctx, "GET", fmt.Sprintf("/instanceOperations/%s?fields=cfsParams", opUid), nil)
|
||||
var opDetails universalOpResponse
|
||||
hasOpDetails := false
|
||||
if err != nil {
|
||||
if hasUnresolvedParams(params) {
|
||||
return "", fmt.Errorf("не удалось получить детали операции: %w", err)
|
||||
}
|
||||
} else if jsonErr := json.Unmarshal(opDetailsResp, &opDetails); jsonErr != nil {
|
||||
if hasUnresolvedParams(params) {
|
||||
if err == nil {
|
||||
if jsonErr := json.Unmarshal(opDetailsResp, &opDetails); jsonErr != nil {
|
||||
return "", fmt.Errorf("не удалось разобрать детали операции: %w", jsonErr)
|
||||
}
|
||||
} else {
|
||||
hasOpDetails = true
|
||||
params, err = c.resolveRefSvcParamValues(ctx, opDetails.InstanceOperation.CfsParams, params)
|
||||
if err != nil {
|
||||
@@ -1359,41 +1354,6 @@ func isUUIDLike(value string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// hasUnresolvedParams возвращает true, если хотя бы одно значение параметров похоже на
|
||||
// неразрешённое имя вместо UUID. Значения map-fixed/json/array, числа и булевы пропускаются.
|
||||
func hasUnresolvedParams(params map[int]string) bool {
|
||||
for _, val := range params {
|
||||
trimmed := strings.TrimSpace(val)
|
||||
if trimmed == "" || trimmed == "{}" || trimmed == "[]" {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(trimmed, "{") || strings.HasPrefix(trimmed, "[") {
|
||||
// json/map-fixed/array не являются именами одиночных инстансов
|
||||
continue
|
||||
}
|
||||
if trimmed == "true" || trimmed == "false" {
|
||||
continue
|
||||
}
|
||||
isNum := true
|
||||
for _, r := range trimmed {
|
||||
if r < '0' || r > '9' {
|
||||
isNum = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if isNum {
|
||||
continue
|
||||
}
|
||||
if isUUIDLike(trimmed) {
|
||||
continue
|
||||
}
|
||||
// Обнаружена не-числовая строка, не JSON и не UUID (потенциальное имя).
|
||||
// Если GET ?fields=cfsParams упал, такое имя невозможно разрешить в UUID.
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func isHexDigit(r rune) bool {
|
||||
return (r >= '0' && r <= '9') || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user