From f710a10f256da9286b118811a157644ee084576c Mon Sep 17 00:00:00 2001 From: njutn95 Date: Mon, 19 Jun 2023 06:53:33 +0200 Subject: [PATCH] ini_file: try using inactive option before creating a new one (#6575) * 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 * Fix test * Update tests * Fix spelling --------- Co-authored-by: Felix Fontein --- ...ile-use-inactive-options-when-possible.yml | 3 ++ plugins/modules/ini_file.py | 4 +- .../ini_file/tasks/tests/02-values.yml | 39 +++++++++---------- 3 files changed, 24 insertions(+), 22 deletions(-) create mode 100644 changelogs/fragments/ini_file-use-inactive-options-when-possible.yml diff --git a/changelogs/fragments/ini_file-use-inactive-options-when-possible.yml b/changelogs/fragments/ini_file-use-inactive-options-when-possible.yml new file mode 100644 index 0000000000..32b45bbeda --- /dev/null +++ b/changelogs/fragments/ini_file-use-inactive-options-when-possible.yml @@ -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). diff --git a/plugins/modules/ini_file.py b/plugins/modules/ini_file.py index 0f2df9f508..f084ce6b03 100644 --- a/plugins/modules/ini_file.py +++ b/plugins/modules/ini_file.py @@ -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 diff --git a/tests/integration/targets/ini_file/tasks/tests/02-values.yml b/tests/integration/targets/ini_file/tasks/tests/02-values.yml index b19a8799c1..edfc93e42b 100644 --- a/tests/integration/targets/ini_file/tasks/tests/02-values.yml +++ b/tests/integration/targets/ini_file/tasks/tests/02-values.yml @@ -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 @@ -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 @@ -579,8 +579,8 @@ [section1] var1 = aaa # comment in section - var2 = foo - # var2 = bar + # var2 = some value + # comment after section [section2] var3 = ccc @@ -613,8 +613,8 @@ [section1] var1 = aaa # comment in section - var2 = foo - # var2 = bar + # var2 = some value + # comment after section [section2] var3 = ccc @@ -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 @@ -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 @@ -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 @@ -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 @@ -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