Skip to content

Commit

Permalink
ini_file: try using inactive option before creating a new one (#6575)
Browse files Browse the repository at this point in the history
* ini_file: make inactive options as active if they exist, instead of creating a new option entry

Add changelog fragment

* Update changelogs/fragments/ini_file-use-inactive-options-when-possible.yml

Co-authored-by: Felix Fontein <[email protected]>

* Fix test

* Update tests

* Fix spelling

---------

Co-authored-by: Felix Fontein <[email protected]>
  • Loading branch information
njutn95 and felixfontein authored Jun 19, 2023
1 parent e85b008 commit f710a10
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
bugfixes:
- ini_file - fix a bug where the inactive options were not used when possible (https://github.com/ansible-collections/community.general/pull/6575).
4 changes: 2 additions & 2 deletions plugins/modules/ini_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,14 +328,14 @@ def do_ini(module, filename, section=None, option=None, values=None,
# override option with no value to option with value if not allow_no_value
if len(values) > 0:
for index, line in enumerate(section_lines):
if not changed_lines[index] and match_active_opt(option, line):
if not changed_lines[index] and match_opt(option, line):
newline = assignment_format % (option, values.pop(0))
(changed, msg) = update_section_line(changed, section_lines, index, changed_lines, newline, msg)
if len(values) == 0:
break
# remove all remaining option occurrences from the rest of the section
for index in range(len(section_lines) - 1, 0, -1):
if not changed_lines[index] and match_active_opt(option, section_lines[index]):
if not changed_lines[index] and match_opt(option, section_lines[index]):
del section_lines[index]
del changed_lines[index]
changed = True
Expand Down
39 changes: 19 additions & 20 deletions tests/integration/targets/ini_file/tasks/tests/02-values.yml
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@
- content17 == expected17


- name: "test-values 18 - Ensure 'beverage=coke' is 'abesent' in section '[drinks]'"
- name: "test-values 18 - Ensure 'beverage=coke' is 'absent' in section '[drinks]'"
ini_file:
path: "{{ output_file }}"
section: drinks
Expand Down Expand Up @@ -483,7 +483,7 @@
- content18 == expected18


- name: "test-values 19 - Ensure non-existant 'beverage=coke' is 'abesent' in section '[drinks]'"
- name: "test-values 19 - Ensure non-existent 'beverage=coke' is 'absent' in section '[drinks]'"
ini_file:
path: "{{ output_file }}"
section: drinks
Expand Down Expand Up @@ -579,8 +579,8 @@
[section1]
var1 = aaa
# comment in section
var2 = foo
# var2 = bar
# var2 = some value
# comment after section
[section2]
var3 = ccc
Expand Down Expand Up @@ -613,8 +613,8 @@
[section1]
var1 = aaa
# comment in section
var2 = foo
# var2 = bar
# var2 = some value
# comment after section
[section2]
var3 = ccc
Expand All @@ -629,14 +629,13 @@
- content22 == expected22


- name: "test-values 23 - Ensure 'var2=[foo, foobar]' is 'present' in section '[section1]'"
- name: "test-values 23 - Ensure 'var2=foo' is 'present' in section '[section1]', replacing commented option 'var2=some value'"
ini_file:
path: "{{ output_file }}"
section: section1
option: var2
values:
- foo
- foobar
state: present
register: result23

Expand All @@ -647,7 +646,6 @@

- name: test-values 23 - set expected content and get current ini file content
set_fact:
content23: "{{ output_content.content | b64decode }}"
expected23: |
# Some comment to test
Expand All @@ -659,28 +657,28 @@
var1 = aaa
# comment in section
var2 = foo
var2 = foobar
# var2 = bar
# comment after section
[section2]
var3 = ccc
# comment after section
- name: test-values 23 - assert 'changed' and msg 'option added' and content is as expected
content23: "{{ output_content.content | b64decode }}"

- name: test-values 23 - assert 'changed' and msg 'option changed' and content is as expected
assert:
that:
- result23 is changed
- result23.msg == 'option added'
- result23.msg == 'option changed'
- content23 == expected23


- name: "test-values 24 - Ensure 'var2=[foo, foobar, bar]' is 'present' in section '[section1]' replacing commented option 'var2=bar'"
- name: "test-values 24 - Ensure 'var2=[foo, foobar]' is 'present' in section '[section1]'"
ini_file:
path: "{{ output_file }}"
section: section1
option: var2
values:
values:
- foo
- bar
- foobar
state: present
register: result24
Expand All @@ -692,7 +690,6 @@

- name: test-values 24 - set expected content and get current ini file content
set_fact:
content24: "{{ output_content.content | b64decode }}"
expected24: |
# Some comment to test
Expand All @@ -705,16 +702,18 @@
# comment in section
var2 = foo
var2 = foobar
var2 = bar
# comment after section
[section2]
var3 = ccc
# comment after section
- name: test-values 24 - assert 'added' and msg 'option changed' and content is as expected
content24: "{{ output_content.content | b64decode }}"

- name: test-values 24 - assert 'changed' and msg 'option added' and content is as expected
assert:
that:
- result24 is changed
- result24.msg == 'option changed'
- result24.msg == 'option added'
- content24 == expected24


Expand Down

0 comments on commit f710a10

Please sign in to comment.