通过上边的笔记《SaltStack配置管理学习笔记-LAMP自动化部署简单案例》,学习了如果借助于Saltstack的强大功能批量部署lamp环境,当然这里也可以用于其他环境的批量部署。今天的笔记出来记录下状态之间的关系,比如我们配置文件的时候,设计到一个依赖包依赖关系。我们知道,如果安装一个包,其依赖如果没有安装,那么会安装失败。 另外我们的配置文件发生变动的时候,需要对应的一些minion服务器也要对应做出变化,今天的这个笔记应该可以解决上边的疑问。
好的, 先记录下处理状态之间关系用到的几个重要的方法:
require: 我依赖某个状态 (长用于包安装)
require_in: 我被某个状态所依赖
watch: 我关注某个状态 (长用于文件改动)
watch_in: 我被某个状态所依赖
下边我针对之前lamp安装的一个实际案例做改动测试。之前安装lamp的时候,我们显示定义了一个ID声明:lamp-pkg-install,一开始我们先进行了一些包安装,比如:
lamp-pkg-install: pkg.installed: - names: - httpd - php - php-cli - php-common - mysql - mysql-server - php-mysql
1,依赖包状态实现。为了学习require和require_in,我将apache和mysql-server拿出来,单独放到另外两个声明中,先记录下require和require_in的用法,lamp.sls改动后的内容如下:
lamp-pkg-install: pkg.installed: - names: - php - php-cli - php-common - mysql - php-mysql - php-pdo apache-service: pkg.installed: - name: httpd file.managed: - name: /etc/httpd/conf/httpd.conf - source: salt://files/httpd.conf - user: root - group: root - mode: 644 - require: - pkg: apache-service service.running: - name: httpd - enable: True - reload: True mysql-service: pkg.installed: - name: mysql-server - require_in: - file: mysql-service file.managed: - name: /etc/my.cnf - source: salt://files/my.cnf - user: root - group: root - mode: 644 service.running: - name: mysqld - enable: True
以apache-service这个ID声明为例,我将pkg.installed这个模块拿出来放到了apache-service声明中安装包,后边的file就加了一个方法项目require。意思是指,file这个操作的时候,文件改动需要依赖于pkg这个包安装完成,如果我这个包没有安装成功,那么后边的执行就会失败。
相反,mysql-service这个ID声明就是,包的安装那里加了一个require_in方法项目,意思是指我的执行状态被file所依赖,如果我执行不成功,后边的file操作就出问题。
注意依赖写法: 针对的模块下边我们进行连续项目书写,通过短横线”-“来标注,后边低一层直接写 -模块: ID声明。可以归纳为:
……上一级
– require:
– module: 声明ID
或者
……上一级
– require_in:
– module: 声明ID
2,文件关注状态改动实现。 上边说的,比如我们的配置文件需要做批量改动的时候,需要对应的客户端进行批量更新操作,这样可以减少人为操作,提升效率,同时减少人为故障。比如我们的配置文件发生改动的时候,需要进行批量更新。有些文件改动以后,还可能需要一些服务进行重载reload操作或一些重启操作才可以生效,那么watch和watch_in就可以完美实现了。
还是以刚才的lamp.sls为例,改动后的代码如下:
lamp-pkg-install: pkg.installed: - names: - php - php-cli - php-common - mysql - php-mysql - php-pdo apache-service: pkg.installed: - name: httpd file.managed: - name: /etc/httpd/conf/httpd.conf - source: salt://files/httpd.conf - user: root - group: root - mode: 644 - require: - pkg: apache-service service.running: - name: httpd - enable: True - reload: True - watch: - file: apache-service mysql-service: pkg.installed: - name: mysql-server - require_in: - file: mysql-service file.managed: - name: /etc/my.cnf - source: salt://files/my.cnf - user: root - group: root - mode: 644 - watch_in: - service: mysql-service service.running: - name: mysqld - enable: True
可以看到我加了一个watch和watch_in,我们以apache-service这个ID声明为例,service.running那里多了一个方法项目watch,意思是指我关注file这个模块,如果里边的配置文件发生了变化,我需要进行-reload重载操作(如果没有-reload参数,就是进行的restart重启操作) ; mysql这里设置一个了一个watch_in,意思是之我被service.这个组件所关注,如果我的状态发生了变化,service会进行重启操作。
其组件的写法和上述的require 和require_in 是一样的,都是连续项目下并后边指定了对应操作的组件以及ID声明。
现在我分别改动httpd.conf和my.cnf ,分别添加了注释#21yunweitest,执行state.highstate操作,我们改动上述结果以后可以看到如下执行结果:
---------- ID: apache-service Function: file.managed Name: /etc/httpd/conf/httpd.conf Result: True Comment: File /etc/httpd/conf/httpd.conf updated Started: 03:47:42.508502 Duration: 164.147 ms Changes: ---------- diff: --- +++ @@ -6,7 +6,7 @@ # <URL:http://httpd.apache.org/docs/2.2/mod/directives.html> # for a discussion of each configuration directive. # -#testtest +#21yunweiteset # Do NOT simply read the instructions in here without understanding # what they do. They're here only as hints or reminders. If you are unsure # consult the online docs. You have been warned. ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: Service reloaded Started: 03:47:42.709626 Duration: 643.341 ms Changes: ---------- httpd: True
由于我改动了httpd.conf文件,上述结果执行显示了客户端已经更新了客户端的httpd.conf文件,并对客户端的服务进行了reload操作生效。
---------- ID: mysql-service Function: file.managed Name: /etc/my.cnf Result: True Comment: File /etc/my.cnf updated Started: 03:47:43.359358 Duration: 151.835 ms Changes: ---------- diff: --- +++ @@ -4,7 +4,7 @@ user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 -#testtest +#21yunweitest [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid ---------- ID: mysql-service Function: service.running Name: mysqld Result: True Comment: Service restarted Started: 03:47:43.557556 Duration: 4327.916 ms Changes: ---------- mysqld:
可以看到,由于我修改了my.cnf,文件进行了更新 添加了#21yunweitest 并对mysqld进行了重启操作。
笔记到此结束。以后剩下的就是多练习多实践了。
转载请注明:西数超哥博客www.ysidc.top» [原创]Saltstack配置管理学习笔记:requisites处理状态之间关系
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top