このモジュールを使用してansible.builtin.lineinfile
PHP-FPMプール設定ファイルを変更します。正規表現パラメータの変数値に角かっこ(コメント:または他の特殊文字)をどのように引用すべきですか?
引用符がない場合、角かっこは一致する文字のリストである角かっこ式として解釈されます。 Ansibleがない場合は、sedを使用してバックスラッシュを追加します。
次の例は、Debian のデフォルトプール conf ファイルの例です。
- name: Change PHP-FPM pool parameters
become: true
ansible.builtin.lineinfile:
path: "/etc/php/{{ php_fpm_version }}/fpm/pool.d/www.conf"
regexp: "^;?{{ item.para }} ="
line: '{{ item.para }} = {{ item.value }}'
loop: "{{ php_fpm_pool_parameters }}"
vars:
php_fpm_pool_parameters:
- para: 'pm.max_spare_servers'
value: '7'
- para: 'pm.max_requests'
value: '500'
- para: 'env[PATH]'
value: '/usr/bin:/bin'
- para: 'php_admin_value[memory_limit]'
value: '4096M'
- para: 'php_admin_value[max_input_time]'
value: '600'
答え1
文字通り解釈されるように、文字列から正規表現特殊文字をエスケープする必要があります。ちなみに、エスケープは外部と変わりません(つまり、エスケープ文字を追加します\
)。
幸いなことにregex_escape
フィルターそれがまさにその目的です。
次の(テストされていない)はあなたのニーズに合うべきです。注:セキュリティを強化するために、シンボルの前にあるスペースをオプション=
としてマークし、行全体と一致するように正規表現を拡張しました。
- name: Change PHP-FPM pool parameters
become: true
ansible.builtin.lineinfile:
path: "/etc/php/{{ php_fpm_version }}/fpm/pool.d/www.conf"
regexp: "^;?{{ item.para | regex_escape }} ?=.*$"
line: '{{ item.para }} = {{ item.value }}'
loop: "{{ php_fpm_pool_parameters }}"
vars:
php_fpm_pool_parameters:
- para: 'pm.max_spare_servers'
value: '7'
- para: 'pm.max_requests'
value: '500'
- para: 'env[PATH]'
value: '/usr/bin:/bin'
- para: 'php_admin_value[memory_limit]'
value: '4096M'
- para: 'php_admin_value[max_input_time]'
value: '600'