我刚刚开始将 SaltStack 部署到我的服务器。因此,我有以下文件/srv/salt/postfix/init.sls
:
# Ensure postfix installed and set to autostart on boot
postfix:
pkg.installed: []
service.running:
- require:
- pkg: postfix
- enable: True
# Restart on change to main.cf or any of the *.db files
postfix.restart:
service.running:
- require:
- pkg: postfix
- name: postfix
- watch:
- file: "/etc/postfix/main.cf"
- file: "/etc/postfix/*.db"
# Without this, first watch above fails
/etc/postfix/main.cf:
file.exists: []
/etc/postfix/canonical:
file.managed:
- require:
- pkg: postfix
- source: salt://postfix/canonical
- template: jinja
/etc/postfix/canonical.db:
cmd.wait:
- name: /usr/sbin/postmap /etc/postfix/canonical
- watch:
- file: /etc/postfix/canonical
基本上,我希望每当/etc/postfix/canonical.db
文件发生改变时重新启动 Postfix。
但是每当我运行这个状态时,我总是会收到一个状态错误postfix.restart
:
ID: postfix.restart
Function: service.running
Name: postfix
Result: False
Comment: The following requisites were not found:
watch:
file: /etc/postfix/*.db
Started:
Duration:
Changes:
其他州运行正常。
我是 SaltStack 的初学者,所以请帮助我找出我错在哪里...以及我是否真的写出了“正确的” SaltStack 公式。
谢谢你!
PS:salt --version
返回salt 2015.5.0 (Lithium)
,我在Ubuntu上。
PPS:从 更改*.db
为canonical.db
不会改变结果:该watch:
要求仍然错误。
PPPS:我最初将该cmd.wait
节放在作业下/etc/postfix/canonical
,然后将其分离到不同的作业中,因为我认为错误是由于watch:
找不到作业造成的。
更新:结语
我放弃了原来的策略,而采用了基于的策略GNU make
。
参考:http://www.unixwiz.net/techtips/postfix-makefiles.html
现在init.sls
看起来像这样:
postfix:
pkg.installed: []
service.running:
- require:
- pkg: postfix
- enable: True
make:
pkg.installed: []
/etc/postfix/Makefile:
file.managed:
- require:
- pkg: postfix
- pkg: make
- source: salt://postfix/Makefile
refresh_db:
cmd.run:
- require:
- pkg: postfix
- pkg: make
- name: make
- cwd: /etc/postfix
- order: last ## IMPORTANT! This will force this particular job to run at the very last
/etc/postfix/canonical:
file.managed:
- require:
- pkg: postfix
- source: salt://postfix/canonical
- template: jinja
感谢您尝试回答我的问题!
答案1
必要watch: file:
条件并不是指文件系统上的文件更改,而是指执行过程中定义的状态的更改。
在这种情况下,你必须注意state
:
- watch:
- cmd: "/etc/postfix/canonical.db"
如果你想对文件的外部更改做出反应*.db
,你必须使用另一种方式。你可以看看 Reactor 系统:https://docs.saltstack.com/en/latest/topics/reactor/index.html。我对此了解不多,但我认为它可以用于对文件系统变化做出反应。