如何在Saltstack中检查Jinja的输出?


16

SLS在尝试构建的Salt中有一个模板,但是它发出的语法无效,这会导致诸如以下错误:

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

原则上,应该有可能以某种方式检查Jinja模板的输出,然后再尝试将输出解析为SLS文件。Jinja渲染器存在一个Python模块salt.renderers.jinja,但是如果我尝试在CLI上执行它,则会收到错误消息:

# 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

如何查看模板的输出?似乎很难调试是荒谬的。

Answers:


11

slsutil.renderer模块。

这应该做你想要的

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

该模块只是直接为您调用compile_template函数。

编辑:/srv/salt/network/init.sls是奴才上的路径,如果您没有将主人作为奴隶,则可能需要执行以下操作。

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

或指向cache_file吐出的任何文件。

如果您使用的是2018.3或更高版本,则只需指定 salt://network/init.sls


但是/ srv / salt / network是什么路径?这是主人的道路吗?奴才?
Mrten

这是一条小路。您可以执行此操作salt minion-id cp.cache_file salt://network/init.sls,然后对在小兵上缓存后吐出的文件运行slsutil.renderer,或者从2018.3开始,您只需指定salt://network/init.sls
gtmanfred

8

考虑到我几个星期前花了多少时间来解决一个密切相关的问题,我希望我能早点解决这个问题。

解决方案似乎是用来salt.modules.cp.get_template让Salt minion检索文件,通过模板引擎进行渲染,然后将其放置在可读的位置:

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

从那里,您连接到my-minion-id主机,并检查放置在的文件/root/network.sls

这很有道理;salt.renderers.jinjasalt.renderers命名空间中,而您可以从CLI访问的模块在salt.modules命名空间中。

从数据可见性的角度来看,这也是有意义的。模板渲染发生在minion上,那里有谷物等,并且我还没有看到执行minion代码的模块将任意输出返回给master(例如,在CLI上查看);返回的数据始终具有良好的结构和简洁。(也许有这样一个模块,但是我不知道它是什么。将测试文件放到一个奴才上是一个更好的解决方案。)

编辑: @gtmanfred的答案要好得多,也更直接,我已经接受了。我将其留在此处仅供参考。这不是最好的解决方案,但它仍然有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.