3、saltstack学习-状态管理
1、状态管理-salt安装apache
1.1 编辑主配置文件,定义几个环境。
vim /etc/salt/masterfile_roots: base: - /srv/salt/base dev: - /srv/salt/dev test: - /srv/salt/test prod: - /srv/salt/prod
1.2 然后创建相应目录,重启salt
mkdir -p /srv/salt/{base,dev,test,prod} systemctl restart salt-master.service1.3 创建文件
cd /srv/salt/base/ vim apache.sls 说明,第一部分ID:apache-install第1行是声明,第2行pkg是状态模块,installed是方法。 第3行,name是个特殊参数,说明这台机器应该有一个httpd,如果没有安装,如果有什么也不做。 第二部分ID:
apache-service,是服务状态管理。
同理,需要有一个httpd的服务要启动,如果启动什么也不做,没启动就启动,默认为True
apache-install: pkg.installed: - name: httpd apache-service: service.running: - name: httpd - enable: True在master上向node2上执行下边的命令,state是执行模块,sls是方法。apache是传的参数。会在base下找apache.sls文件。必须省略.sls
salt '*node2*' state.sls apache
执行后看返回结果:上边是安装,下边是启动。看change那行,改变了几个地方,可以判断执行了几个ID。
linux-node2.example.com: ---------- ID: apache-install Function: pkg.installed Name: httpd Result: True Comment: The following packages were installed/updated: httpd Started: 09:46:59.759738 Duration: 9266.372 ms Changes: ---------- apr: ---------- new: 1.4.8-7.el7 old: apr-util: ---------- new: 1.5.2-6.el7 old: httpd: ---------- new: 2.4.6-97.el7.centos old: httpd-tools: ---------- new: 2.4.6-97.el7.centos old: mailcap: ---------- new: 2.1.41-2.el7 old: ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: Service httpd has been enabled, and is running Started: 09:47:09.032003 Duration: 189.507 ms Changes: ---------- httpd: True Summary for linux-node2.example.com ------------ Succeeded: 2 (changed=2) Failed: 0 ------------ Total states run: 2 Total run time: 9.456 s
这时可以到node2上去验证了,如果手动在node2上停止httpd,再在master上执行 salt 'linux-node2*' state.sls apache可以看到只改变了一个,会把服务启动起来。
多层配置目录:
可以在base下创建多个目录,然后把相应的状态文件到到相应的目录里。
[root@linux-node1 base]# pwd /srv/salt/base [root@linux-node1 base]# mkdir web [root@linux-node1 base]# mv apache.sls web/ [root@linux-node1 base]# salt "linux-node2*" state.sls web.apache
2、高级状态管理
从base环境的目录下去找top.sls文件,按这个文件写的内容去告诉哪个minion执行哪个状态。
2.1 编排top.sls:
master文件里默认文件就是base下的top.sls,不需要修改,就直接用这个文件。
vim /srv/salt/base/top.sls
base: 'master-2': - web.apache 'master-3': - web.apache
执行:
salt '*' state.highstate
3、利用高级状态管理yum安装lamp(实验未安装mysql)
3.1 编写状态文件
cd /srv/salt/base/web
vim lamp.sls
lamp-install: # 安装 pkg.installed: - pkgs: - httpd - php - php-pdo - php-mysql #配置 apache-config: file.managed: # 文件管理 - name: /etc/httpd/conf/httpd.conf - source: salt://web/httpd.conf #这是个相对目录,相当于base目录下的web - user: root - group: root - mode: 644 php-config: file.managed: - name: /etc/php.ini - source: salt://web/php.ini - user: root - group: root - mode: 644 lamp-service: service.running: - name: httpd - enable: True
修改top.sls文件,指定在哪个机器安装
[root@master-1 web]# vim /srv/salt/base/top.sls
base: 'master-2': - web.lamp 'master-3': - web.lamp
以后要修改配置文件也可以直接修改salt主机的文件,然后再执行一下就可以了
先要找一个机器安装完,把两个配置文件放到/srv/salt/base/web/下边,需要用这个文件去覆盖目标服务器。
salt '*' state.highstate
# 下边这个是之前的写法,也可以直接指定所有机器去执行lamp.sls,但没有top.sls调用灵活。
##salt '*' state.sls web.lamp
3.2 管理目录
修改lamp.sls
lamp-install: # 安装 pkg.installed: - pkgs: - httpd - php - php-pdo - php-mysql #配置 apache-config: file.managed: # 文件管理 - name: /etc/httpd/conf/httpd.conf - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web - user: root - group: root - mode: 644 apache-conf: file.recurse: - name: /etc/httpd/conf.d - source: salt://web/files/apache-conf.d php-config: file.managed: - name: /etc/php.ini - source: salt://web/files/php.ini - user: root - group: root - mode: 644 lamp-service: service.running: - name: httpd - enable: True
根据修改将原来的配置文件也都移到files目录里
cd /srv/salt/base/web
mv httpd.conf php.ini files/
然后创建新目录管理配置段的目录,和文件。
cd /srv/salt/base/web/files
mkdir apache-conf.d
cp -a /etc/httpd/conf.d/* apache-conf.d/
先找一个节点测试一下
salt 'master-2' state.highstate test=True
然后确认没问题后所有节点执行
salt '*' state.highstate
4、追加
[root@master-1 web]# vim append.sls /etc/profile: file.append: - text: - "# append"
salt "*" state.sls web.append
5、watche 关注 如果文件有修改,服务就重启或重载,如果配置文件有reload就重载,没有就重启。
[root@master-1 web]# vim lamp.sls lamp-install: # 安装 pkg.installed: - pkgs: - httpd - php - php-pdo - php-mysql #配置 apache-config: file.managed: # 文件管理 - name: /etc/httpd/conf/httpd.conf - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web - user: root - group: root - mode: 644 apache-conf: file.recurse: - name: /etc/httpd/conf.d - source: salt://web/files/apache-conf.d php-config: file.managed: - name: /etc/php.ini - source: salt://web/files/php.ini - user: root - group: root - mode: 644 lamp-service: service.running: - name: httpd - enable: True - reload: True - watch: # 只要下边的配置文件有变更,就重载服务 - file: apache-conf #监控的状态模块,后边是状态ID - file: apache-config
然后修改一下配置文件,试一下
[root@master-1 web]# salt "*" state.highstate
6、依赖某个状态,require:就是某个状态执行不成功,我就不执行。
例如安装软件如果都执行不成功,那么下边的修改配置文件就不要执行了。
[root@master-1 web]# vim lamp.sls lamp-install: # 安装 pkg.installed: - pkgs: - httpd - php - php-pdo - php-mysql #配置 apache-config: file.managed: # 文件管理 - name: /etc/httpd/conf/httpd.conf - source: salt://web/files/httpd.conf #这是个相对目录,相当于base目录下的web - user: root - group: root - mode: 644 - require: #依赖某个状态 - pkg: lamp-install apache-conf: file.recurse: - name: /etc/httpd/conf.d - source: salt://web/files/apache-conf.d php-config: file.managed: - name: /etc/php.ini - source: salt://web/files/php.ini - user: root - group: root - mode: 644 lamp-service: service.running: - name: httpd - enable: True - reload: True - watch: # 关注某个状态,只要下边的配置文件有变更,就重载服务 - file: apache-conf #监控的状态模块,后边是状态ID - file: apache-config