SaltStack: Requisito não encontrado para relógio

1

Estou apenas começando a implantar o SaltStack nos meus servidores. Então, eu tenho o seguinte arquivo /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

Basicamente, quero reiniciar o Postfix sempre que o arquivo /etc/postfix/canonical.db for alterado.

Mas sempre que executo esse estado, sempre recebo um erro para o estado 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:

Outros estados são executados perfeitamente.

Eu sou um novato w.r.t. SaltStack, então, por favor, me ajude a descobrir onde eu errei ... e se eu realmente escrevi uma fórmula 'apropriada' SaltStack.

Obrigado!

PS: salt --version retorna salt 2015.5.0 (Lithium) e eu estou no Ubuntu.

PPS: Alterar de *.db para canonical.db não altera o resultado: ainda há erro no requisito watch: .

PPPS: eu originalmente coloquei a sub-rotina cmd.wait sob o trabalho /etc/postfix/canonical e a separei em um trabalho diferente porque achei que o erro era devido a watch: não encontrar o trabalho.

ATUALIZAÇÃO: EPÍLOGO

Eu desisti da estratégia original e usei uma estratégia baseada em GNU make .

Referência: link

Então o init.sls agora é assim:

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

Obrigado por tentar responder à minha pergunta!

    
por pepoluan 25.06.2015 / 08:25

1 resposta

3

O requisito watch: file: não se refere a uma alteração de arquivo no sistema de arquivos, mas a uma mudança nos estados definidos durante a execução.

Nesse caso, você precisa assistir ao state :

- watch:
  - cmd: "/etc/postfix/canonical.db"

Se você quiser reagir em uma alteração externa nos arquivos *.db , você deve usar outra maneira. Você pode dar uma olhada no sistema do Reactor: link . Eu não sei muito sobre isso, mas acho que ele pode ser usado para reagir a mudanças no sistema de arquivos.

    
por 25.06.2015 / 11:44

Tags