Salt常用模块及示例
一:Saltstack和Ansible的使用区别:
Ansile的配置文件以yml结尾,在.yml已经指明需要操作的主机与动作。
Salt则更多以服务来进行区分,主要强调动作而不指定需要操作的主机。
在使用Salt时一般是将需要操作的动作写成.sls文件,对应的服务生成一个名字对应的目录,在目录下配置.sls文件和files目录,在files目录中存放.sls文件中需要的文件。
🌰🌰:安装并配置filebeat
[root@ns4jh] /srv/salt/filebeat$ ll #在salt的目录中查看filebaet
总用量 4
drwxr-xr-x 2 root root 84 6月 21 15:34 files
-rw-r--r-- 1 root root 432 4月 12 15:01 init.sls
[root@ns4jh] /srv/salt/filebeat$ cat init.sls #查看.sls文件
filebeat-package:
pkg.installed:
- sources:
- filebeat: salt://filebeat/files/filebeat-6.8.13-x86_64.rpm #filebeat的安装包
/etc/filebeat/filebeat.yml:
file.managed:
- source:salt://filebeat/files/filebeat.yml #filebeat的配置文
- user: root
- group: root
- mode: 600
- template: jinja
- require:
- pkg: filebeat-package
filebeat:
service.running:
- enable: True
- watch:
- file: /etc/filebeat/filebeat.yml
[root@ns4jh] /srv/salt/filebeat/files$ ll #.sls中需要的文件就存放在filebeat/files中
总用量 11652
-rw-r--r-- 1 root root 11904934 10月 22 2020 filebeat-6.8.13-x86_64.rpm
-rw------- 1 root root 12277 6月 21 15:34 filebeat.yml
~~大概流程清楚了就继续了解Saltstack常用的模块吧~~~
二.Salt常用模块
1. 状态模块:pkg
功能:管理软件包状态
官方文档:https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.pkg.html
常用方法:
pkg.installed #安装软件包
pkg.latest #确保软件包是最新版本,不是的话就升级
pkg.remove #如果之前安装了软件包就卸载
pkg.purge #卸载软件包并删除配置文件
示例:
filebeat-package:
pkg.installed:
- sources:
- filebeat: salt://filebeat/files/filebeat-6.8.13-x86_64.rpm
2.状态模块:file
功能:管理文件状态
官方文档:https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.file.html
常用方法:
file.managed #保证文件存在并且内容一致
file.recurse #保证目录存在并且为对应状态
file.absent #如果文件存在就进行删除
3.状态模块:service
功能:管理服务状态
官方文档:https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.service.html
常用方法:
service.running #确保服务处于运行状态,没有运行的话则启动
service.enabled #让服务开机自动启动
service.disabled #让服务开机不要自动启动
service.dead #确保服务处于停止状态,服务在运行的话则停止
4.状态模块:requisites
功能:处理状态间关系
常用方法:
require #我依赖某个状态,比如安装软件时依赖某个软件包
require_in #我被某个状态依赖
watch #我关注某个状态
watch_in #我被某状态关注
二. sls文件书写技巧
一般写sls文件可以按照pkg、file、service这样的模块顺序来写。鉴于我们平时操作也是先安装软件包,再写配置文件,最后启动服务。
举一个🌰:
filebeat-package: #安装包
pkg.installed:
- sources:
- filebeat: salt://filebeat/files/filebeat-6.8.13-x86_64.rpm
/etc/filebeat/filebeat.yml:
file.managed: #配置文件
- source: salt://filebeat/files/filebeat.yml
- user: root
- group: root
- mode: 600
- template: jinja
- require: #依赖于xxx,也可以理解为前提 配置文件的前提是已经安装该服务
- pkg: filebeat-package
filebeat:
service.running: #启动服务
- enable: True
- watch: #监视配置文件,可以理解为当配置文件发生改变时重启服务
- file: /etc/filebeat/filebeat.yml
补充:
apache-config: #状态id1
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://web/files/httpd.conf
- user: root
- group: root
- mode: 644
- require:
- pkg: lamp-install
apache-conf: #状态id2
file.recurse:
- name: /etc/httpd/conf.d
- source: salt://web/files/apache-conf.d
- watch_in:
- service: lamp-service lamp-service:
service.running:
- name: httpd
- enable: True
- reload: True #如果加上reload: True 代表文件发生变化的时候,服务会重载,但是需要该服务支持重载才能有
- watch: #通过watch来监听状态id1和状态2的状态,如果他两有任何一个文件或目录发生变化,那么,重启httpd服务
- file: apache-config
- file: apache-conf
注:reload: True 这个需要服务支持重新加载,才能用该选项。