使用SaltStack时“状态”是什么?

时间:2015-11-18 12:02:51

标签: salt-stack

我在使用Puppet一段时间后尝试使用SaltStack,但我无法理解他们对“状态”一词的使用。

我的理解是,例如,灯开关有两种可能的状态 - 开或关。当我编写SLS配置时,我正在描述what state a server should be in。当我要求SaltStack配置服务器时,我发出命令salt '*' state.highstate。我知道服务器可以在highstate中(如我的配置中所述)。到目前为止一切都很好。

但是this page describes other states。它将lowstatehighstateoverstate(以及其他)描述为图层。这是否意味着服务器通过几个州来到达州?或者所有州都作为图层同时维护?或者我可以在我的SLS中配置多个可能的状态并在它们之间切换SaltStack吗?或者它们只是SaltStack的层,在名称中有“状态”而且我很困惑?

我可能错过了一些明显的东西,如果有人能够朝着正确的方向推动我,我想很多文档都会对我变得清晰!

4 个答案:

答案 0 :(得分:8)

这里,top.sls包含,

# cat top.sls
base:
 '*':
  - httpd_require

# cat httpd_require.sls
install_httpd:
 pkg.installed:
   - name: httpd
 service.running:
   - name: httpd
   - enable: True
   - require:
     - file: install_httpd
 file.managed:
   - name: /var/www/html/index.html
   - source: salt://index1.html
   - user: root
   - group: root
   - mode: 644
   - require:
   - pkg: install_httpd

高州:

我们可以在使用状态文件(.sls)时看到高状态系统的所有方面,有三个特定的组件。

  • 高数据:
  • SLS文件:
  • 高州

    • 每个单独的状态代表一个高数据(pkg.installed:' s),Salt将编译top.sls中的所有相关SLS,当这些文件使用includes绑定在一起时,进一步粘合在一起使用top.sls文件在环境中使用,它们形成一个高状态。

      # salt 'remote_minion' state.show_highstate --out yaml
      remote_minion:
        install_httpd:
          __env__: base
          __sls__: httpd_require
          file:
          - name: /var/www/html/index.html
          - source: salt://index1.html
          - user: root
          - group: root
          - mode: 644
          - require:
           - pkg: install_httpd
          - managed
          - order: 10002
          pkg:
          - name: httpd
          - installed
          - order: 10000
          service:
          - name: httpd
          - enable: true
          - require:
            - file: install_httpd
          - running
          - order: 10001
      

首先,声明一个订单,设置为第一个的所有状态将相应地调整其订单。然后,Salt将向最后定义的数字(默认为0)添加10000,并添加未明确排序的任何状态。 Salt还将添加一些内部使用的变量,以了解执行State的环境(__env__)以及State声明来自哪个SLS文件(__sls__),请记住,顺序仍然只是一个起点;实际的高状态将首先根据必要条件执行,然后再按顺序执行。

"换句话说,"高"数据通常指的是用户看到的数据。"

低州:

""低"数据通常指的是盐摄取和使用的数据。"

生成最终的高状态后,它将被发送到状态编译器。这会将状态数据重新格式化为Salt在内部用于评估每个声明的格式,并将数据提供给每个State模块(根据需要将依次调用执行模块)。与高数据一样,低数据可以分解为单个组件:

  • 低州
  • 低块
  • 州模块
  • 执行模块

     # salt 'remote_minion' state.show_lowstate --out yaml
     remote_minion:
     - __env__: base
       __id__: install_httpd
       __sls__: httpd_require
       fun: installed
       name: httpd
       order: 10000
       state: pkg
     - __env__: base
       __id__: install_httpd
       __sls__: httpd_require
       enable: true
       fun: running
       name: httpd
       order: 10001
       require:
       - file: install_httpd
       state: service
     - __env__: base
       __id__: install_httpd
       __sls__: httpd_require
       fun: managed
       group: root
       mode: 644
       name: /var/www/html/index.html
       order: 10002
       require:
       - pkg: install_httpd
       source: salt://index1.html
       state: file
       user: root
    

在一起,所有这些都包括一个低状态。每个单独的项目都是低块。此列表中的第一个低块看起来像这样:

    - __env__: base
      __id__: install_httpd
      __sls__: httpd_require
      fun: installed
      name: http
      order: 10000
      state: pkg

每个低块映射到State模块(在本例中为pkg)和State模块内的函数(在本例中为已安装)。此级别也提供了一个ID(__ id__)。 Salt将使用State和__id__的组合映射国家之间的关系(即必需品)。如果用户尚未声明名称,则Salt将自动使用__id__作为名称。一旦调用了State模块中的函数,它通常将映射到一个或多个实际执行工作的执行模块。 / p>

答案 1 :(得分:1)

salt '\*' state.highstate

  1. '*'指的是连接到主人的所有小兵。
  2. 'state.highstate'用于运行在master中定义的 top.sls 中提到的所有模块/脚本
  3. 要在所有minions上调用特定模块/脚本,请使用以下salt命令,其中状态信息在 state.sls 中为 apache 定义,以下给出的示例
  4. salt '\*' state.sls apache

    要仅在特定的minion上调用上述salt调用,请使用以下命令。

    salt 'minion-name' state.sls apache

答案 2 :(得分:0)

我不知道所有级别的州,但是当你跑步时:

salt '*' state.highstate

Saltstack应用您在 /srv/salt/top.sls 中提供的状态。

如果您没有写任何内容,则无法申请高州。

您可以使用此命令应用其他状态:

salt '*' state.sls state.example

答案 3 :(得分:0)

highstate只是应用于服务器的状态集合。在后台有一个过程,Salt的“状态编译器”经过几个阶段准备数据以生成highstate,但你真的不需要担心这些。

lowstate之类的东西可以帮助调试,但对于日常使用不是必需的。 highstate仅应用一次。