Skip to content

Latest commit

 

History

History
120 lines (83 loc) · 6.26 KB

07-6.Include-and-Exclude-and-State-System-Layers.md

File metadata and controls

120 lines (83 loc) · 6.26 KB

Include and Exclude - 包括与排除

Salt SLS文件可以包含其他SLS文件,并且可以排除其他已包含的SLS文件。 这使SLS文件可以轻松扩展或操作其他SLS文件。

Include - 包含

当包含其他SLS文件时,包含的SLS文件中定义的所有内容都将添加到状态运行中。 使用include时,定义SLS公式的列表以包括:

include:
  - http
  - libvirt

include语句将包含与包含SLS公式所在的环境相同的环境中的SLS公式。但是可以在配置中显式定义该环境值以覆盖运行环境,因此,如果需要从名为“ dev”的环境中包括SLS公式,请使用以下语法:

include:
  - dev: http

注意:include不会简单地将您放置在SLS文件中的状态注入。 如果需要保证执行顺序,请考虑使用requisites条件。

不要在SLS文件名或其目录中使用点

top.slsInclude声明的初始实现遵循python导入模型,其中斜杠表示为句点。 这意味着不能引用名称中带有句点(后缀句点除外)的SLS文件。 例如,无法引用webserver_1.0.sls,因为webserver_1.0将引用目录/文件webserver_1/0.sls

这同样适用于所有子目录,当创建git repos时尤其如此。 通常无法渲染包含点的路径中文件其输出的另一个命令是“state.show_sls”。

Relative Include - 相对路径包含

在Salt 0.16.0中,添加了包含相对于运行中的SLS公式的SLS公式的功能。 只需在公式名称前加上.

include:
  - .virt
  - .virt.hyper

在Salt 2015.8中,添加了包含相对于正在运行的SLS公式的父级的SLS公式的功能。 为了实现这一点,请在公式名称前加上多个点。 与Python的相对导入功能非常相似,两个或多个前导点代表当前包的一个或多个父项的相对包含,每个. 在第一个之后代表一个级别。

如果将以下SLS配置放置在example.dev.virtual中,则会分别包含example.http和base:

include:
  - ..http
  - ...base

Exclude - 排除

Salt 0.10.3中添加的exclude语句允许SLS硬排除另一个SLS文件或特定ID。 编译完highstate数据后,该组件将被排除,因此,任何内容都不能覆盖被排除的内容。

由于排除可以删除id或sls,因此需要定义要排除的组件类型。 下面是一个exclude语句,用于验证正在运行的highstate状态不包含http sls和/etc/vimrc ID,如下所示:

exclude:
  - sls: http
  - id: /etc/vimrc

注意: 当前状态处理流程在处理排除之前会检查重复的ID。 在使用排除项时,如果状态中存在重复的ID声明,这会发生错误。

State System Layers - State状态系统的层次

Salt状态系统由多个层次组成。 尽管使用Salt不需要了解状态分层,但更深入地了解Salt如何编译和管理状态可能会非常有益。

Function Call - 函数调用

状态系统中功能的最底层是直接的状态函数调用。 状态执行是核心中单个状态功能的执行。 这些单独的功能在状态模块中定义,可以直接通过state.single命令调用。

salt '*' state.single pkg.installed name='vim'

Low Chunk - Low-Level数据块

Low Chunk块是Salt状态编译器的底部层次。 这是单个函数调用的数据表示。 Low Chunk块发送到状态调用程序,并用于执行单个状态功能。

单个Low Chunk块可以通过state.low命令手动执行。

salt '*' state.low '{name: vim, state: pkg, fun: installed}'

传递的数据反映了状态执行系统从sls公式向下编译数据后得到的结果。

Low State - Low-Level状态

Low Level状态层是按顺序执行“评估”后得到的Low Chunks数据列表。 要查看一个highstate的low level状态,请运行:

salt '*' state.show_lowstate

这将按评估每个low chunk块的顺序显示原始lowstate状态。 评估的顺序不一定是执行的顺序,因为在运行时受必要性依赖条件的影响。 这意味着可以根据Low State状态的顺序以100%的确定性确定执行顺序。

High Data - 高级别数据

高数据是通过SLS文件在YAML中表示的数据结构。 通过合并在sls文件(或其他渲染系统)中渲染的数据组件来创建High数据结构。 通过执行state.show_highstatestate.show_sls函数可以轻松查看High数据。 由于此数据是有点复杂的数据结构,因此使用json,yaml或pprint输出器可能更容易阅读:

salt '*' state.show_highstate --out yaml
salt '*' state.show_sls edit.vim --out pprint

SLS - sls状态文件

在“高数据”之上,逻辑层在技术上不再需要执行或按层次结构执行。 这意味着高数据的生成方式是可选的,并且非常灵活。 SLS层允许使用多种机制来呈现文件中的sls数据,或使用文件服务器后端从外部系统生成sls和文件数据。

可以直接调用SLS层以执行各个sls公式。

注意:SLS公式在历史上一直被称为“SLS文件”。 这是因为单个SLS仅在单个文件中构成。 现在,术语“SLS公式”更好地表达了如何通过组合pillar和其他来源以更加动态的方式来表达分隔的SLS,并且可以动态生成SLS。

要调用一个名为edit.vim的SLS公式,请执行state.apply并将edit.vim作为参数传递:

salt '*' state.apply edit.vim

HighState - 高级别state状态

调用SLS在逻辑上直接分配应从被调用minions的上下文执行哪些状态。 Highstate层用于对要执行的内容进行完整的上下文分配,以便将这些内容完全绑定到主机中的各个或多个minions。 这意味着可以从master节点分配一个minion的运行环境以及与该minion相关的所有相关执行数据,而无需在目标minion上执行或配置任何东西。 这也意味着该minion可以独立地从master服务器获取有关其完整配置的信息。

要执行高状态使用state.apply:

salt '*' state.apply

Orchestrate - 编排

编排层是表示Salt的自动化逻辑系统的最高功能层。 允许来自master主机例行的有状态和功能性编排。 编排在数据执行阶段中定义了哪个minion应该执行状态或功能,以及使用必需的逻辑以什么顺序执行。