forked from ansible-collections/community.general
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
…nsible-collections#7273) * Add `ignore_spaces` option to `ini_file` to ignore spacing changes Add a new `ignore_spaces` option to the `ini_file` module which, if true, prevents the module from changing a line in a file if the only thing that would change by doing so is whitespace before or after the `=`. Also add test cases for this new functionality. There were previously no tests for `ini_file` at all, and this doesn't attempt to fix that, but it does add tests to ensure that the new behavior implemented here as well as the old behavior in the affected code are correct. Fixes ansible-collections#7202. * Add changelog fragment * pep8 / pylint * remove unused import * fix typo in comment in integration test file * Add symlink tests to main.yml It appears that ansible-collections#6546 added symlink tests but neglected to add them to main.yml so they weren't being executed. * ini_file symlink tests; create output files in correct location * Add integration tests for ini_file ignore_spaces * PR feedback
- Loading branch information
Showing
7 changed files
with
220 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
minor_changes: | ||
- ini_file - add ``ignore_spaces`` option (https://github.com/ansible-collections/community.general/pull/7273). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
123 changes: 123 additions & 0 deletions
123
tests/integration/targets/ini_file/tasks/tests/05-ignore_spaces.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
--- | ||
# 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 ignore_spaces option | ||
|
||
- name: test-ignore_spaces 1 (commented line updated) - create test file | ||
copy: | ||
dest: "{{ output_file }}" | ||
content: "[foo]\n; bar=baz\n" | ||
|
||
- name: test-ignore_spaces 1 - set new value | ||
ini_file: | ||
path: "{{ output_file }}" | ||
section: foo | ||
option: bar | ||
value: frelt | ||
ignore_spaces: true | ||
register: result | ||
|
||
- name: test-ignore_spaces 1 - read content from output file | ||
slurp: | ||
src: "{{ output_file }}" | ||
register: output_content | ||
|
||
- name: test-ignore_spaces 1 - verify results | ||
vars: | ||
actual_content: "{{ output_content.content | b64decode }}" | ||
expected_content: "[foo]\nbar = frelt\n" | ||
assert: | ||
that: | ||
- actual_content == expected_content | ||
- result is changed | ||
- result.msg == 'option changed' | ||
|
||
- name: test-ignore_spaces 2 (uncommented line updated) - create test file | ||
copy: | ||
dest: "{{ output_file }}" | ||
content: "[foo]\nbar=baz\n" | ||
|
||
- name: test-ignore_spaces 2 - set new value | ||
ini_file: | ||
path: "{{ output_file }}" | ||
section: foo | ||
option: bar | ||
value: frelt | ||
ignore_spaces: true | ||
register: result | ||
|
||
- name: test-ignore_spaces 2 - read content from output file | ||
slurp: | ||
src: "{{ output_file }}" | ||
register: output_content | ||
|
||
- name: test-ignore_spaces 2 - verify results | ||
vars: | ||
actual_content: "{{ output_content.content | b64decode }}" | ||
expected_content: "[foo]\nbar = frelt\n" | ||
assert: | ||
that: | ||
- actual_content == expected_content | ||
- result is changed | ||
- result.msg == 'option changed' | ||
|
||
- name: test-ignore_spaces 3 (spaces on top of no spaces) - create test file | ||
copy: | ||
dest: "{{ output_file }}" | ||
content: "[foo]\nbar=baz\n" | ||
|
||
- name: test-ignore_spaces 3 - try to set value | ||
ini_file: | ||
path: "{{ output_file }}" | ||
section: foo | ||
option: bar | ||
value: baz | ||
ignore_spaces: true | ||
register: result | ||
|
||
- name: test-ignore_spaces 3 - read content from output file | ||
slurp: | ||
src: "{{ output_file }}" | ||
register: output_content | ||
|
||
- name: test-ignore_spaces 3 - verify results | ||
vars: | ||
actual_content: "{{ output_content.content | b64decode }}" | ||
expected_content: "[foo]\nbar=baz\n" | ||
assert: | ||
that: | ||
- actual_content == expected_content | ||
- result is not changed | ||
- result.msg == "OK" | ||
|
||
- name: test-ignore_spaces 4 (no spaces on top of spaces) - create test file | ||
copy: | ||
dest: "{{ output_file }}" | ||
content: "[foo]\nbar = baz\n" | ||
|
||
- name: test-ignore_spaces 4 - try to set value | ||
ini_file: | ||
path: "{{ output_file }}" | ||
section: foo | ||
option: bar | ||
value: baz | ||
ignore_spaces: true | ||
no_extra_spaces: true | ||
register: result | ||
|
||
- name: test-ignore_spaces 4 - read content from output file | ||
slurp: | ||
src: "{{ output_file }}" | ||
register: output_content | ||
|
||
- name: test-ignore_spaces 4 - verify results | ||
vars: | ||
actual_content: "{{ output_content.content | b64decode }}" | ||
expected_content: "[foo]\nbar = baz\n" | ||
assert: | ||
that: | ||
- actual_content == expected_content | ||
- result is not changed | ||
- result.msg == "OK" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# Copyright (c) 2023 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 | ||
|
||
from __future__ import (absolute_import, division, print_function) | ||
__metaclass__ = type | ||
|
||
from ansible_collections.community.general.plugins.modules import ini_file | ||
|
||
|
||
def do_test(option, ignore_spaces, newline, before, expected_after, | ||
expected_changed, expected_msg): | ||
section_lines = [before] | ||
changed_lines = [0] | ||
changed, msg = ini_file.update_section_line( | ||
option, None, section_lines, 0, changed_lines, ignore_spaces, | ||
newline, None) | ||
assert section_lines[0] == expected_after | ||
assert changed == expected_changed | ||
assert changed_lines[0] == 1 | ||
assert msg == expected_msg | ||
|
||
|
||
def test_ignore_spaces_comment(): | ||
oldline = ';foobar=baz' | ||
newline = 'foobar = baz' | ||
do_test('foobar', True, newline, oldline, newline, True, 'option changed') | ||
|
||
|
||
def test_ignore_spaces_changed(): | ||
oldline = 'foobar=baz' | ||
newline = 'foobar = freeble' | ||
do_test('foobar', True, newline, oldline, newline, True, 'option changed') | ||
|
||
|
||
def test_ignore_spaces_unchanged(): | ||
oldline = 'foobar=baz' | ||
newline = 'foobar = baz' | ||
do_test('foobar', True, newline, oldline, oldline, False, None) | ||
|
||
|
||
def test_no_ignore_spaces_changed(): | ||
oldline = 'foobar=baz' | ||
newline = 'foobar = baz' | ||
do_test('foobar', False, newline, oldline, newline, True, 'option changed') | ||
|
||
|
||
def test_no_ignore_spaces_unchanged(): | ||
newline = 'foobar=baz' | ||
do_test('foobar', False, newline, newline, newline, False, None) |