官方网站:salt requisite系统是用来创建状态文件的关系。提供一个简单的方法定义状态文件之间的依赖性。
使用state文件的name或id属性指定代表的关系,requisite的整体格式是 <state name>:<names or ids>
通用示例:软件在确认运行时,需要优先安装软件。如下:
nginx: pkg.installed: - name: nginx-light service.running: - enable: True - require: - pkg: nginx
如果没有使用requisite,salt会尝试安装nginx,而后运行nginx,无论是否安装成功。
由上面介绍了整体格式<state name>: <names or ids>,就了解了有2个必须条件:
1. state module name
2. state 文件的id或name参数
可以省略state module,但是会匹配所有id或name参数的。建议加入state module。
requisite所有的类型(所有类型都有另一种表示require_in或require-in,是一种被监控的语义):
1.require 执行前要匹配成功
2.onchanges:目标改变就执行
3.watch:与onchanges类似
4.listen:与onchanges类似
5.prereq :目标state改变,则执行
6.onfail:目标失败,才会执行
7.use:从另一个state复制参数
还有额外的附加类型:
require_any
watch_any
onchanges_any
onfail_any
1.require,建立一种关联 只有所需的state都执行成功才会执行当前state,如下示例:只有两个file都成功执行后才会启动服务
nginx: service.running: - require: - file: /etc/nginx/nginx.conf - file: /etc/nginx/conf.d/ssl.conf
require可以+sls文件
include: - foobar: pkg.installed: - require: - sls: foo
2.onchanges,若state文件发生改变且返回True,就会执行。
myservice: file.managed: - name: /etc/myservice/myservice.conf - source: salt://myservice/files/myservice.conf cmd.run: - name: /usr/local/sbin/run-build - onchanges: - file: /etc/myservice/myservice.conf
3.watch,增加一个附加条件来监控状态是否发生改变。watch常用语service.running
ntpd: service.running: - watch: - file: /etc/ntp.conf file.managed: - name: /etc/ntp.conf - source: salt://ntp/files/ntp.conf
或者平滑启动,常用
nginx: service.running: - reload: True - watch: - file: nginx file.managed: - name: /etc/nginx/conf.d/tls-settings.conf - source: salt://nginx/files/tls-settings.conf
4.listen
restart-apache2: service.running: - name: apache2 - listen: - file: /etc/apache2/apache2.confconfigure-apache2: file.managed: - name: /etc/apache2/apache2.conf - source: salt://apache2/apache2.conf
5.prereq
graceful-down: cmd.run: - name: service apache graceful - prereq: - file: site-codesite-code: file.recurse: - name: /opt/site_code - source: salt://site/code
6.onfail
primary_mount: mount.mounted: - name: /mnt/share - device: 10.0.0.45:/share - fstype: nfsbackup_mount: mount.mounted: - name: /mnt/share - device: 192.168.40.34:/share - fstype: nfs - onfail: - mount: primary_mount
7.use
/etc/foo.conf: file.managed: - source: salt://foo.conf - template: jinja - mkdirs: True - user: apache - group: apache - mode: 755/etc/bar.conf: file.managed: - source: salt://bar.conf - use: - file: /etc/foo.conf
示例:
install-man: pkg.installed: {% if grains['id'] == '136' %} - pkgs: - man - lrzsz {% endif %} service-running: service.running: - name: crond - enable: Ture - init_delay: 10 - require: - pkg: install-man - watch: - file: /tmp/bb.log /tmp/bb.log: file.managed: - source: - salt://files/test.j2 - salt://files/hosts1 # - name: /tmp/aa.log - user: root - group: root - mode: 644 # - template: jinja