From bd03fa811b61528b242d5ef4e0f0f9dc580d2d6f Mon Sep 17 00:00:00 2001 From: Sloane Hertel <19572925+s-hertel@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:36:28 -0400 Subject: [PATCH] Include parent role vars as well as _role_vars (#75034) --- lib/ansible/playbook/role/__init__.py | 1 + test/integration/targets/roles_var_inheritance/aliases | 1 + test/integration/targets/roles_var_inheritance/play.yml | 4 ++++ .../targets/roles_var_inheritance/roles/A/meta/main.yml | 4 ++++ .../targets/roles_var_inheritance/roles/B/meta/main.yml | 4 ++++ .../roles/child_nested_dep/vars/main.yml | 1 + .../roles_var_inheritance/roles/common_dep/meta/main.yml | 4 ++++ .../roles_var_inheritance/roles/common_dep/vars/main.yml | 1 + .../roles_var_inheritance/roles/nested_dep/meta/main.yml | 3 +++ .../roles/nested_dep/tasks/main.yml | 5 +++++ test/integration/targets/roles_var_inheritance/runme.sh | 9 +++++++++ 11 files changed, 37 insertions(+) create mode 100644 test/integration/targets/roles_var_inheritance/aliases create mode 100644 test/integration/targets/roles_var_inheritance/play.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/A/meta/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/B/meta/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/child_nested_dep/vars/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/common_dep/meta/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/common_dep/vars/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/nested_dep/meta/main.yml create mode 100644 test/integration/targets/roles_var_inheritance/roles/nested_dep/tasks/main.yml create mode 100755 test/integration/targets/roles_var_inheritance/runme.sh diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py index 93c93521cc1..b88f2478967 100644 --- a/lib/ansible/playbook/role/__init__.py +++ b/lib/ansible/playbook/role/__init__.py @@ -456,6 +456,7 @@ class Role(Base, Conditional, Taggable, CollectionSearch): if dep_chain: for parent in dep_chain: + inherited_vars = combine_vars(inherited_vars, parent.vars) inherited_vars = combine_vars(inherited_vars, parent._role_vars) return inherited_vars diff --git a/test/integration/targets/roles_var_inheritance/aliases b/test/integration/targets/roles_var_inheritance/aliases new file mode 100644 index 00000000000..70a7b7a9f32 --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/aliases @@ -0,0 +1 @@ +shippable/posix/group5 diff --git a/test/integration/targets/roles_var_inheritance/play.yml b/test/integration/targets/roles_var_inheritance/play.yml new file mode 100644 index 00000000000..170eef5771b --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/play.yml @@ -0,0 +1,4 @@ +- hosts: localhost + roles: + - A + - B diff --git a/test/integration/targets/roles_var_inheritance/roles/A/meta/main.yml b/test/integration/targets/roles_var_inheritance/roles/A/meta/main.yml new file mode 100644 index 00000000000..0e99e981e2a --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/A/meta/main.yml @@ -0,0 +1,4 @@ +dependencies: + - role: common_dep + vars: + test_var: A diff --git a/test/integration/targets/roles_var_inheritance/roles/B/meta/main.yml b/test/integration/targets/roles_var_inheritance/roles/B/meta/main.yml new file mode 100644 index 00000000000..4da174030aa --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/B/meta/main.yml @@ -0,0 +1,4 @@ +dependencies: + - role: common_dep + vars: + test_var: B diff --git a/test/integration/targets/roles_var_inheritance/roles/child_nested_dep/vars/main.yml b/test/integration/targets/roles_var_inheritance/roles/child_nested_dep/vars/main.yml new file mode 100644 index 00000000000..6723fa07899 --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/child_nested_dep/vars/main.yml @@ -0,0 +1 @@ +var_precedence: dependency diff --git a/test/integration/targets/roles_var_inheritance/roles/common_dep/meta/main.yml b/test/integration/targets/roles_var_inheritance/roles/common_dep/meta/main.yml new file mode 100644 index 00000000000..1ede7be8ee3 --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/common_dep/meta/main.yml @@ -0,0 +1,4 @@ +dependencies: + - role: nested_dep + vars: + nested_var: "{{ test_var }}" diff --git a/test/integration/targets/roles_var_inheritance/roles/common_dep/vars/main.yml b/test/integration/targets/roles_var_inheritance/roles/common_dep/vars/main.yml new file mode 100644 index 00000000000..87b6b58061c --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/common_dep/vars/main.yml @@ -0,0 +1 @@ +var_precedence: parent diff --git a/test/integration/targets/roles_var_inheritance/roles/nested_dep/meta/main.yml b/test/integration/targets/roles_var_inheritance/roles/nested_dep/meta/main.yml new file mode 100644 index 00000000000..231c6c14d7f --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/nested_dep/meta/main.yml @@ -0,0 +1,3 @@ +allow_duplicates: yes +dependencies: + - child_nested_dep diff --git a/test/integration/targets/roles_var_inheritance/roles/nested_dep/tasks/main.yml b/test/integration/targets/roles_var_inheritance/roles/nested_dep/tasks/main.yml new file mode 100644 index 00000000000..c69070ca90a --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/roles/nested_dep/tasks/main.yml @@ -0,0 +1,5 @@ +- debug: + var: nested_var + +- debug: + var: var_precedence diff --git a/test/integration/targets/roles_var_inheritance/runme.sh b/test/integration/targets/roles_var_inheritance/runme.sh new file mode 100755 index 00000000000..791155a8525 --- /dev/null +++ b/test/integration/targets/roles_var_inheritance/runme.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -eux + +ansible-playbook -i ../../inventory play.yml "$@" | tee out.txt + +test "$(grep out.txt -ce '"nested_var": "A"')" == 1 +test "$(grep out.txt -ce '"nested_var": "B"')" == 1 +test "$(grep out.txt -ce '"var_precedence": "dependency"')" == 2