Tengo una plantilla SLS
en Salt que estoy tratando de construir, pero emite una sintaxis no válida, lo que produce errores como:
my-minion-id:
- State 'system' in SLS 'network' is not formed as a list
En principio, debería ser posible, de alguna manera , examinar el resultado de la plantilla Jinja antes de que intente analizar el resultado como un SLS
archivo. Existe un módulo de Python para el renderizador Jinja salt.renderers.jinja
, pero si intento ejecutarlo en la CLI, aparece un error:
# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
¿Cómo puedo ver el resultado de mi plantilla? Parece absurdo que deba ser tan difícil de depurar.
salt minion-id cp.cache_file salt://network/init.sls
y luego ejecutar slsutil.renderer contra el archivo que escupe después de ser almacenado en caché en el minion, o a partir de 2018.3, puede especificarsalt://network/init.sls
Dado el tiempo que pasé hace semanas luchando con un problema estrechamente relacionado, desearía haberlo resuelto antes.
La solución parece ser usar
salt.modules.cp.get_template
para que Salt Minion recupere el archivo, lo entregue a través del motor de plantillas y lo coloque en un lugar legible:Desde allí, se conecta al
my-minion-id
host y examina el archivo en el que colocó/root/network.sls
.Esto tiene sentido;
salt.renderers.jinja
está en elsalt.renderers
espacio de nombres, mientras que los módulos a los que tiene acceso desde la CLI están en elsalt.modules
espacio de nombres.También tiene sentido desde el punto de vista de la visibilidad de datos; la representación de plantillas ocurre en el minion , donde los granos y demás están disponibles, y aún no he visto un módulo que ejecute el código minion que devuelva resultados arbitrarios al maestro (para ver en la CLI, por ejemplo); los datos devueltos son invariablemente bien estructurados y concisos. (Puede haber un módulo de este tipo, pero no sé qué es. Sería una solución preferible para colocar archivos de prueba en un minion).
editar: la respuesta de @ gtmanfred es mucho mejor y más directa, y he aceptado esa. Dejo este aquí con fines informativos. No es la mejor solución, pero aún funciona.
fuente