diff --git a/changelogs/fragments/83755-ini-new-interpolation-option.yml b/changelogs/fragments/83755-ini-new-interpolation-option.yml new file mode 100644 index 00000000000..03b7fe1c3dc --- /dev/null +++ b/changelogs/fragments/83755-ini-new-interpolation-option.yml @@ -0,0 +1,2 @@ +minor_changes: + - ini lookup - add new ``interpolation`` option (https://github.com/ansible/ansible/issues/83755) diff --git a/lib/ansible/plugins/lookup/ini.py b/lib/ansible/plugins/lookup/ini.py index cdc9a1540cd..9d5c289e1fa 100644 --- a/lib/ansible/plugins/lookup/ini.py +++ b/lib/ansible/plugins/lookup/ini.py @@ -49,6 +49,12 @@ DOCUMENTATION = """ default: False aliases: ['allow_none'] version_added: '2.12' + interpolation: + description: + Allows for interpolation of values, see https://docs.python.org/3/library/configparser.html#configparser.BasicInterpolation + type: bool + default: True + version_added: '2.18' seealso: - ref: playbook_task_paths description: Search paths used for relative files. @@ -140,7 +146,10 @@ class LookupModule(LookupBase): self.set_options(var_options=variables, direct=kwargs) paramvals = self.get_options() - self.cp = configparser.ConfigParser(allow_no_value=paramvals.get('allow_no_value', paramvals.get('allow_none'))) + self.cp = configparser.ConfigParser( + allow_no_value=paramvals.get('allow_no_value', paramvals.get('allow_none')), + interpolation=configparser.BasicInterpolation() if paramvals.get('interpolation') else None, + ) if paramvals['case_sensitive']: self.cp.optionxform = to_native diff --git a/test/integration/targets/lookup_ini/interpolation.ini b/test/integration/targets/lookup_ini/interpolation.ini new file mode 100644 index 00000000000..afac6ec0b1f --- /dev/null +++ b/test/integration/targets/lookup_ini/interpolation.ini @@ -0,0 +1,3 @@ +[global] +home_dir: /Users +my_dir: %(home_dir)s/lumberjack diff --git a/test/integration/targets/lookup_ini/nointerpolation.ini b/test/integration/targets/lookup_ini/nointerpolation.ini new file mode 100644 index 00000000000..c34e74cc0cb --- /dev/null +++ b/test/integration/targets/lookup_ini/nointerpolation.ini @@ -0,0 +1,2 @@ +[global] +Exec=/bin/program run %u diff --git a/test/integration/targets/lookup_ini/test_ini.yml b/test/integration/targets/lookup_ini/test_ini.yml index 11a5e57a794..f8f6fea0474 100644 --- a/test/integration/targets/lookup_ini/test_ini.yml +++ b/test/integration/targets/lookup_ini/test_ini.yml @@ -2,3 +2,4 @@ - import_playbook: test_errors.yml - import_playbook: test_case_sensitive.yml - import_playbook: test_allow_no_value.yml +- import_playbook: test_interpolation.yml diff --git a/test/integration/targets/lookup_ini/test_interpolation.yml b/test/integration/targets/lookup_ini/test_interpolation.yml new file mode 100644 index 00000000000..03c335ecc07 --- /dev/null +++ b/test/integration/targets/lookup_ini/test_interpolation.yml @@ -0,0 +1,8 @@ +- hosts: testhost + gather_facts: false + tasks: + - name: Test interpolation + assert: + that: + - lookup('ini', 'my_dir', file='interpolation.ini') == '/Users/lumberjack' + - lookup('ini', 'Exec', file='nointerpolation.ini', interpolation=false) == '/bin/program run %u'