仅当所有文件都有效时,才通过saltstack部署多个文件

时间:2017-03-28 10:17:24

标签: salt-stack

我们正在使用saltstack管理网站。这些站点在PHP-FPM上运行,我们有几个fpm池。每个池都在php-fpm.d/目录中配置了专用文件。

目前,我们有file.managed状态check_cmd: php-fpm -ty来检查配置是否有效。

fpm-conf:
  file.managed:
    - name: /etc/php-fpm.conf
    - source: salt://php/template/fpm.jinja
    - user: someuser
    - group: somegroup
    - mode: 644
    - template: jinja
    - check_cmd: /usr/sbin/php-fpm -ty
    - require:
      - pkg: php-package

fpm-pool-a:
  file.managed:
    - name: /etc/php-fpm.d/a.conf
    - source: salt://php/template/fpm-a.jinja
    - user: someuser
    - group: somegroup
    - file_mode: 644
    - template: jinja
    - require:
      - pkg: php-package
    - require_in:
      - file: fpm-conf

fpm-pool-b:
  file.managed:
    - name: /etc/php-fpm.d/b.conf
    - source: salt://php/template/fpm-b.jinja
    - user: someuser
    - group: somegroup
    - file_mode: 644
    - template: jinja
    - require:
      - pkg: php-package
    - require_in:
      - file: fpm-conf

它工作正常,直到错误地对池文件(例如,fpm-pool-a)。虽然fpm-conf状态阻止了对主fpm配置文件的更新,但a.conf已被错误配置污染。

有没有办法防止这种情况发生?在这种情况下似乎不能使用check_cmd

如何在更新前保证一系列文件都有效?

1 个答案:

答案 0 :(得分:0)

如果出现任何错误,一种解决方法是恢复原始池文件。 这是一个例子,如果这个状态开始变大,我建议开始使用jinja。

fpm-conf:
  file.managed:
    - name: /etc/php-fpm.conf
    - source: salt://php/template/fpm.jinja
    - user: someuser
    - group: somegroup
    - mode: 644
    - template: jinja
    - check_cmd: /usr/sbin/php-fpm -ty
    - require:
      - pkg: php-package

fpm-pool-a:
  file.managed:
    - name: /etc/php-fpm.d/a.conf
    - source: salt://php/template/fpm-a.jinja
    - user: someuser
    - group: somegroup
    - file_mode: 644
    - template: jinja
    - require:
      - pkg: php-package
    - require_in:
      - file: fpm-conf
    - backup: minion

fpm-pool-b:
  file.managed:
    - name: /etc/php-fpm.d/b.conf
    - source: salt://php/template/fpm-b.jinja
    - user: someuser
    - group: somegroup
    - file_mode: 644
    - template: jinja
    - require:
      - pkg: php-package
    - require_in:
      - file: fpm-conf
    - backup: minion

fpm-pool-a-recover:
  module.run:
    - name: file.restore_backup
    - path: /etc/php-fpm.d/a.conf
    - backup_id: 0
    - onfail:
      - file: fpm-conf

fpm-pool-a-recover:
  module.run:
    - name: file.restore_backup
    - path: /etc/php-fpm.d/b.conf
    - backup_id: 0
    - onfail:
      - file: fpm-conf

注意- backup: minion的补充,这会将文件本地备份到/ var / cache / salt / minion / file_backup /...

因此,如果主配置失败,fpm-pool-a-recover和fpm-pool-b-recover将触发并恢复原始文件的最新备份。