Come esaminare l'output di Jinja in Saltstack?


16

Ho un modello SLSin Salt che sto provando a creare, ma sta emettendo una sintassi non valida, che provoca errori come:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

In linea di principio, dovrebbe essere possibile, in qualche modo , esaminare l'output del modello Jinja prima che tenti di analizzare l'output come SLSfile. Esiste un modulo Python per il renderer Jinja salt.renderers.jinja, ma se provo ad eseguirlo sulla CLI, ricevo un errore:

# 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

Come posso vedere l'output del mio modello? Sembra assurdo che dovrebbe essere così difficile eseguire il debug.

Risposte:


11

Controlla la slsutil.renderer modulo.

Questo dovrebbe fare quello che vuoi

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

Questo modulo chiama semplicemente la funzione compile_template direttamente per te.

Modifica: /srv/salt/network/init.sls è il percorso sul servitore, se non stai prendendo di mira il padrone come servitore, probabilmente dovrai fare quanto segue.

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

oppure punta a qualsiasi file che sparga cache_file.

Se sei su 2018.3 o più recente, puoi semplicemente specificare salt://network/init.sls


Ma quale percorso è / srv / salt / network? È il percorso sul maestro? Il servitore?
Mrten,

È un percorso sul seguace. Puoi fare salt minion-id cp.cache_file salt://network/init.slse quindi eseguire slsutil.renderer sul file che sputa indietro dopo essere stato memorizzato nella cache sul servitore o a partire dal 2018.3, puoi semplicemente specificaresalt://network/init.sls
gtmanfred,

8

Dato quanto tempo ho trascorso settimane fa alle prese con un problema strettamente correlato, vorrei averlo capito prima.

La soluzione sembra essere quella salt.modules.cp.get_templatedi fare in modo che il servitore Salt recuperi il file, lo renda attraverso il motore di template e lo posizioni in un luogo leggibile:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

Da lì, ti connetti my-minion-idall'host ed esamini il file che hai inserito /root/network.sls.

Questo ha senso; salt.renderers.jinjasi trova nello salt.renderersspazio dei nomi, mentre i moduli a cui si ha accesso dalla CLI si trovano nello salt.modulesspazio dei nomi.

Ha anche senso dal punto di vista della visibilità dei dati; il rendering del modello avviene sul servitore , dove sono disponibili granaglie e simili, e devo ancora vedere un modulo che esegue il codice servitore restituire un output arbitrario al master (ad esempio per visualizzare sulla CLI); i dati restituiti sono invariabilmente ben strutturati e concisi. (Potrebbe esserci un tale modulo, ma non so di cosa si tratti. Sarebbe una soluzione preferibile per far cadere i file di test su un servitore.)

modifica: la risposta di @ gtmanfred è molto migliore e più diretta, e l'ho accettata. Lascio questo qui a scopo informativo. Non è la soluzione migliore, ma funziona ancora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.