没有 运行 它们的 Linting Salt 状态
Linting Salt states without running them
我在家庭实验室中使用 Saltstack,并且我经常发现自己在测试时检查了稍微违反规则的规则。我希望能够检查它们的有效性,或者在本地和 Jenkins 实例上对它们进行 lint,但我找不到任何关于如何这样做的文档。有什么我想念的吗?
盐州支持 testing interface。例如:
salt '*' state.highstate test=True
这应该 运行 状态并告诉您它们 会 做的所有事情,而无需实际更改任何东西——实际上它是一个干燥的 运行。虽然它不是直接的 linting 工具,但它确实验证了 Salt 能够解析和 运行 一切。
语法问题在 Salt 中是多层的(i.g。Jinja -> YAML -> 状态函数参数)并且没有工具可以涵盖所有这些问题。
基于this related issue的快速解答是触发多层解析:
salt-call state.show_highstate | tee highstate.output.yaml
salt-call state.show_sls [state_id] | tee state_id.output.yaml
show_*
函数显示 minion 在执行前看到的状态数据。
在 minion 端使用 salt-call
(而不是在 master 端使用 salt
)通常会提供更好的调试选项 - 这主要是一种偏好。
问题也可能出在柱子或谷物中(检查所有需要的数据是否按预期编译和存在):
salt-call pillar.items | tee pillar.output.yaml
salt-call grains.items | tee grains.output.yaml
就像一样,运行直接说明(是否有测试模式)是排错的最后一步:
salt-call state.highstate test=True | tee highstate.output.yaml
salt-call state.sls [state_id] test=True | tee state_id.output.yaml
test
选项对于检查 YAML 配置很重要。相反,请尝试创建一个包含如下内容的预签入脚本:
salt-call state.highstate --file-root=$PWD --local --retcode-passthrough mocked=True
--file-root
允许您指定当前位置
结帐
--local
表示该动作不应该运行通过
大师
--retcode-passthrough
如果无法构造任何规则,则此命令将以非零值退出
mock=True
处理所有规则,但不启动连接。这是 2015.8.5 中的新功能。另一种方法是 运行 state.show_highstate
我一直在寻找一种在 salt state 上实现此 QA 内容的好方法,到目前为止我的最佳答案是:
使用 jenkins 启动作业(通过 ssh),基于开发 git 分支:
在我们的实验室 proxmox 私有云上提供 lxc(与我们在产品中执行此操作的方式完全相同)
容器使用盐反应器获取其配置(就像在产品上一样)
使用 testinfra 运行 对构建和配置的容器进行单元测试
最后,如果一切正常,请销毁容器,如果不正常,请在早上的调试会话中保持它的活动状态:)
我们还 运行 一个 linting jenkins jobs as :
for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print }' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
我在为最后一个 linting 作业获取正确的 return 代码时仍然遇到一些问题(因为 ssh 等)。
这个过程整体保证:
- 我们的配置过程正常
- 我们的代码库(状态 + 支柱)按预期工作
- 我们可以以很高的置信度将 dev 合并到 prod
testinfra 的真正优点在于它可以使用盐连接后端,允许 testinfra 连接到容器而无需部署 ssh 密钥或其他任何东西(因为我们使用 salt-cloud 作为初始配置)
有关 testinfra 的更多信息 salt connection backend, testinfra salt module。
这并不完美,但仍然做得很好。
我在家庭实验室中使用 Saltstack,并且我经常发现自己在测试时检查了稍微违反规则的规则。我希望能够检查它们的有效性,或者在本地和 Jenkins 实例上对它们进行 lint,但我找不到任何关于如何这样做的文档。有什么我想念的吗?
盐州支持 testing interface。例如:
salt '*' state.highstate test=True
这应该 运行 状态并告诉您它们 会 做的所有事情,而无需实际更改任何东西——实际上它是一个干燥的 运行。虽然它不是直接的 linting 工具,但它确实验证了 Salt 能够解析和 运行 一切。
语法问题在 Salt 中是多层的(i.g。Jinja -> YAML -> 状态函数参数)并且没有工具可以涵盖所有这些问题。
基于this related issue的快速解答是触发多层解析:
salt-call state.show_highstate | tee highstate.output.yaml
salt-call state.show_sls [state_id] | tee state_id.output.yaml
show_*
函数显示 minion 在执行前看到的状态数据。
在 minion 端使用 salt-call
(而不是在 master 端使用 salt
)通常会提供更好的调试选项 - 这主要是一种偏好。
问题也可能出在柱子或谷物中(检查所有需要的数据是否按预期编译和存在):
salt-call pillar.items | tee pillar.output.yaml
salt-call grains.items | tee grains.output.yaml
就像
salt-call state.highstate test=True | tee highstate.output.yaml
salt-call state.sls [state_id] test=True | tee state_id.output.yaml
test
选项对于检查 YAML 配置很重要。相反,请尝试创建一个包含如下内容的预签入脚本:
salt-call state.highstate --file-root=$PWD --local --retcode-passthrough mocked=True
--file-root
允许您指定当前位置 结帐--local
表示该动作不应该运行通过 大师--retcode-passthrough
如果无法构造任何规则,则此命令将以非零值退出mock=True
处理所有规则,但不启动连接。这是 2015.8.5 中的新功能。另一种方法是 运行state.show_highstate
我一直在寻找一种在 salt state 上实现此 QA 内容的好方法,到目前为止我的最佳答案是:
使用 jenkins 启动作业(通过 ssh),基于开发 git 分支:
在我们的实验室 proxmox 私有云上提供 lxc(与我们在产品中执行此操作的方式完全相同)
容器使用盐反应器获取其配置(就像在产品上一样)
使用 testinfra 运行 对构建和配置的容器进行单元测试
最后,如果一切正常,请销毁容器,如果不正常,请在早上的调试会话中保持它的活动状态:)
我们还 运行 一个 linting jenkins jobs as :
for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print }' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
我在为最后一个 linting 作业获取正确的 return 代码时仍然遇到一些问题(因为 ssh 等)。
这个过程整体保证:
- 我们的配置过程正常
- 我们的代码库(状态 + 支柱)按预期工作
- 我们可以以很高的置信度将 dev 合并到 prod
testinfra 的真正优点在于它可以使用盐连接后端,允许 testinfra 连接到容器而无需部署 ssh 密钥或其他任何东西(因为我们使用 salt-cloud 作为初始配置)
有关 testinfra 的更多信息 salt connection backend, testinfra salt module。
这并不完美,但仍然做得很好。