【问题标题】:What are "states" when using SaltStack?使用 SaltStack 时的“状态”是什么?
【发布时间】:2016-05-17 03:05:43
【问题描述】:

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

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

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

我可能遗漏了一些明显的东西,如果有人能把我推向正确的方向,我想很多文档对我来说会变得很清楚!

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    这里,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 文件:
    • 高态

      • 每个单独的State代表一个高数据(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__),记住顺序仍然只是一个起点;实际的 High State 将首先根据需要执行,然后按顺序执行。

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

    低态:

    ““低”数据通常指的是被 Salt 摄取和使用的数据。”

    一旦生成了最终的高状态,它将被发送到状态编译器。这会将 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
      

    所有这一切都构成了一个低状态。每个单独的项目都是一个低块。此列表中的第一个 Low Chunk 如下所示:

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

    每个低块映射到一个状态模块(在本例中为 pkg)和该状态模块内的一个函数(在本例中为已安装)。此级别还提供了一个 ID (__id__)。 Salt 将使用 State 和 __id__ 的组合来映射 State 之间的关系(即必要条件)。如果用户未声明名称,Salt 将自动使用 __id__ 作为名称。一旦调用了 State 模块内的函数,它通常会映射到一个或多个实际执行工作的执行模块。

    【讨论】:

      【解决方案2】:

      salt '\*' state.highstate

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

      salt '\*' state.sls apache

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

      salt 'minion-name' state.sls apache

      【讨论】:

        【解决方案3】:

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

        salt '*' state.highstate
        

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

        如果你什么都不写,你就不能申请高态。

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

        salt '*' state.sls state.example
        

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多