我们正在使用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
。
如何在更新前保证一系列文件都有效?
答案 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将触发并恢复原始文件的最新备份。