Debugging YAML: El misterio de los caracteres "prohibidos" en Kubernetes
I have worked as a frontend and backend developer handling technologies such as Django, Ionic, Laravel, MySQL, Spring (Java), Oracle, NodeJS, Angular, VueJS with the goal of developing websites and mobile applications that offer high performance and are interactive.
You can learn more about me by visiting my website: www.stalinmaza.com
#frontend #backend #fullstack #javascript #nodejs #php
¿Alguna vez tu pipeline de Azure DevOps falló en el paso de KubernetesManifest con un error críptico como expected <block end>, but found '<scalar>'?
Si usas Replace Tokens para inyectar secretos desde tu Library, el culpable no es tu código, sino un símbolo "rebelde".
El error que aparece es similar a lo siguiente:
2026-03-24T15:49:43.6432543Z ##[section]Starting: Apply ConfigMap
2026-03-24T15:49:43.6457385Z ==============================================================================
2026-03-24T15:49:43.6457745Z Task : Deploy to Kubernetes
2026-03-24T15:49:43.6458241Z Description : Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts
2026-03-24T15:49:43.6458631Z Version : 1.268.0
2026-03-24T15:49:43.6458882Z Author : Microsoft Corporation
2026-03-24T15:49:43.6459148Z Help : https://aka.ms/azpipes-k8s-manifest-tsg
2026-03-24T15:49:43.6459451Z ==============================================================================
2026-03-24T15:49:46.4423474Z Kubectl Client Version: v1.35.2
2026-03-24T15:49:46.4424129Z Kubectl Server Version: v1.33.7
2026-03-24T15:49:46.4424737Z ==============================================================================
2026-03-24T15:49:46.4694986Z ##[error]can not read a block mapping entry; a multiline key may not be an implicit key at line 19, column 48:
... M_COMERCIAL_SHAREPOINT_TENANT_ID: "22cfcf07-cbdf-458d-adc0-6e57ece ...
^
2026-03-24T15:49:46.4789324Z ##[section]Finishing: Apply ConfigMap
El Problema: Caracteres con "superpoderes
En YAML, símbolos como !, @, #, :, | o > no son solo texto; son instrucciones técnicas.
Ejemplo Real: Los IDs de SharePoint/Drive de Microsoft suelen empezar con b!.
El Caos: Al inyectar b!t18... directamente en el YAML, Kubernetes intenta interpretar el ! como un tag de datos y, al no entenderlo, rompe el despliegue.
La Herramienta de Diagnóstico: yamllint
Antes de lanzar el despliegue y esperar 5 minutos a que falle, añade un paso de validación en tu pipeline. yamllint es el juez estricto que necesitas:
- script: |
pip install yamllint
# Validamos el archivo procesado por el Replace Tokens
yamllint qa/configmap.yml
displayName: 'QA: Validar sintaxis YAML'
Tip: Si es muy estricto con los espacios o largos de línea, usa un archivo .yamllint.conf para relajar las reglas y enfocarte solo en errores de sintaxis.
En el caso de que la librería encuentre algún error, te mostrara una salida similar a la siguiente:
/home/vsts/work/1/s/qa/configmap.yml
1:1 warning missing document start "---" (document-start)
14:81 error line too long (84 > 80 characters) (line-length)
17:81 error line too long (87 > 80 characters) (line-length)
18:51 error syntax error: expected <block end>, but found '<scalar>' (syntax)
19:81 error line too long (87 > 80 characters) (line-length)
20:81 error line too long (111 > 80 characters) (line-length)
21:81 error line too long (105 > 80 characters) (line-length)
22:81 error line too long (113 > 80 characters) (line-length)
26:81 error line too long (86 > 80 characters) (line-length)
La Solución Definitiva: El Bloque Literal (>-)
Si las comillas dobles o simples fallan, usa el "arma secreta" de YAML: el Folded Block Scalar (>-). Este operador le dice a Kubernetes: "Oye, todo lo que viene en la siguiente línea es texto puro. No intentes interpretarlo, no busques comandos, solo léelo como una cadena".
Así debe lucir tu ConfigMap:
data:
# El >- limpia saltos de línea y protege el valor inyectado
SHAREPOINT_DRIVE_ID: >-
#{SHAREPOINT_DRIVE_ID}#
Valida temprano: Usa yamllint en el pipeline para ahorrar tiempo de debugging.
Usa >-: Es la forma más robusta de manejar IDs complejos y secretos con símbolos raros sin romper la estructura.

