Saltstack_使用指南11_配置管理-状态之间依赖关系
1. 说明
下文的案例是根据上一篇文章进行的修改。因此请优先读取上一篇文章内容《Saltstack_10_配置管理-状态模块》
并且目录进行了变化,从 /srv/salt/lamp 变为了 /srv/salt/lamp2 。
另外:下文没有根据模块编写,而是根据服务进行编写的。其中数据库也是单独部署的。
2. 主机规划
salt 版本
1 [root@salt100 ~]# salt --version 2 salt 2018.3.3 (Oxygen) 3 [root@salt100 ~]# salt-minion --version 4 salt-minion 2018.3.3 (Oxygen)
状态模块文档
https://docs.saltstack.com/en/latest/ref/states/all/index.html
require 和 watch 文档
https://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html
include 和 extend 文档
https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html
注意事项
修改了master或者minion的配置文件,那么必须重启对应的服务。
3. 状态之间的依赖关系
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【正向依赖】
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
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 【反向依赖】
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
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 # 查看执行结果