regexpパラメータのAnsible変数の値から角括弧を引用する方法は?

regexpパラメータのAnsible変数の値から角括弧を引用する方法は?

このモジュールを使用してansible.builtin.lineinfilePHP-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'

関連情報