【问题标题】:saltstack testing: render as each host in turnsaltstack 测试:依次渲染为每个主机
【发布时间】:2018-07-05 09:15:58
【问题描述】:

我们在 vagrant box 上测试 saltstack 脚本。有时会发生在测试主机 A 的更改时,我们无意中给主机 B 带来了问题。

我想编写一个脚本,它至少会渲染(调用 show_sls),就好像 minion id 依次是每个主机一样。这将消除至少一类错误。

我可以想出一些 hacky 方法来做这件事,比如在每次迭代时更改 /etc/salt/minion_id 的内容。但是有更好的方法吗?

我对如何很好地测试 salt 脚本知之甚少。欢迎所有建议。

伪代码示例

为了更清楚一点,我想要的可能类似于:

my_minions='a.example.com b.example.com c.example.com'
for minion_id in $my_minions; do
    sudo salt-call --local --minion="$minion_id" state.show_sls > /dev/null
    if [ $? != 0 ]; then
        echo "$minion_id does not render"
    fi
done

【问题讨论】:

    标签: testing automated-tests salt-stack


    【解决方案1】:

    您可以使用salt test interface 对所有minions 执行空运行,方法是将test=True 选项设置为状态以及--retcode-passthrough 标志将exit with the salt call retcode and not the salt binary retcode,并检查返回的retcode 以检查是否状态将被成功渲染,即

    salt-call state.sls teststate test=True --retcode-passthrough; echo $?
    

    如果任何状态不成功,将打印非零退出代码。 要获取 minions 列表,您可以遍历 /etc/salt/pki/master/minions

    (你也可以在minion配置文件中将test默认设置为true,那么states会默认在测试模式下执行。)

    第二种方法可能是在您的主服务器中设置Failhard global option,这将立即停止所有状态执行并引发错误。你可以按照上面同样的方式运行它,在这种情况下,执行将在第一次失败后立即停止,你将得到你的 retcode。

    您可能还想查看kitchen-salt

    这个厨房盐的目标是让测试盐州变得容易 或独立于生产环境的公式。它允许 快速检查状态并确保上游的变化 包不会影响部署。通过使用平台,用户可以 根据他们运行的环境检查他们的状态 生产以及在之前检查发行版的未来版本 进行重大升级。也可以针对 Salt States 进行测试 多个版本的 Salt 以确保没有重大的回归。

    我还想提一下,salt 还没有正确的退出代码,关于这个主题有很多 issues still open。如果您想手动检查输出,可以使用this python scriptTrack failure of command on a Salt minion 中提到过

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2011-03-04
      • 2020-11-22
      • 1970-01-01
      • 2015-06-27
      相关资源
      最近更新 更多