Eu tenho um modelo SLS
no Salt que estou tentando criar, mas está emitindo sintaxe inválida, o que resulta em erros como:
my-minion-id:
- State 'system' in SLS 'network' is not formed as a list
Em princípio, deve ser possível, de alguma forma , examinar a saída do modelo Jinja antes que ele tente analisar a saída como um SLS
arquivo. Existe um módulo Python para o renderizador Jinja salt.renderers.jinja
, mas se eu tentar executá-lo na CLI, recebo um erro:
# 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
Como posso ver a saída do meu modelo? Parece absurdo que deve ser tão difícil de depurar.
salt minion-id cp.cache_file salt://network/init.sls
e depois slsutil.renderer corrida contra o arquivo ele cospe de volta depois de ser armazenada em cache no servo, ou a partir de 2018,3, você pode apenas especificarsalt://network/init.sls
Dado o tempo que passei semanas atrás lutando com um problema intimamente relacionado, eu gostaria de ter descoberto isso antes.
Parece que a solução é usar
salt.modules.cp.get_template
o Salt minion para recuperar o arquivo, processá-lo através do mecanismo de modelagem e colocá-lo em um local legível:A partir daí, você se conecta ao
my-minion-id
host e examina o arquivo em que colocou/root/network.sls
.Isso faz sentido;
salt.renderers.jinja
está nosalt.renderers
espaço para nome, enquanto os módulos aos quais você tem acesso a partir da CLI estão nosalt.modules
espaço para nome.Também faz sentido do ponto de vista da visibilidade de dados; a renderização do modelo ocorre no minion , onde grãos e outros estão disponíveis, e ainda não vi um módulo que executa o código do minion retornar uma saída arbitrária ao mestre (para visualização na CLI, por exemplo); os dados retornados são invariavelmente bem estruturados e concisos. (Pode haver um módulo desse tipo, mas não sei o que é. Seria uma solução preferível colocar arquivos de teste em um lacaio.)
edit: a resposta de @ gtmanfred é muito melhor e mais direta, e eu aceitei essa. Estou deixando este aqui para fins informativos. Não é a melhor solução, mas ainda funciona.
fonte