fix: s3Uid resolve by JSON key pattern (no DataDescriptor dependency)

This commit is contained in:
“Naeel”
2026-07-19 11:37:52 +04:00
parent 65b78f2a78
commit dd61b1b08d
8 changed files with 16 additions and 40 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ terraform {
required_providers { required_providers {
nubes = { nubes = {
source = "registry.kube5s.ru/nubes-test/nubes" source = "registry.kube5s.ru/nubes-test/nubes"
version = "5.1.7" version = "5.1.8"
} }
} }
} }
+2 -2
View File
@@ -1,5 +1,5 @@
resource "nubes_postgres" "npg_lucee" { resource "nubes_postgres" "npg_lucee" {
resource_name = "pglucee01" resource_name = "pglucee001"
startup_configuration = { startup_configuration = {
resource_realm = var.realm resource_realm = var.realm
@@ -33,7 +33,7 @@ resource "nubes_postgres" "npg_lucee" {
backup_configuration = { backup_configuration = {
s3_uid = var.s3_name s3_uid = var.s3_name
# s3_uid = var.s3_uid # s3_uid = var.s3_user_uid
retain = 14 retain = 14
schedule = "0 0 * * *" schedule = "0 0 * * *"
} }
+4 -4
View File
@@ -126,10 +126,10 @@ Each operation has a kind:
`dataDescriptor` для `map-fixed`-параметра, а значение отсутствует или равно `"{}"`, `dataDescriptor` для `map-fixed`-параметра, а значение отсутствует или равно `"{}"`,
строится JSON из дефолтов sub-параметров (`{"type":"off","durationCA":"175200",...}`). строится JSON из дефолтов sub-параметров (`{"type":"off","durationCA":"175200",...}`).
Это гарантирует что API получит все обязательные sub-поля с их значениями по умолчанию. Это гарантирует что API получит все обязательные sub-поля с их значениями по умолчанию.
- **s3Uid-резолв в map-fixed** (`resolveRefSvcParamValues`): для map-fixed-параметров - **s3Uid-резолв в map-fixed** (`resolveS3UidInMapFixed`): для map-fixed-параметров
с `DataDescriptor`, содержащих uuid sub-params с именем по паттерну `s3.*uid`, парсится JSON, ищутся ключи по паттерну `s3.*uid` (case-insensitive), значения-не-UUID
значения-не-UUID резолвятся в UUID через S3 (сервис 12). Позволяет использовать резолвятся в UUID через S3 (сервис 12). Не зависит от DataDescriptor API.
displayName вместо UUID для S3-ссылок во всех сервисах (Postgres, MariaDB, Clickhouse). Соглашение об именах: любой sub-param с `s3`+`uid` в имени → S3 (12).
- **modify всегда через WithDefaults** (`RunInstanceOperationUniversalWithDefaults`): - **modify всегда через WithDefaults** (`RunInstanceOperationUniversalWithDefaults`):
modify-операции запрашивают `cfsParams` у API и отправляют все параметры, modify-операции запрашивают `cfsParams` у API и отправляют все параметры,
включая новые, с дефолтами из API. включая новые, с дефолтами из API.
+1 -1
View File
@@ -4,7 +4,7 @@ TOKEN_FILE="secrets/dev.token"
# Release versions # Release versions
# Version # Version
VERSION="3.1.6" VERSION="3.1.7"
# Registry/S3 settings # Registry/S3 settings
REGISTRY_HOST="registry.kube5s.ru" REGISTRY_HOST="registry.kube5s.ru"
+1 -1
View File
@@ -4,7 +4,7 @@ TOKEN_FILE="secrets/prod.token"
# Release versions # Release versions
# Version # Version
VERSION="2.1.5" VERSION="2.1.6"
# Registry/S3 settings # Registry/S3 settings
REGISTRY_HOST="registry.kube5s.ru" REGISTRY_HOST="registry.kube5s.ru"
+1 -1
View File
@@ -3,7 +3,7 @@ NUBES_API_ENDPOINT="https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
TOKEN_FILE="secrets/test.token" TOKEN_FILE="secrets/test.token"
# Version # Version
VERSION="5.1.8" VERSION="5.1.9"
# Docs generation — ONLY from docs_gen/<stand>/ (never from docs/) # Docs generation — ONLY from docs_gen/<stand>/ (never from docs/)
DOCS_GEN_DIR="provider/docs_gen/test" DOCS_GEN_DIR="provider/docs_gen/test"
+6 -30
View File
@@ -1218,39 +1218,14 @@ func (c *UniversalClient) resolveRefSvcParamValues(ctx context.Context, opParams
return resolved, nil return resolved, nil
} }
// resolveS3UidInMapFixed парсит JSON map-fixed-параметра, находит uuid sub-params // resolveS3UidInMapFixed парсит JSON map-fixed-параметра, находит ключи
// с именем по паттерну s3.*uid и резолвит значения-не-UUID в UUID через S3 (сервис 12). // по паттерну s3.*uid (case-insensitive) и резолвит значения-не-UUID
// в UUID через S3 (сервис 12). Соглашение об именах: s3Uid, s3_uid, S3Uid → S3.
func (c *UniversalClient) resolveS3UidInMapFixed(paramId int, jsonValue string, opParams []universalCfsParam) string { func (c *UniversalClient) resolveS3UidInMapFixed(paramId int, jsonValue string, opParams []universalCfsParam) string {
// Найти DataDescriptor для этого параметра if jsonValue == "" || jsonValue == "{}" {
var dd map[string]universalSubParam
for _, p := range opParams {
if p.SvcOperationCfsParamId == paramId && len(p.DataDescriptor) > 0 {
dd = p.DataDescriptor
break
}
}
if len(dd) == 0 {
return jsonValue return jsonValue
} }
// Найти uuid sub-params с s3.*uid в имени
s3uidKeys := make(map[string]bool)
re := strings.ToLower
for key, sub := range dd {
lowKey := re(key)
lowSub := re(sub.SvcOperationCfsSubparam)
if (strings.Contains(lowKey, "s3") && strings.Contains(lowKey, "uid")) ||
(strings.Contains(lowSub, "s3") && strings.Contains(lowSub, "uid")) {
if strings.Contains(re(sub.DataType), "uuid") {
s3uidKeys[key] = true
}
}
}
if len(s3uidKeys) == 0 {
return jsonValue
}
// Парсим JSON
var obj map[string]interface{} var obj map[string]interface{}
if err := json.Unmarshal([]byte(jsonValue), &obj); err != nil { if err := json.Unmarshal([]byte(jsonValue), &obj); err != nil {
return jsonValue return jsonValue
@@ -1258,7 +1233,8 @@ func (c *UniversalClient) resolveS3UidInMapFixed(paramId int, jsonValue string,
changed := false changed := false
for key, val := range obj { for key, val := range obj {
if !s3uidKeys[key] { lowKey := strings.ToLower(key)
if !strings.Contains(lowKey, "s3") || !strings.Contains(lowKey, "uid") {
continue continue
} }
strVal, ok := val.(string) strVal, ok := val.(string)