SaltStack:未找到监视所需的条件

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

基本上,我希望每当/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:从 更改*.dbcanonical.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。我对此了解不多,但我认为它可以用于对文件系统变化做出反应。

相关内容