Skip to main content

Command Palette

Search for a command to run...

Debugging YAML: El misterio de los caracteres "prohibidos" en Kubernetes

Published
3 min read
S

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.

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.

More from this blog

S

Stalin Maza Blog

25 posts

Desarrollador apasionado por la tecnología. En este blog comparto lo que aprendo, repaso conceptos clave y documento soluciones útiles que me han servido en mi camino profesional.