이 모듈을 사용하여 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'