States是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件。如安装软件啊,更改配置啊等,就需要编写states sls文件(描述状态配置的文件)去描述和实现这些功能。编写states sls文件一般是是YAML语法格式,也支持使用Python语言来编写。
定义例子:1
2
3
4
5
6
7apache: #state名称:apache
pkg: #管理对象类型:pkg,进行软件安装(yum、apt)
- installed #pkg要执行的方法:install,如未安装就进行安装
service: #管理对象类型:service,管理系统守护进程
- running #service要执行的方法:running,如未运行就进行启动
- require: #关键字require,确保apache服务只有在成功安装软件包后才会启动
- pkg: apache
State Tree
Top file:配置管理入口文件,和pillar类似,指定minions需要完成那些配置管理,默认为top.sls
注:在定义top.sls时,会先找apache/init.sls,如果没有的话,会找
apache.sls1
2
3 base:
'*':
- apache
配置
跟系统文件树一样,salt state文件也有自己的树系统,这通过配置文件中的file_roots配置1
2
3
4#在/etc/salt/master 中配置下面选项,指定salt state的根目录在/srv/salt
file_roots:
base:
- /srv/salt
修改master配置文件后需要重启。
创建Top文件
在/srv/salt目录下创建一个top.sls文件,这个文件提供了其它文件的映射。1
2
3
4
5[root@Automation salt]# vi top.sls
[root@Automation salt]# cat top.sls
base:
'*':
- webserver
创建State文件
在top.sls相同的目录下,创建一个名为webserver.sls的空文件,也可以在同目录下创建一个文件夹webserver,在里边创建init.sls。1
2
3
4
5[root@Automation salt]# vi webserver.sls
[root@Automation salt]# cat webserver.sls
httpd:
pkg:
- installed
执行Salt State
1 | [root@Automation salt]# salt '*' state.highstate |
master将会指导所有的目标minions运行state.highstate。
当minion执行highstate,它将会下载top文件中匹配的内容,minion将表达式中匹配的内容下载、编译、执行。一旦完成,minion将返回所有的动作执行结果和所有更改。
状态间关系
- Ordering
- require
include
包含某个文件 比如新建一个test.sls文件内,就可以继承nginx和php相关模块配置,而不必重新编写1
2
3
4[root@Automation salt]# cat test.sls
include:
- nginx
- phpwatch
监测依赖的state的状态,如果状态发生变化,做出反应(例如监控文件变化,发生变化后立即重启服务)1
2
3
4
5
6
7
8ntpd:
service.running:
- watch: #这里它是监听ID为file: /etc/ntp.conf,如果下方的状态没有发生改变,那么我这个重启规则就不会执行,那么就不会执行服务重启操作。
- file: /etc/ntp.conf #也就相当于如果minion端的ntp.conf或者master端的salt://files/ntp.conf的文件没有发生改变,也就不会发生文件下发操作,也就可以理解为如果没有发生文件更改。
/etc/ntp.conf:
file.managed:
- source: salt://files/ntp.conf
主要模块
软件包状态管理模块 - pkg
1
2
3
4pkg.installed # 安装
pkg.latest # 确保最新版本
pkg.remove # 卸载
pkg.purge # 卸载并删除配置文件文件状态管理模块 - file
1
2
3file.managed: #保证文件存在并且为对应的状态
file.recurse: #保证目录存在并且为对应的状态
file.absent: #确保文件不存在,如果存在则进行删除操作例子:
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[root@Automation salt]# vi file.sls
[root@Automation salt]# cat file.sls
create test_create_directory:
file.directory:
- name: /opt/my_new_directory
- user: root
- group: root
- mode: 755
[root@Automation salt]# salt '*' state.apply file
192.168.244.130:
----------
file_|-create test_create_directory_|-/opt/my_new_directory_|-directory:
----------
__run_num__:
0
changes:
----------
/opt/my_new_directory:
New Dir
comment:
Directory /opt/my_new_directory updated
duration:
52.238
name:
/opt/my_new_directory
result:
True
start_time:
21:07:18.721680服务状态管理模块 - service
1
2
3
4service.running #确保服务处于运行状态
service.enabled #确保服务会开机自动启动
service.disabled #确保服务不会开机自启动
service.dead #确保服务当前没有运行例子:
- on minion,
service mysqld stop
execute state
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[root@Automation salt]# cat mysql.sls
mysql running:
service.running:
- name: mysqld
[root@Automation salt]# salt '*' state.apply mysql
192.168.244.130:
----------
service_|-mysql running_|-mysqld_|-running:
----------
__run_num__:
0
changes:
----------
mysqld:
True
comment:
Started Service mysqld
duration:
1189.538
name:
mysqld
result:
True
start_time:
21:20:29.182736mysql start
- on minion,