Saltstack state.apply 确定它是否在 test=True 模式下运行?

Saltstack state.apply 确定它是否在 test=True 模式下运行?

我们正在使用 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

相关内容