文章目录
1. include
以解耦的方式写了多个sls文件以后,可以用include模块来搭配sls状态文件,include模块通常放在文件顶部。
//语法
include:
- file.sls #sls文件路径,可以包含多个
- file.sls
...
//例如
include:
- modules.web.nginx.install
- modules.database.mysql.install
2. extend
扩展某个SLS的状态
//语法
extend:
id: //指定需要扩展的id
module: //指定扩展使用的模块
- name: //参数
//例如
extend:
nginx-install:
pkg.installed:
- name: openssl
3. require与require_in
require:需要。依赖某个状态
require_in:被需要。被某个状态需要
如果所依赖的id没有执行成功,则require所在的id不会执行
//语法
- require:
- module: id
//例如
nginx:
service.running:
- enable:True
- require:
- file: /etc/nginx/nginx.conf #表示nginx启动依赖这个配置文件
4. watch与watch_in
watch:监控某个状态
watch_in:被某个状态监控
//语法
- watch:
- module:id
//例如
nginx-service:
service.running:
- reload: True
- watch: #表示监控id为/usr/local/nginx/conf/nginx.conf的file模块
- file: /usr/local/nginx/conf/nginx.conf
5. unless
条件判断,如果判断条件成立则不执行所在id的指令,判断条件不成立则执行,常用于cmd模块下使用,因为cmd模块执行是不具有幂等性的,为了防止状态执行多遍,unless判断就非常有必要。
//语法
- unless: test ...
//例如
salt://modules/web/nginx/files/nginx_install.sh:
cmd.script:
- unless: test -d /usr/local/nginx #表示如果这个目录存在则不行以上指令
6. template
定义变量
salt-minion-conf:
file.managed:
- name: /etc/salt/minion
- source: salt://files/minion
- user: root
- group: root
- mode: 644
- template: jinja #使用jinjia模板
- default: #定义默认值
ID: {{ grains['ipv4'] [1] }}
- require:
- pkg: salt-minion-install
参考官方文档
https://docs.saltproject.io/en/latest/ref/states/requisites.html#require