salt-stack - salt 态渲染 : Can I See the Output of the Jinja Phase?

标签 salt-stack

题:

在尝试解析为 YAML 之前,有没有办法查看 Jinja 阶段的输出?

背景:

我试图调试一个 Salt 问题,在那里我收到了这个错误:

local:
Data failed to compile:
----------
Rendering SLS ':test.sls' failed: mapping values are not allowed in this context

不是很有帮助:没有行号?什么是“映射值”?等等。

问题归结为这样的事情:
{%- for x in [1, 2] -%}
Test {{ x }}:
  cmd.run:
    - name: echo Test {{ x }}
{%- endfor -%}

经验丰富的 Salt 人员会认识到我弄乱了空格,因此 Jinja 产生了以下输出:
Test 1:
  cmd.run:
    - name: echo Test 1 Test 2:
  cmd.run:
    - name: echo Test 2

然而,在一组复杂的状态中发现没有关于问题发生在哪里的信息,甚至没有清楚地描述问题是什么,这令人沮丧。

在调试这个过程中,我了解到你可以使用 slsutil.renderer 获得 YAML 树。 , 像这样:
% salt-call --local slsutil.renderer `pwd`/test.sls 'jinja'

local:
    ----------
    Test 1:
        ----------
        cmd.run:
            |_
              ----------
              name:
                  echo Test 1
    Test 2:
        ----------
        cmd.run:
            |_
              ----------
              name:
                  echo Test 2

但这当然要求 YAML 有效。那么我怎样才能让 Salt 像上面的第三个片段一样输出模板,在评估 Jinja 之后但在 Salt 尝试将其解析为 YAML 之前?

最佳答案

哦,哇,当我重新审视这个时,我学到了一些新东西。我相信答案是cp.get_template .

测试文件:

% cat test.sls

{%- for x in [1, 2] -%}
Test {{ x }}:
  cmd.run:
    - name: echo Test {{ x }}
{%- endfor -%}

现在 cp.get_template渲染 Jinja 并显示原始输出:
% salt-call --local cp.get_template `pwd`/test.sls /dev/stdout

Test 1:
  cmd.run:
    - name: echo Test 1Test 2:
  cmd.run:
    - name: echo Test 2
local:
    /dev/stdout

关于salt-stack - salt 态渲染 : Can I See the Output of the Jinja Phase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57065300/

相关文章:

postgresql - salt : execute custom SQL after creating a postgres user

salt-stack - 在 saltstack 中,我如何有条件地、迭代地( jinja )应用包含的状态

salt-stack - 尝试登录远程系统时 salt-ssh 权限被拒绝

amazon-web-services - 如何检查 AWS S3 同步是否有任何更改?

salt-stack - 状态 ID 在不同的 .sls 文件中是否需要唯一?

web-services - 使用file.managed在Salt中下载文件

salt-stack - 检查文件是否存在并创建符号链接(symbolic link)

python - saltstack - 在用 python 编写的 react 器内执行状态

linux - 如何使用受密码保护的私钥执行 salt 状态 git.latest

python - 如何添加到 salt 状态? (初学者使用 virtualenv 做 Python 项目)