设为首页 收藏本站
查看: 2122|回复: 0

[经验分享] saltstack的深入-highstate概念

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-23 08:29:23 | 显示全部楼层 |阅读模式
saltstack的深入-highstate概念
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
一、初识
1、HIGHSTATE 数据结构的定义

1)salt状态树(THE SALT STATE TREE)
状态树(state tree) 指的是在file_roots中定义的目录下分类保存,供模块(module)调用的那些sls文件。

2)入口文件(TOP FILE)
一个入口状态(state)文件 可以在state执行时指示 minions 在什么环境(env)和模块(module)下使用

3)包含申明(INCLUDE DECLARATION)
定义一个列表,包括要引用的模块名称。
生效:位于highstate的顶层(top level)
举例:
include:
  - edit.vim
  - http.server

4)模块引用(MODULE REFERENCE)
sls模块名称。例如模块名“edit.vim”代表 salt://edit/vim.sls 这个sls文件,位于Salt Master上file_roots下定义的路径(默认是/srv/salt/)/srv/salt/edit/vim.sls

5)ID申明(ID DECLARATION)
定义一个独立的 highstate 组件(component),包括State declaration 和 Requisite declaration中的key-value,可以被Name declaration 或 Names declaration覆盖。

生效:位于顶层或在Extend declaration下面一层
要求:在整个state tree中是唯一的,如果有多个同样的的id,则第一个被匹配的生效。

6)扩展申明(EXTEND DECLARATION)
扩展某个要include的sls模块中的 Name declaration,这个扩展模块中的key和要include的那个sls模块中的ID declaration关联一致。

生效:位于顶层,定义了一个字典
注意:在一个单独的state运行时只能被扩展一次。

7)状态申明(STATE DECLARATION)
一个列表,包括一个字符串代表了函数申明(Function declaration),和多个函数的参数申明(Function arg declaration)的字典(dict)
可以包括许多附加组件(component),例如名称覆盖组件(name和names),必要条件申明(requisite declarations)
生效:位于ID declaration下面一层

8)必要条件申明(REQUISITE DECLARATION)
包括一系列的必要条件,用来建立行为依赖树(the action dependency tree)。
Salt的状态同步执行时是有一个明确的顺序,这个顺序的确定,需要依赖和观察( requiring and watching )其他的状态(Salt states)
生效:位于ID declaration下面一层,作为一个组件列表或者一个key
Occurs as a list component under a State declaration or as a key under an ID declaration.

9)必要条件引用(REQUISITE REFERENCE)
一个单独的字典,key和State declaration一致,value和ID declaration一致
生效:位于Requisite declaration下面一层

10)函数申明(FUNCTION DECLARATION)
要调用的函数名称。
生效:
注意:一个状态申明(state declaration)只能包括一个函数申明
举例:在状态模块(state module)pkg中调用函数“installed”:
httpd:
  pkg.installed: []
   
函数和状态在一行(inline)被简短的申明。实际上,数据结构被编译成这样:
httpd:
  pkg:
    - installed
函数是状态申明(state declaration)中的一个字符串。
从技术上而言,当函数以圆点记法“.”的方式申明时,编译器会转换成状态申明列表(state declaration list)中的一个字符串。

如下是错误的申明:
httpd:
  pkg.installed
  service.running
当没有传参给函数, 且后续还有其他的状态申明,则要使用标准格式,否则将不是一个有效的数据结构。

这才是正确的:
httpd:
  pkg.installed: []
  service.running: []
生效:位于State declaration下面一层

11)函数参数申明(FUNCTION ARG DECLARATION)
一个字典传递给函数
生效:位于Function declaration下面一层
举例:在下面的状态申明中, user, group, and mode 作为参数传递给函数“managed”:

/etc/http/conf/http.conf:
  file.managed:
    - user: root
    - group: root
    - mode: 644

12)name申明(NAME DECLARATION)
重写一个状态申明中的name参数,如果未指定name,则“ID declaration”将作为name参数
举例:重写name的用法很多,如避免ID申明冲突,例如下面的例子中,2个状态申明不能同时将/etc/motd作为ID申明:

motd_perms:
  file.managed:
    - name: /etc/motd
    - mode: 644

motd_quote:
  file.append:
    - name: /etc/motd
    - text: "Of all smells, bread; of all tastes, salt."

另一个通常的原因是,如果ID申明很长,又需要在多个地方引用。例如下面的例子,用mywebsite 来替代 /etc/apache2/sites-available/mywebsite.com即可:
mywebsite:
  file.managed:
    - name: /etc/apache2/sites-available/mywebsite.com
    - source: salt://mywebsite.com

a2ensite mywebsite.com:
  cmd.wait:
    - unless: test -L /etc/apache2/sites-enabled/mywebsite.com
    - watch:
      - file: mywebsite

apache2:
  service.running:
    - watch:
      - file: mywebsite

13)names申明(NAMES DECLARATION)
将状态申明的内容展开为多个状态申明,每个都有自己的name
举例:有这样一个申明:
python-pkgs:
  pkg.installed:
    - names:
      - python-django
      - python-crypto
      - python-yaml
转换成lowstate data structure 则变成:

python-django:
  pkg.installed

python-crypto:
  pkg.installed

python-yaml:
  pkg.installed
   
通过一个附加的字典,可以在展开时改写一些值,例如:
New in version 2014.7.0.

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

2、LARGE EXAMPLE
这是一个yaml的布局:

<Include Declaration>:
  - <Module Reference>
  - <Module Reference>

<Extend Declaration>:
  <ID Declaration>:
    [<overrides>]


# 标准申明(standard declaration)

<ID Declaration>:
  <State Module>:
    - <Function>
    - <Function Arg>
    - <Function Arg>
    - <Function Arg>
    - <Name>: <name>
    - <Requisite Declaration>:
      - <Requisite Reference>
      - <Requisite Reference>


# 函数内嵌(inline function and names)

<ID Declaration>:
  <State Module>.<Function>:
    - <Function Arg>
    - <Function Arg>
    - <Function Arg>
    - <Names>:
      - <name>
      - <name>
      - <name>
    - <Requisite Declaration>:
      - <Requisite Reference>
      - <Requisite Reference>


# multiple states for single id

<ID Declaration>:
  <State Module>:
    - <Function>
    - <Function Arg>
    - <Name>: <name>
    - <Requisite Declaration>:
      - <Requisite Reference>
  <State Module>:
    - <Function>
    - <Function Arg>
    - <Names>:
      - <name>
      - <name>
    - <Requisite Declaration>:
      - <Requisite Reference>







ZYXW、参考
1、doc
http://docs.saltstack.com/en/latest/ref/states/highstate.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-89615-1-1.html 上篇帖子: saltstack的深入-highstate试用 下篇帖子: 轻松使用SaltStack管理成千上万台服务器(入门教程)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表