我们正在使用 serverdensity(BETA 模块 -https://docs.saltstack.com/en/latest/ref/states/all/salt.states.serverdensity_device.html) 加盐,然后就遇到了(错误?),如果你尝试:
salt '*SERVER-01*' --state-output=mixed state.apply serverdensity test=True
然后,serverdensity 模块总是尝试将服务器添加到监控中,无论它是否处于“test=True”模式。
我希望使用当前测试模式设置一个 Jinja 变量(或使用现有变量?),然后执行“if test then echo 'not addition' else add”来解决这个问题。
但是我在文档或谷歌搜索中找不到如何做到这一点。我甚至想看看我是否可以在主服务器上引入 ENV 参数,看看它是否作为命令行参数传递,但 $@ 没有产生任何结果:
{% set args = salt['environ.get']('@') %}
有任何想法吗?
在 Centos 7 上运行 salt 2018.3.2 (Oxygen)
答案1
如果有人发现这个问题并且想知道答案 - 我查看了 saltstackcommunity slack 并且一些非常乐于助人的人做出了回应:
terminalmage [下午 2:55] 检查看起来它只是被调用opts
所以如果你想查看测试模式是否启用,一种方法是这样的:
{% if opts['test'] %}
echo foo:
cmd.run
{% endif %}
然后,如果该状态出现在状态返回中,您就知道它是在测试模式下运行的,但另一种检查方式就是执行普通状态,cmd.run
因为您会得到一个结果,表明该命令会如果你在测试模式下运行
local:
----------
ID: echo foo
Function: cmd.run
Result: None
Comment: Command "echo foo" would have been executed
Started: 14:58:55.482679
Duration: 0.499 ms
Changes:
还想指出的是,serverdensity 也注意到了这一点,并表示他们的模块受支持,因此这个潜在问题也应该很快得到解决。在此之前,opts['test'] 的 if-then-else 对我们很有用。
答案2
在某种状态下,我认为正确的答案是检查__opts__
测试是否存在,请参阅https://docs.saltstack.com/en/latest/ref/states/writing.html#test-state
# Return comment of changes if test.
if __opts__['test']:
ret['result'] = None
ret['comment'] = 'State Foo will execute with param {0}'.format(bar)
return ret