如何将 state.sls 文件输出的特定节点存储在 SaltStack 的变量中

How to store a particular node from an output of a state.sls file in a variable for SaltStack

我正在做一个项目,我需要检查服务的状态,让我们在多个(超过 500 台机器)Windows 服务器上称它为 RunningService。我们在部署中广泛使用 Saltstack。 我可以使用以下代码检查我的服务状态

status_ser:
  module.run:
    - name: service.status
    - m_name: RunningService

我通过此特定代码获得 运行 的响应如下:

----------
          ID: status_ser
    Function: module.run
        Name: service.status
      **Result: True**
     Comment: Module function service.status executed
     Started: 16:20:58.295237
    Duration: 78.124 ms
     Changes:
              ----------
              ret:
                  True

Summary for minion-3
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  78.124 ms

但是,我只想要结果部分(可能是 TrueFalse),可能保存在更大的代码中在一个变量中。然后我会验证

if var == 'False'
  then start RunningService
else
  do nothing
endif

我怎样才能只得到服务的结果是真还是假? 或者更一般的问题是如何将输出的一部分存储为变量或输入到其他东西?

提前致谢。

要将命令或 salt 模块的输出存储为变量(简短回答)是在 Jinja 表达式中使用 set。喜欢:

{% set service_status = salt['service.status']('RunningService') %}

TrueFalse 现在将存储在 service_status 中。这可以用在条件语句中。以您的问题为例开始服务:

{% if not service_status %}
start_service:
  module.run:
    - service.start:
        - name: RunningService
{% endif %}

但是,有几点需要考虑:

  1. 所有 Jinja 表达式在状态 运行
  2. 之前计算
  3. Saltstack 可以更好地用于定义服务状态,即如果您希望特定服务处于 运行ning 状态,只需如此定义即可。

因此,最好使用 Salt 状态 service,它会在内部进行此类检查。这就是您需要的所有代码。

start_service:
  service.running:
    - name: RunningService

现在,每当你 运行 这种状态。如果不是运行ning,服务将启动,如果已经运行ning,则什么都不做。