From 714f796384c66be72e558251dea5dee779de8160 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Tue, 10 Jun 2025 15:37:32 -0700 Subject: [PATCH] Fix nested include with templating (#85295) --- lib/ansible/playbook/included_file.py | 4 +++- test/integration/targets/include_with_templating/aliases | 3 +++ .../targets/include_with_templating/tasks/main.yml | 3 +++ .../integration/targets/include_with_templating/tests/one.yml | 1 + .../integration/targets/include_with_templating/tests/two.yml | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/integration/targets/include_with_templating/aliases create mode 100644 test/integration/targets/include_with_templating/tasks/main.yml create mode 100644 test/integration/targets/include_with_templating/tests/one.yml create mode 100644 test/integration/targets/include_with_templating/tests/two.yml diff --git a/lib/ansible/playbook/included_file.py b/lib/ansible/playbook/included_file.py index a8386509b76..ace611d86f2 100644 --- a/lib/ansible/playbook/included_file.py +++ b/lib/ansible/playbook/included_file.py @@ -144,7 +144,9 @@ class IncludedFile: parent_include_dir = parent_include._role_path else: try: - parent_include_dir = os.path.dirname(parent_include.args.get('_raw_params')) + # FUTURE: Since the parent include path has already been resolved, it should be used here. + # Unfortunately it's not currently stored anywhere, so it must be calculated again. + parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params'))) except AnsibleError as e: parent_include_dir = '' display.warning( diff --git a/test/integration/targets/include_with_templating/aliases b/test/integration/targets/include_with_templating/aliases new file mode 100644 index 00000000000..2f98b8868f7 --- /dev/null +++ b/test/integration/targets/include_with_templating/aliases @@ -0,0 +1,3 @@ +shippable/posix/group4 +context/controller +gather_facts/no diff --git a/test/integration/targets/include_with_templating/tasks/main.yml b/test/integration/targets/include_with_templating/tasks/main.yml new file mode 100644 index 00000000000..56818eb9fb2 --- /dev/null +++ b/test/integration/targets/include_with_templating/tasks/main.yml @@ -0,0 +1,3 @@ +- include_tasks: "{{ item }}" + with_items: + - "{{ role_path }}/tests/one.yml" diff --git a/test/integration/targets/include_with_templating/tests/one.yml b/test/integration/targets/include_with_templating/tests/one.yml new file mode 100644 index 00000000000..a82ff05fc90 --- /dev/null +++ b/test/integration/targets/include_with_templating/tests/one.yml @@ -0,0 +1 @@ +- include_tasks: two.yml diff --git a/test/integration/targets/include_with_templating/tests/two.yml b/test/integration/targets/include_with_templating/tests/two.yml new file mode 100644 index 00000000000..4c93b52f146 --- /dev/null +++ b/test/integration/targets/include_with_templating/tests/two.yml @@ -0,0 +1 @@ +- debug: