2015-07-05 19 views
6

我在homelab中使用Saltstack,并且在测试它们时,我经常发现自己检查了轻微破碎的规则。我希望能够检查它们的有效性,或者在本地和Jenkins实例中对它们进行检测,但是我找不到任何有关我如何这样做的文档。有什么我失踪?Linting盐状态没有运行它

回答

6

语法问题在Salt中是多层次的(例如Jinja - > YAML - > state function 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_*功能显示状态的数据作为仆从执行之前看到它。

在仆从一侧使用salt-call(而不是主控方的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 
+0

@ cyfu01的回答非常好的扩展,非常感谢! –

4

盐状态支持testing interface。例如:

salt '*' state.highstate test=True 

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

+0

正是我之后,谢谢! –

2

test选项是沉重掉毛YAML CONFIGS。相反,尝试创建一个precheckin脚本,其中包括这样的事情:

salt-call state.highstate --file-root=$PWD --local --retcode-passthrough mocked=True 
  • --file-root允许你指定你目前 结账的位置
  • --local指示行动不应通过 主
  • 运行
  • --retcode-passthrough导致此命令退出非零,如果任何规则不能构造
  • mock=True处理所有t他规定,但不主动联系。这是2015.8.5中的一项新功能。另一种方法是运行state.show_highstate
+1

这将适用于非常基本的设置,但不支持外部支柱(即使这只是同一结帐中的单独目录)。 – RCross

0

我一直在寻找了一段时间的好办法实现对盐的状态这个QA的东西,我最好的答案至今:

  1. 使用詹金斯启动工作(通过ssh)的基础上,开发的Git分支:

    • 提供我们的实验室里LXC proxmox私有云(在我们的督促这样做完全一样的方式)

    • 使用盐反应堆容器获得它的配置(因为它会在正式版)

    • 使用testinfra到内置和config'ed容器

    • 最后上运行单元测试,如果一切正常破坏容器如果不能保持它活着的早晨调试会话:)

  2. 我们还运行掉毛詹金斯的工作为:

    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 
    

我仍然有一些问题得到这最后linting工作正确的返回码(因为ssh等)。

这个过程作为一个整体保证:

  1. 我们的供应流程是OK
  2. 我们的代码库(州+柱)正按预期
  3. 我们可以合并开发与督促很好的信心比率

testinfra的真正好处是它可以使用salt连接后端,允许testinfra连接到con无需TAINER部署SSH密钥,或其他任何东西(因为我们使用的盐云初始配置)

更多关于testinfra salt connection backend,testinfra salt module

这并不完美,但它仍然做得不错。