盐状态渲染:我可以看到Jinja阶段的输出吗?

问题:

在尝试解析为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之前?

转载请注明出处:http://www.ccclzm.com/article/20230330/1850716.html