gpt4 book ai didi

salt-stack - 使用 SaltStack 时 "states"是什么?

转载 作者:行者123 更新时间:2023-12-04 22:58:35 26 4
gpt4 key购买 nike

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

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

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

我可能遗漏了一些明显的东西,如果有人可以将我推向正确的方向,我认为很多文档对我来说都会变得清晰!

最佳答案

在这里,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,当这些文件使用包含捆绑在一起时,进一步粘合在一起以在环境中使用一个 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 在内部用于评估每个声明的格式,并将数据提供给每个 State 模块(根据需要依次调用执行模块)。与高数据一样,低数据可以分解为单个组件:
  • 低态
  • 低 block
  • 状态模块
  • 执行模块
     # 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

  • 所有这一切共同构成了一个低态。每个单独的项目都是一个低 block 。此列表中的第一个 Low Chunk 如下所示:
        - __env__: base
    __id__: install_httpd
    __sls__: httpd_require
    fun: installed
    name: http
    order: 10000
    state: pkg

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

    关于salt-stack - 使用 SaltStack 时 "states"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779564/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com