STATES TUTORIAL(第五部分)

EXTENDING EXTERNAL SLS DATA

扩展额外的sls数据,当一个sls文件需要被局部修改的时候,譬如当一个state文件需要添加watch条件的时候。


THE EXTEND DECLARATION

通过extend扩展sls数据,一般通过include导入一个ID declaration。
示例:

 1 include:
 2   - http
 3   - ssh
 4
 5 extend:
 6   apache:
 7     file:
 8       - name: /etc/httpd/conf/httpd.conf
 9       - source: salt://http/httpd2.conf
10   ssh-server:
11     service:
12       - watch:
13         - file: /etc/ssh/banner
14
15 /etc/ssh/banner:
16   file.managed:
17     - source: salt://ssh/banner

(1)重写apache声明的file模块的name,source参数。
(2)为ssh-server声明的service模块添加一个依赖关系/etc/ssh/banner


EXTEND IS A TOP LEVEL DECLARATION

EXTEND是一个顶级的声明,所以一个sls文件中只能使用一个extend块。
错误的一个示例:

 1 include:
 2   - http
 3   - ssh
 4
 5 extend:
 6   apache:
 7     file:
 8       - name: /etc/httpd/conf/httpd.conf
 9       - source: salt://http/httpd2.conf
10 # Second extend will overwrite the first!! Only make one
11 extend:
12   ssh-server:
13     service:
14       - watch:
15         - file: /etc/ssh/banner


THE REQUISITE "IN" STATEMENT

在sls文件中使用IN语法
将上面的例子利用IN逻辑进行重写,这样显得逻辑更加清晰。

1 include:
2   - ssh
3
4 /etc/ssh/banner:
5   file.managed:
6     - source: salt://ssh/banner
7     - watch_in:
8       - service: ssh-server

解析:
上面的extend例子扩展ssh-server的service模块,添加一个watch依赖条件,而在下面的示例则添加了一个/etc/ssh/banner新的ID声明,利用watch_in与ssh-server关联起来,一个是在ID声明里面定义一个依赖,一个是声明一个新ID定义一个被依赖。

#####################################################################################

FAILHARD GLOBAL OPTION

failhard全局选项

有时候执行一个state文件的时候,除了执行使用require等有依赖关系的ID声明以外,我们可能需要定义一个全局选项,当这个ID声明执行失败的时候,整个state文件停止执行。

1 /etc/yum.repos.d/company.repo:
2   file.managed:
3     - source: salt://company/yumrepo.conf
4     - user: root
5     - group: root
6     - mode: 644
7     - order: 1
8     - failhard: True

因为部署环境的基础一般建立在yum源上,所以当包源配置出现故障的时候,应当停止其他的state模块执行。


GLOBAL FAILHARD

在全局配置中使用FAILHARD选项

有时候我们可能想在执行所有state文件的时候,只要一个ID执行失败就停止其余的ID执行,这时候我们不需要在每一个
state中定义FAILHARD,可以在master配置文件中定义FAILHARD选项,作为全局配置。

#####################################################################################

HIGHSTATE DATA STRUCTURE DEFINITIONS

THE SALT STATE TREE

sls文件和目录被定义在file_roots里面,state tree下面的文件和目录名必须不包含点号。


TOP FILE

主state文件,用于引导minion执行时使用什么环境和模块,配置路径在master的配置文件中state_top选项。


INCLUDE DECLARATION

include出现在sls数据结构的最顶级
示例:

1 include:
2   - edit.vim
3   - http.server


MODULE REFERENCE

sls模块文件作为一个独立的sls文件被定义,放在salt master里面,譬如edit.vim就会被通过salt://edit/vim.sls引用。


ID DECLARATION

作为highstate的一个组件,总是包含一个state声明和一个Requisite declaration,能被一个Name declaration或Names declaration重写。

位于顶层结构的下面或extend声明的下面。在整个状态树下ID声明必须是唯一的,如果有多个其余的会被忽略掉,只有第一个被使用,因为所有的ID声明在一个命名空间中。


EXTEND DECLARATION

在一个include的sls模块中extend一个name declaration的前提需要是这个name declaration在include进来的sls文件中已存在。

注意:
  (1)extend只位于顶层结构中
  (2)一个sls文件只能有一个extend扩展

在增加或重写State declaration的时候EXTEND DECLARATION是非常有用的,最常用的就是添加一个watch或require条件等。
示例:

 1 include:
 2   - apache
 3
 4 extend:
 5   apache:
 6     service:
 7       - watch:
 8         - file: mywebsite
 9
10 mywebsite:
11   file.managed:
12     - name: /var/www/mysite


STATE DECLARATION

一个包含Function declaration和任意数目的Function arg declaration键值对形成的列表。
可选的,一些额外的组件,如重写部分,name和names,也可以包含一些requisite declarations,被放在ID declaration下面。


REQUISITE DECLARATION

必要的声明

用于构建依赖关系的必要部分,当state以一种特定的顺序进行执行的时候,它可以通过require和watch约束salt state文件的执行。作为 State declaration下的一个列表组件或ID declaration下的一个键。


REQUISITE REFERENCE

一个简单的键字典,键的名称是State declaration值是ID declaration


FUNCTION DECLARATION

函数声明被包含在state里面,一个state只能包含一个函数声明。
示例:

1 httpd:
2   pkg.installed: []

或这样的内联格式

1 httpd:
2   pkg:
3     - installed

当在一个ID声明中使用多个函数时,需要使用标准格式,如果参数没有也需要定义一个空列表。
示例:

1 httpd:
2   pkg.installed: []
3   service.running: []


FUNCTION ARG DECLARATION

函数参数定义

使用一个或多个简单的键值对作为参数传递给Function declaration。
示例:

1 /etc/http/conf/http.conf:
2   file.managed:
3     - user: root
4     - group: root
5     - mode: 644


NAME DECLARATION

name定义

重写State declaration里面的name参数,如果name参数没有被定义的话,默认使用ID declaration。
示例:

1 motd_perms:
2   file.managed:
3     - name: /etc/motd
4     - mode: 644
5
6 motd_quote:
7   file.append:
8     - name: /etc/motd
9     - text: "Of all smells, bread; of all tastes, salt."

由于可能存在多个name参数值是相同的,这种情况下就不能使用ID declaration作为默认的name参数。

重写name参数的另一个原因可能是由于ID declaration太长了,不便于引用。
示例:

 1 mywebsite:
 2   file.managed:
 3     - name: /etc/apache2/sites-available/mywebsite.com
 4     - source: salt://mywebsite.com
 5
 6 a2ensite mywebsite.com:
 7   cmd.wait:
 8     - unless: test -L /etc/apache2/sites-enabled/mywebsite.com
 9     - watch:
10       - file: mywebsite
11
12 apache2:
13   service.running:
14     - watch:
15       - file: mywebsite


NAMES DECLARATION

names参数定义

从一个State declaration扩展到多个state declarations的时候,可以使用names参数:

1 python-pkgs:
2   pkg.installed:
3     - names:
4       - python-django
5       - python-crypto
6       - python-yaml

一旦转换成底层的数据结构会变成一下数据结构:

1 python-django:
2   pkg.installed
3
4 python-crypto:
5   pkg.installed
6
7 python-yaml:
8   pkg.installed

可以通过设置额外的字典结构重写部分参数:
示例:

 1 ius:
 2   pkgrepo.managed:
 3     - humanname: IUS Community Packages for Enterprise Linux 6 - $basearch
 4     - gpgcheck: 1
 5     - baseurl: http://mirror.rackspace.com/ius/stable/CentOS/6/$basearch
 6     - gpgkey: http://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
 7     - names:
 8         - ius
 9         - ius-devel:
10             - baseurl: http://mirror.rackspace.com/ius/development/CentOS/6/$basearch

添加了两个name参数,相当于设置了两个repo源。


LARGE EXAMPLE

一个较大的示例,一个使用yaml格式的数据格式:

 1 <Include Declaration>:
 2   - <Module Reference>        #模块函数,state modules
 3   - <Module Reference>
 4
 5 <Extend Declaration>:        #重写已存在的ID declaration
 6   <ID Declaration>:
 7     [<overrides>]
 8
 9
10 # standard declaration
11
12 <ID Declaration>:
13   <State Module>:
14     - <Function>
15     - <Function Arg>
16     - <Function Arg>
17     - <Function Arg>
18     - <Name>: <name>
19     - <Requisite Declaration>:
20       - <Requisite Reference>
21       - <Requisite Reference>
22
23
24 # inline function and names
25
26 <ID Declaration>:
27   <State Module>.<Function>:
28     - <Function Arg>
29     - <Function Arg>
30     - <Function Arg>
31     - <Names>:
32       - <name>
33       - <name>
34       - <name>
35     - <Requisite Declaration>:
36       - <Requisite Reference>
37       - <Requisite Reference>
38
39
40 # multiple states for single id
41
42 <ID Declaration>:
43   <State Module>:
44     - <Function>
45     - <Function Arg>
46     - <Name>: <name>
47     - <Requisite Declaration>:
48       - <Requisite Reference>
49   <State Module>:
50     - <Function>
51     - <Function Arg>
52     - <Names>:
53       - <name>
54       - <name>
55     - <Requisite Declaration>:
56       - <Requisite Reference>

以上是一个相当全的一个模板示例,但是具体的使用方法还需要参考具体的模块和参数的使用方法。

时间: 2024-11-03 14:20:50

STATES TUTORIAL(第五部分)的相关文章

STATES TUTORIAL, PART 4(第三部分)

STATES TUTORIAL, PART 4(第三部分) 使用file_roots配置state文件环境 SALT FILESERVER PATH INHERITANCE salt文件服务器路径解密 示例: 1 # In the master config file (/etc/salt/master) 2 file_roots: 3 base: 4 - /srv/salt 5 - /mnt/salt-nfs/base 注意: 当定义的多路径之中存在相同的文件引用路径,则以先匹配到的为准. #

STATES TUTORIAL, PART 1 - BASIC USAGE(第二部分)

STATES TUTORIAL, PART 1 - BASIC USAGE(第二部分) SETTING UP THE SALT STATE TREE在master设置file_roots 示例: 1 file_roots: 2 base: 3 - /srv/salt 重启master pkill salt-master salt-master -d PREPARING THE TOP FILE 配置top入口文件 1 base: 2 '*': 3 - webserver 说明:top文件可以起到

STATES TUTORIAL(第四部分)

MOD AGGREGATE STATE RUNTIME MODIFICATIONS 略 ALTERING STATES 略 FILE STATE BACKUPS 可以在多个地方设置minion端的文件备份.示例: backup_mode: minion 或 1 /etc/ssh/sshd_config: 2 file.managed: 3 - source: salt://ssh/sshd_config 4 - backup: minion BACKED-UP FILES 备份文件的位置位于mi

Python Tutorial 学习(五)--Data Structures

5. Data Structures 这一章来说说Python的数据结构 5.1. More on Lists 之前的文字里面简单的介绍了一些基本的东西,其中就涉及到了list的一点点的使用.当然,它可不仅仅只有那么一点点,这里给出一个更详细一点的说明.来吧骚连,打开你的命令行窗口 >>>help(list) 看看会出来一些什么~~` list.append(x) 向一个序列里面追加元素 x a = [] a.append(x) # 假设x已经定义了 a[len(a):] = [x] l

编译原理——正规式转DFA算法概述

一.概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata).正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具:有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷

漂亮的无序列表样式

时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.WPF.ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的.自己会的. 阅读导航: 一.先看效果 二.本文背景 三.代码实现 四.文章参考 五.代码下载 一.先看效果 二.本文背景 最近在学B/S,前端使用Angular,今天学到Angular中

Git Tutorial 7 - File States

File States Overview Every file in your working directory is mainly in one of 2 states: 1. Tracked : All files that were committed to the last snapshot in Git repository are in state Tracked. They can be one of the following states: 1.1 Unmodified : 

Octave Tutorial(《Machine Learning》)之第五课《控制语句和方程及向量化》

第五课 控制语句和方程 For,while,if statements and functions (1)For loop v=zeros(10,1) %initial vectors for i=1:10, %Assign for the vectors v(i) = 2^i; end; v (%You can also do that: indices=1:10; for i=indices, v(i)=2^i; end; v ) (2)whileloop I = 1; while I <=

Ng第五课:Octave 教程(Octave Tutorial)2

5.1  基本操作 5.2  对数据进行灵活操作 5.3  计算数据 5.4  数据可视化 5.5  控制语句:for,while,if 语句 5.6  矢量化 官网安装:Installation 在线文档:http://www.gnu.org/software/octave/doc/interpreter/ 5.1  基本操作 算术运算,逻辑运算    #%用于注释 ps1('>> ');可以改变提示符的样子    #注意分号 变量赋值    #加上分号后不直接打印出来,不加分号可以直接打印