Назад | Перейти на главную страницу

SaltStack: Реквизит для часов не найден

Я только начинаю развертывать 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. Я мало знаю об этом, но думаю, что его можно использовать для реагирования на изменения файловой системы.