Linting Salt声明没有运行它们

时间:2015-07-05 20:13:08

标签: salt-stack

我在homelab中使用Saltstack,我经常发现自己在测试它们时会检查稍微破坏的规则。我希望能够在本地和Jenkins实例上检查它们的有效性,以及否则它们,但我找不到任何关于如何这样做的文档。我有什么遗失的吗?

4 个答案:

答案 0 :(得分:10)

语法问题在Salt(例如Jinja - > YAML - >状态函数args)中是多层次的,并且没有工具可以覆盖它们。

基于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

就像@cyfur01 already mentioned一样,直接运行状态(是否使用测试模式)是排除故障的最后一步:

salt-call state.highstate      test=True | tee highstate.output.yaml
salt-call state.sls [state_id] test=True | tee state_id.output.yaml

答案 1 :(得分:6)

Salt州支持testing interface。例如:

salt '*' state.highstate test=True

这应该运行状态并告诉你他们所做的一切而不实际改变任何东西 - 实际上它是一个干运行。虽然它不是直接的linting工具,但它确实验证了Salt能够解析并运行所有内容。

答案 2 :(得分:3)

对于linting YAML配置,test选项很重要。而是尝试创建包含以下内容的预检脚本:

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

答案 3 :(得分:1)

我一直在寻找一种在盐状态下实现这个QA的好方法,到目前为止我的最佳答案是:

  1. 使用jenkins基于dev git分支启动作业(通过ssh):

    • 在我们的实验室proxmox私有云上提供lxc(与我们在prod中执行此操作的方式完全相同)

    • 使用盐反应器,容器得到它的配置(就像生产时一样)

    • 使用testinfra在内置和配置的容器上运行单元测试

    • 最后如果一切正常,请销毁容器,如果没有将其保持活动以进行早上的调试会话:)

  2. 我们还经营一个linting jenkins工作:

    for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print $2}' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
    
  3. 我仍然遇到一些问题,为最后一个linting作业获取正确的返回码(因为ssh等等)。

    此过程整体确保:

    1. 我们的配置流程没问题
    2. 我们的代码库(州+支柱)按预期工作
    3. 我们可以以很大的信心比率将dev合并到prod
    4. testinfra的真正好处在于它可以使用salt连接后端,允许testinfra连接到容器而无需部署ssh密钥或其他任何东西(因为我们使用salt-cloud进行初始配置)< / p>

      有关testinfra的更多信息salt connection backend,testinfra salt module

      这不完美,但仍然做得很好。