Я только начинаю развертывать 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
По сути, я хочу перезапустить Postfix всякий раз, когда /etc/postfix/canonical.db
файл изменяется.
Но всякий раз, когда я запускаю это состояние, я всегда получаю сообщение об ошибке 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
Спасибо, что попытались ответить на мой вопрос!
В watch: file:
Requisite относится не к изменению файла в файловой системе, а к изменению определенных вами состояний во время их выполнения.
В этом случае необходимо следить за state
:
- watch:
- cmd: "/etc/postfix/canonical.db"
Если вы хотите отреагировать на внешнее изменение *.db
файлы, вы должны использовать другой способ. Вы можете взглянуть на систему Reactor: https://docs.saltstack.com/en/latest/topics/reactor/index.html. Я мало знаю об этом, но думаю, что его можно использовать для реагирования на изменения файловой системы.