以解耦的方式写了多个sls文件以后,可以用include模块来搭配sls状态文件,include模块通常放在文件顶部。
//语法 include: - file.sls #sls文件路径,可以包含多个 - file.sls ... //例如 include: - modules.web.nginx.install - modules.database.mysql.install
扩展某个SLS的状态
//语法 extend: id: //指定需要扩展的id module: //指定扩展使用的模块 - name: //参数 //例如 extend: nginx-install: pkg.installed: - name: openssl
require:需要。依赖某个状态
require_in:被需要。被某个状态需要
如果所依赖的id没有执行成功,则require所在的id不会执行
//语法 - require: - module: id //例如 nginx: service.running: - enable:True - require: - file: /etc/nginx/nginx.conf #表示nginx启动依赖这个配置文件
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
条件判断,如果判断条件成立则不执行所在id的指令,判断条件不成立则执行,常用于cmd模块下使用,因为cmd模块执行是不具有幂等性的,为了防止状态执行多遍,unless判断就非常有必要。
//语法 - unless: test ... //例如 salt://modules/web/nginx/files/nginx_install.sh: cmd.script: - unless: test -d /usr/local/nginx #表示如果这个目录存在则不行以上指令
定义变量
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