在子目录中运行多个状态

时间:2016-11-30 15:36:23

标签: salt-stack

我想用一个命令运行多个状态,但作为测试,我只是使用一个查看它是否有效。

无论如何我跑

  

sudo salt' minion' state.apply DirectX

它应该安装它。但这是位于/srv/salt

的时候

当我创建一个新目录/srv/salt/windows/states并将我的SLS文件放在那里时,就像之前的DirectX.sls一样。然后我创建了一个名为runall.sls的新SLS 在/ srv / salt中。我喜欢runall.sls,比如:

base:
  '*':
    - windows.states.DirectX

并运行

  

sudo salt' dss' state.sls runall

我明白了:

minion:
----------
          ID: base
    Function: minion.windows.states.DirectX
      Result: False
     Comment: State '*.windows.states.DirectX' was not found in SLS 'runall'
              Reason: '*.windows.states.DirectX' is not available.
     Changes:

Summary for minion
------------
Succeeded: 0
Failed:    1
------------
Total states run:     1
Total run time:   0.000 ms

我知道我肯定做错了什么,因为这应该很简单,但如果你能指出我的方向会很好。

Salt版本:2016.3.4(小兵和大师) 操作系统:红帽企业Linux服务器6.6圣地亚哥

1 个答案:

答案 0 :(得分:4)

您需要区分top files和常见状态文件 - 默认情况下都有.sls文件后缀。

顶级文件基本上用于将状态捆绑在小兵或小兵团体上,状态可以真正配置特定的东西。

通常,您的环境中有一个top.sls,它知道哪些小兵应具有哪些状态。如果您之后使用salt '*' state.highstate,则会应用为您的小兵配置的所有州。

根据您的需要,拥有不同的热门文件可能是个好主意。您可以使用salt '*' state.top /path/to/another_top.sls来应用此特定的热门文件。

还有另一种方法,根本不使用顶级文件来实现您的要求。

州内有include [1]。您可以考虑在/srv/salt/bundleX.sls中创建只使用include指令将您的窗口状态捆绑在一起,如下所示:

include:
  - windows.states.DirectX
  - windows.states.Foobar

但如果没有反对top.sls的内容,则会建议使用上面描述的顶级文件。