Skip to content

fix(service_definition): honrar dimensions del template y admitir la forma required - #561

Open
fedemaleh wants to merge 1 commit into
mainfrom
fix/service-definition-dimensions
Open

fix(service_definition): honrar dimensions del template y admitir la forma required#561
fedemaleh wants to merge 1 commit into
mainfrom
fix/service-definition-dimensions

Conversation

@fedemaleh

Copy link
Copy Markdown
Contributor

El síntoma

Un service specification registrado con este módulo pierde sus dimensiones. En la UI eso se ve como un campo que tendría que ser un selector y sale como textbox: sin dimensiones declaradas, el formulario no las pide, y sin dimensiones resueltas el additionalKeywords.enum no tiene contexto contra el cual filtrar .scopes.

Cuesta de encontrar porque el spec queda registrado igual, sin error, y la diferencia sólo aparece al usar el formulario.

Dos causas, las dos acá

1. El service spec ignora las dimensions del template. Las lee de var.dimensions, mientras que todo lo demás —type, attributes, selectors, use_default_actions— sale del archivo. Quien escribe el template pone dimensions ahí y se descarta en silencio.

El link specification del mismo archivo ya hace lo correcto:

dimensions = jsonencode(try(local.link_specs_parsed[each.key].dimensions, {}))

Este cambio alinea el service spec con esa forma, dejando var.dimensions como fallback para no romper a quien lo pasa por variable:

dimensions = jsonencode(try(local.service_spec_parsed.dimensions, var.dimensions))

2. El tipo no puede expresar lo que la API acepta. var.dimensions es map(string), así que sólo admite {environment = "production"}. La forma que necesita un spec para declarar una dimensión obligatoria es un objeto:

{"environment": {"required": true}}

Y esa forma es la que el provider documenta en la descripción de su propio atributo:

"dimensions": {
  Type: schema.TypeString,
  Description: `JSON string containing dimension configurations. Example: {"environment": {"required": true}}`,
}

Pasa a any. map(string) es un subconjunto, así que ningún consumidor actual cambia de comportamiento.

Compatibilidad

  • Un template sin dimensions se comporta igual que antes: usa var.dimensions.
  • Un consumidor que pasa var.dimensions como map(string) sigue funcionando.
  • Un template con dimensions empieza a respetarlas — que es el cambio buscado, y es el motivo por el que esto no puede ser un patch silencioso: un spec cuyo template ya las declaraba va a pasar de {} a lo que diga el archivo en el próximo apply.

Verificación

tofu fmt -check limpio y el HCL parsea. tofu validate completo no corre en el módulo aislado: falla resolviendo nullplatform_package con el provider que baja init, algo previo a este cambio y ajeno a él.

La tabla del README se actualizó a mano para que coincida con lo que emitiría terraform-docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant