1. 说明
下文的案例是根据上一篇文章进行的修改。因此请优先读取上一篇文章内容《Saltstack_10_配置管理-状态模块》
并且目录进行了变化,从 /srv/salt/lamp 变为了 /srv/salt/lamp2 。
另外:下文没有根据模块编写,而是根据服务进行编写的。其中数据库也是单独部署的。
2. 主机规划
salt 版本
代码语言:javascript复制1 [root@salt100 ~]# salt --version
2 salt 2018.3.3 (Oxygen)
3 [root@salt100 ~]# salt-minion --version
4 salt-minion 2018.3.3 (Oxygen)
状态模块文档
代码语言:javascript复制https://docs.saltstack.com/en/latest/ref/states/all/index.html
require 和 watch 文档
代码语言:javascript复制https://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html
include 和 extend 文档
代码语言:javascript复制https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html
注意事项
修改了master或者minion的配置文件,那么必须重启对应的服务。
3. 状态之间的依赖关系
代码语言:javascript复制 1 状态间关系:
2 1、我依赖谁 require
3 2、谁依赖我【我被谁依赖】 require_in
4
5 3、我监控谁 watch # 例如:如果配置文件有修改,那么会重载、重启服务
6 4、谁监控我【我被谁监控】 watch_in # 如果配置文件有修改,那么会重载、重启服务
7
8 5、我引用谁 include
9 6、我扩展谁 extend
10
11 如何编写SLS技巧:
12 1、按状态分类 如果单独使用,很清晰
13 2、按服务分类 可以被其他的SLS include。例如:LNMP include mysql 的服务 【生产优先使用】
4. 依赖关系案例
4.1. 部署架构
4.2. Apache和PHP的SLS【正向依赖】
代码语言:javascript复制 1 [root@salt100 lamp2]# pwd # 所在目录
2 /srv/salt/lamp2
3 [root@salt100 lamp2]# ll
4 total 16
5 -rw-r--r-- 1 root root 599 Dec 31 15:27 apache.sls
6 drwxr-xr-x 2 root root 53 Dec 31 15:50 file
7 -rw-r--r-- 1 root root 41 Dec 31 15:49 init.sls
8 -rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls # 单独使用
9 -rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
10 [root@salt100 lamp2]# ll file/ # 涉及的配置文件
11 total 80
12 -rw-r--r-- 1 root root 11786 Dec 31 15:50 httpd.conf
13 -rw-r--r-- 1 root root 671 Dec 31 15:43 my.cnf
14 -rw-r--r-- 1 root root 64945 Oct 31 03:33 php.ini
15 [root@salt100 lamp2]# cat init.sls
16 include: # 我包含谁
17 - lamp2.apache
18 - lamp2.php
19
20 [root@salt100 lamp2]# cat apache.sls
21 apache-service:
22 pkg.installed:
23 - name: httpd
24
25 file.managed:
26 - name: /etc/httpd/conf/httpd.conf
27 - source: salt://lamp2/file/httpd.conf
28 - user: root
29 - gourp: root
30 - mode: 644
31 - backup: minion
32 - require: # 我依赖谁
33 - pkg: apache-service # 依赖 apache-service 中 pkg 的安装包
34
35 service.running:
36 - name: httpd
37 - enable: True
38 - reload: True
39 - require: # 我依赖谁
40 - pkg: apache-service
41 - watch: # 我监控谁
42 # 一旦发生变化,就重加载服务
43 - file: apache-service # 监控 apache-service 中 file 的文件
44
45 [root@salt100 lamp2]# cat php.sls
46 php-service:
47 pkg.installed:
48 - name: php
49 - name: php-devel
50 - name: mariadb
51 - name: php-mysql
52 - name: php-cli
53 - name: php-mbstring
54
55 file.managed:
56 - name: /etc/php.ini
57 - source: salt://lamp2/file/php.ini
58 - user: root
59 - group: root
60 - mode: 644
61 - backup: minion
62 - require: # 我依赖谁
63 - pkg: php-service
4.2.1. 执行SLS
代码语言:javascript复制 1 [root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True # 测试是否可行 【查看返回信息】
2 [root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init # 查看执行结果
3 [root@salt100 lamp2]# salt 'salt0*' test.ping # 将进行批量执行----查看目标选择是否正确
4 salt01:
5 True
6 salt02:
7 True
8 salt03:
9 True
10 [root@salt100 lamp2]# salt 'salt0*' state.sls lamp2.init # 批量执行【并查看执行结果】
4.3. mariadb 的 SLS 【反向依赖】
代码语言:javascript复制 1 [root@salt100 lamp2]# pwd # 所在目录
2 /srv/salt/lamp2
3 [root@salt100 lamp2]# ll
4 total 16
5 -rw-r--r-- 1 root root 599 Dec 31 15:27 apache.sls
6 drwxr-xr-x 2 root root 53 Dec 31 15:50 file
7 -rw-r--r-- 1 root root 41 Dec 31 15:49 init.sls
8 -rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls # 单独使用
9 -rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
10 [root@salt100 lamp2]# ll file/ # 涉及的配置文件
11 total 80
12 -rw-r--r-- 1 root root 11786 Dec 31 15:50 httpd.conf
13 -rw-r--r-- 1 root root 671 Dec 31 15:43 my.cnf
14 -rw-r--r-- 1 root root 64945 Oct 31 03:33 php.ini
15 [root@salt100 lamp2]# cat mariadb.sls
16 mariadb-service:
17 pkg.installed:
18 - name: mariadb
19 - name: mariadb-server
20 - require_in: # 谁依赖我「我被谁依赖」
21 - file: mariadb-service
22 - watch_in: # 谁监控我「我被谁监控」
23 - service: mariadb-service
24
25 file.managed:
26 - name: /etc/my.cnf
27 - source: salt://lamp2/file/my.cnf
28 - user: root
29 - group: root
30 - mode: 644
31 - backup: minion
32 - watch_in: # 谁监控我「我被谁监控」
33 - service: mariadb-service
34
35 service.running:
36 - name: mariadb.service
37 - enable: True
38 - restart: True
4.3.1. 执行SLS
代码语言:javascript复制1 [root@salt100 lamp2]# salt 'salt100' state.sls lamp2.mariadb test=True # 测试是否可行 【查看返回信息】
2 [root@salt100 lamp2]# [root@salt100 lamp2]# salt 'salt100' state.sls lamp2.mariadb # 查看执行结果