saltstack return 不一致的错误
saltstack return inconsistent errors
Saltstack(版本=3004)最近在不同的 SLS 文件上返回了各种错误,而这些文件最近没有更改。不同的 运行 抱怨不同的文件,或者干脆成功。这种情况发生在我们的 20 台主机上,而不仅仅是一台主机。我们在 ubuntu 20.04 LTS 主机上的无主上下文中使用 salt-call
。
关键是re-运行ning salt-call
一般都能成功,没有问题。如果没有,下一个 运行 会。也许之后的 运行 会失败,因为我们的 SLS 存储库中没有任何更改。似乎没有任何宇宙法则要求在成功之前先失败,这更像是随机掷骰子。
不用说,在指定的时间点查看 SLS 文件到目前为止没有结果。
一些示例:
[myhost.example.com] sudo: salt-call --local state.highstate
[myhost.example.com] out: sudo password:
[myhost.example.com] out: [CRITICAL] Rendering SLS 'base:dulcia' failed: while parsing a block node
[myhost.example.com] out: did not find expected node content
[myhost.example.com] out: in "<unicode string>", line 148, column 17
[myhost.example.com] out: local:
[myhost.example.com] out: Data failed to compile:
[myhost.example.com] out: ----------
[myhost.example.com] out: Rendering SLS 'base:dulcia' failed: while parsing a block node
[myhost.example.com] out: did not find expected node content
[myhost.example.com] out: in "<unicode string>", line 148, column 17
另一个:
[otherhost.example.com] sudo: salt-call --local state.highstate
[otherhost.example.com] out: sudo password:
[otherhost.example.com] out: [CRITICAL] Rendering SLS 'base:dulcia' failed: did not find expected comment or line break
[otherhost.example.com] out: local:
[otherhost.example.com] out: Data failed to compile:
[otherhost.example.com] out: ----------
[otherhost.example.com] out: Rendering SLS 'base:dulcia' failed: did not find expected comment or line break
还有一个:
[host-3.example.com] sudo: salt-call --local state.highstate
[host-3.example.com] out: sudo password:
[host-3.example.com] out: [CRITICAL] Rendering SLS 'base:sftp' failed: while parsing a block node
[host-3.example.com] out: did not find expected node content
[host-3.example.com] out: in "<unicode string>", line 235, column 17
[host-3.example.com] out: local:
[host-3.example.com] out: Data failed to compile:
[host-3.example.com] out: ----------
[host-3.example.com] out: Rendering SLS 'base:sftp' failed: while parsing a block node
[host-3.example.com] out: did not find expected node content
[host-3.example.com] out: in "<unicode string>", line 235, column 17
[host-3.example.com] out:
甚至
[host-3.example.com] sudo: salt-call --local state.highstate
[host-3.example.com] out: sudo password:
[host-3.example.com] out: [CRITICAL] Rendering SLS 'base:sftp' failed: did not find expected alphabetic or numeric character
[host-3.example.com] out: local:
[host-3.example.com] out: Data failed to compile:
[host-3.example.com] out: ----------
[host-3.example.com] out: Rendering SLS 'base:sftp' failed: did not find expected alphabetic or numeric character
[host-3.example.com] out:
我对此完全不知所措,调试起来非常棘手,因为超过一半的时间它不会发生。
好消息。所有这些错误都是 yaml 渲染错误而不是 jinja。它们可能是由 jinja 渲染引起的,但 jinja 正在完成它的渲染周期而没有抛出错误。很可能某些值没有设置为您认为的值。或者 jinja 没有在应该的时候提取正确的值。也许在应该设置的无主配置中没有设置支柱变量,然后在下一个 运行 上设置它。或柱子渲染时间过长。
开始调试的最简单方法是开始呈现 jinja 并验证生成的 yaml。这可以通过 slsutil.renderer
来完成
salt-call slsutil.renderer salt://sftp/init.sls default_renderer=jinja
由于问题是间歇性的,您将不得不不断渲染似乎最常失败的状态,直到它们失败为止。也许在长时间停顿之后和 运行 进入高状态之前尝试。
另一件有用的事情是将日志记录插入到 jinja 中。这可以通过简单的方式完成 {% do salt["log.info"]('string to log') %}
我发现这在 jinja 渲染不正确的问题上很有用。
还有 运行 带 -l 调试的高级状态。它将显示每个 yaml 文件的渲染过程。这样您就可以看到正在发生的事情并看到正在发生的错误。
Saltstack(版本=3004)最近在不同的 SLS 文件上返回了各种错误,而这些文件最近没有更改。不同的 运行 抱怨不同的文件,或者干脆成功。这种情况发生在我们的 20 台主机上,而不仅仅是一台主机。我们在 ubuntu 20.04 LTS 主机上的无主上下文中使用 salt-call
。
关键是re-运行ning salt-call
一般都能成功,没有问题。如果没有,下一个 运行 会。也许之后的 运行 会失败,因为我们的 SLS 存储库中没有任何更改。似乎没有任何宇宙法则要求在成功之前先失败,这更像是随机掷骰子。
不用说,在指定的时间点查看 SLS 文件到目前为止没有结果。
一些示例:
[myhost.example.com] sudo: salt-call --local state.highstate
[myhost.example.com] out: sudo password:
[myhost.example.com] out: [CRITICAL] Rendering SLS 'base:dulcia' failed: while parsing a block node
[myhost.example.com] out: did not find expected node content
[myhost.example.com] out: in "<unicode string>", line 148, column 17
[myhost.example.com] out: local:
[myhost.example.com] out: Data failed to compile:
[myhost.example.com] out: ----------
[myhost.example.com] out: Rendering SLS 'base:dulcia' failed: while parsing a block node
[myhost.example.com] out: did not find expected node content
[myhost.example.com] out: in "<unicode string>", line 148, column 17
另一个:
[otherhost.example.com] sudo: salt-call --local state.highstate
[otherhost.example.com] out: sudo password:
[otherhost.example.com] out: [CRITICAL] Rendering SLS 'base:dulcia' failed: did not find expected comment or line break
[otherhost.example.com] out: local:
[otherhost.example.com] out: Data failed to compile:
[otherhost.example.com] out: ----------
[otherhost.example.com] out: Rendering SLS 'base:dulcia' failed: did not find expected comment or line break
还有一个:
[host-3.example.com] sudo: salt-call --local state.highstate
[host-3.example.com] out: sudo password:
[host-3.example.com] out: [CRITICAL] Rendering SLS 'base:sftp' failed: while parsing a block node
[host-3.example.com] out: did not find expected node content
[host-3.example.com] out: in "<unicode string>", line 235, column 17
[host-3.example.com] out: local:
[host-3.example.com] out: Data failed to compile:
[host-3.example.com] out: ----------
[host-3.example.com] out: Rendering SLS 'base:sftp' failed: while parsing a block node
[host-3.example.com] out: did not find expected node content
[host-3.example.com] out: in "<unicode string>", line 235, column 17
[host-3.example.com] out:
甚至
[host-3.example.com] sudo: salt-call --local state.highstate
[host-3.example.com] out: sudo password:
[host-3.example.com] out: [CRITICAL] Rendering SLS 'base:sftp' failed: did not find expected alphabetic or numeric character
[host-3.example.com] out: local:
[host-3.example.com] out: Data failed to compile:
[host-3.example.com] out: ----------
[host-3.example.com] out: Rendering SLS 'base:sftp' failed: did not find expected alphabetic or numeric character
[host-3.example.com] out:
我对此完全不知所措,调试起来非常棘手,因为超过一半的时间它不会发生。
好消息。所有这些错误都是 yaml 渲染错误而不是 jinja。它们可能是由 jinja 渲染引起的,但 jinja 正在完成它的渲染周期而没有抛出错误。很可能某些值没有设置为您认为的值。或者 jinja 没有在应该的时候提取正确的值。也许在应该设置的无主配置中没有设置支柱变量,然后在下一个 运行 上设置它。或柱子渲染时间过长。
开始调试的最简单方法是开始呈现 jinja 并验证生成的 yaml。这可以通过 slsutil.renderer
salt-call slsutil.renderer salt://sftp/init.sls default_renderer=jinja
由于问题是间歇性的,您将不得不不断渲染似乎最常失败的状态,直到它们失败为止。也许在长时间停顿之后和 运行 进入高状态之前尝试。
另一件有用的事情是将日志记录插入到 jinja 中。这可以通过简单的方式完成 {% do salt["log.info"]('string to log') %}
我发现这在 jinja 渲染不正确的问题上很有用。
还有 运行 带 -l 调试的高级状态。它将显示每个 yaml 文件的渲染过程。这样您就可以看到正在发生的事情并看到正在发生的错误。