首页 文章

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

提问于
浏览
4

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

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

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

我可能错过了一些显而易见的事情,如果有人能够朝着正确的方向推动我,我想很多文档都会让我清楚!

4 回答

  • 0

    在这里,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 block),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),请记住,顺序仍然只是一个起点;实际的高状态将首先根据必要条件执行,然后根据订单执行 .

    “换句话说,”高“数据通常指的是用户看到的数据 . ”

    低州:

    “低”数据通常指的是盐摄取和使用的数据 . “

    生成最终的高状态后,它将被发送到State编译器 . 这会将状态数据重新格式化为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模块中的函数,它通常将映射到实际执行工作的一个或多个执行模块 .

  • 8

    salt '\*' state.highstate

    • '*'指的是连接到主人的所有小兵 .

    • 'state.highstate'用于运行master中定义的 top.sls 中提到的所有模块/脚本

    • 要在所有minions上调用特定模块/脚本,请使用以下salt命令,其中状态信息在 state.sls 中为 apache 定义,如下所示 .

    salt '\*' state.sls apache

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

    salt 'minion-name' state.sls apache

  • 0

    我不知道所有级别的状态,但是当你运行时:

    salt '*' state.highstate
    

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

    如果你什么都不写,你就不能申请高州 .

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

    salt '*' state.sls state.example
    
  • 1

    highstate 只是应用于服务器的状态集合 . 在后台有一个过程,Salt的"state compiler"经历了几个阶段准备数据以生成 highstate ,但你真的不必担心那些 .

    lowstate 这样的东西可以帮助调试,但不是日常使用所必需的 . highstate 仅应用一次 .

相关问题