mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
[PR #8075/4363f876 backport][stable-8] ini_file - support optional spaces around section names (#8135)
ini_file - support optional spaces around section names (#8075)
* ini_file - support optional spaces between section names and their surrounding brackets
Some ini files have spaces between some of their section names and the
brackets that enclose them. This is documented in the 'openssl.cnf(5)' man
page. In order to manage files such as /etc/ssl/openssl.cnf with ini_file
before now, one would have to include spaces in the section name like this:
section: ' crypto_policy '
option: Options
value: UnsafeLegacyRenegotiation
This change implements matching section headers with such optional spaces.
Existing tasks using the workaround above will continue to work, even in
cases where spaces in section headers are subsequently removed.
* readability improvement in the test content expressions
---------
Co-authored-by: Todd Lewis <todd_lewis@unc.edu>
(cherry picked from commit 4363f8764b
)
Co-authored-by: Todd Lewis <utoddl@gmail.com>
This commit is contained in:
parent
c494fe5824
commit
7b66573df0
4 changed files with 111 additions and 1 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- "ini_file - support optional spaces between section names and their surrounding brackets (https://github.com/ansible-collections/community.general/pull/8075)."
|
|
@ -304,9 +304,11 @@ def do_ini(module, filename, section=None, option=None, values=None,
|
||||||
before = after = []
|
before = after = []
|
||||||
section_lines = []
|
section_lines = []
|
||||||
|
|
||||||
|
section_pattern = re.compile(to_text(r'^\[\s*%s\s*]' % re.escape(section.strip())))
|
||||||
|
|
||||||
for index, line in enumerate(ini_lines):
|
for index, line in enumerate(ini_lines):
|
||||||
# find start and end of section
|
# find start and end of section
|
||||||
if line.startswith(u'[%s]' % section):
|
if section_pattern.match(line):
|
||||||
within_section = True
|
within_section = True
|
||||||
section_start = index
|
section_start = index
|
||||||
elif line.startswith(u'['):
|
elif line.startswith(u'['):
|
||||||
|
|
|
@ -47,3 +47,6 @@
|
||||||
|
|
||||||
- name: include tasks to test modify_inactive_option
|
- name: include tasks to test modify_inactive_option
|
||||||
include_tasks: tests/06-modify_inactive_option.yml
|
include_tasks: tests/06-modify_inactive_option.yml
|
||||||
|
|
||||||
|
- name: include tasks to test optional spaces in section headings
|
||||||
|
include_tasks: tests/07-section_name_spaces.yml
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
## testing support for optional spaces between brackets and section names
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 1 (does legacy workaround still work) - create test file
|
||||||
|
ansible.builtin.copy: # noqa risky-file-permissions
|
||||||
|
dest: "{{ output_file }}"
|
||||||
|
content: |
|
||||||
|
[ foo ]
|
||||||
|
; bar=baz
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 1 - update with optional spaces specified
|
||||||
|
community.general.ini_file: # noqa risky-file-permissions
|
||||||
|
path: "{{ output_file }}"
|
||||||
|
section: ' foo '
|
||||||
|
option: bar
|
||||||
|
value: frelt
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 1 - read content from output file
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "{{ output_file }}"
|
||||||
|
register: output_content
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 1 - verify results
|
||||||
|
vars:
|
||||||
|
actual_content: "{{ output_content.content | b64decode }}"
|
||||||
|
expected_content: |
|
||||||
|
[ foo ]
|
||||||
|
bar = frelt
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- actual_content == expected_content
|
||||||
|
- result is changed
|
||||||
|
- result.msg == 'option changed'
|
||||||
|
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 2 (optional spaces omitted) - create test file
|
||||||
|
ansible.builtin.copy: # noqa risky-file-permissions
|
||||||
|
dest: "{{ output_file }}"
|
||||||
|
content: |
|
||||||
|
[ foo ]
|
||||||
|
bar=baz"
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 2 - update without optional spaces
|
||||||
|
community.general.ini_file: # noqa risky-file-permissions
|
||||||
|
path: "{{ output_file }}"
|
||||||
|
section: foo
|
||||||
|
option: bar
|
||||||
|
value: frelt
|
||||||
|
ignore_spaces: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 2 - read content from output file
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "{{ output_file }}"
|
||||||
|
register: output_content
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 2 - verify results
|
||||||
|
vars:
|
||||||
|
actual_content: "{{ output_content.content | b64decode }}"
|
||||||
|
expected_content: "[ foo ]\nbar = frelt\n"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- actual_content == expected_content
|
||||||
|
- result is changed
|
||||||
|
- result.msg == 'option changed'
|
||||||
|
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 3 (legacy workaround when not required) - create test file
|
||||||
|
ansible.builtin.copy: # noqa risky-file-permissions
|
||||||
|
dest: "{{ output_file }}"
|
||||||
|
content: |
|
||||||
|
[foo]
|
||||||
|
; bar=baz
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 3 - update with optional spaces specified
|
||||||
|
community.general.ini_file: # noqa risky-file-permissions
|
||||||
|
path: "{{ output_file }}"
|
||||||
|
section: ' foo '
|
||||||
|
option: bar
|
||||||
|
value: frelt
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 3 - read content from output file
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "{{ output_file }}"
|
||||||
|
register: output_content
|
||||||
|
|
||||||
|
- name: Test-section_name_spaces 3 - verify results
|
||||||
|
vars:
|
||||||
|
actual_content: "{{ output_content.content | b64decode }}"
|
||||||
|
expected_content: |
|
||||||
|
[foo]
|
||||||
|
bar = frelt
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- actual_content == expected_content
|
||||||
|
- result is changed
|
||||||
|
- result.msg == 'option changed'
|
Loading…
Reference in a new issue