Ensure we don't overwrite roles from include/import_role when loading the play (#47512)

* Ensure we don't overwrite roles from include/import_role when loading the play. Fixes #47454

* Add changelog fragment
This commit is contained in:
Matt Martz 2018-10-23 11:08:48 -05:00 committed by GitHub
parent e1c2dd383a
commit d5e4f37ca0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- roles - Ensure that we don't overwrite roles that have been registered (from imports) while parsing roles under the roles header (https://github.com/ansible/ansible/issues/47454)

View file

@ -195,7 +195,12 @@ class Play(Base, Taggable, Become):
roles = [] roles = []
for ri in role_includes: for ri in role_includes:
roles.append(Role.load(ri, play=self)) roles.append(Role.load(ri, play=self))
return roles
return self._extend_value(
self.roles,
roles,
prepend=True
)
def _load_vars_prompt(self, attr, ds): def _load_vars_prompt(self, attr, ds):
new_ds = preprocess_vars(ds) new_ds = preprocess_vars(ds)

View file

@ -0,0 +1,4 @@
- hosts: localhost
gather_facts: false
roles:
- call_import

View file

@ -0,0 +1,6 @@
- import_role:
name: regular
- assert:
that:
- regular_defaults_var is defined

View file

@ -82,3 +82,4 @@ test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3
ansible-playbook public_exposure/playbook.yml -i ../../inventory "$@" ansible-playbook public_exposure/playbook.yml -i ../../inventory "$@"
ansible-playbook public_exposure/no_bleeding.yml -i ../../inventory "$@" ansible-playbook public_exposure/no_bleeding.yml -i ../../inventory "$@"
ansible-playbook public_exposure/no_overwrite_roles.yml -i ../../inventory "$@"