通过上边的笔记《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











