Add feature to expose vars/defaults with include/import_role (#41330)

* First pass at making 'private' work on include_role, imports are always public

* Prevent dupe task execution and overwriting handlers

* New functionality will use public instead of deprecated private

* Add tests for public exposure

* Validate vars before import/include to ensure they don't expose too early

* Add porting guide docs about public argument and change to import_role

* Add additional docs about public and vars exposure to module docs

* Insert role handlers at parse time, exposing them globally
This commit is contained in:
Matt Martz 2018-07-15 09:59:30 -05:00 committed by GitHub
commit 27b4d7ed31
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 145 additions and 9 deletions

View file

@ -0,0 +1,56 @@
---
- hosts: testhost
gather_facts: false
roles:
- regular
tasks:
- debug:
msg: start tasks
- name: Static imports should expose vars at parse time, not at execution time
assert:
that:
- static_defaults_var == 'static_defaults'
- static_vars_var == 'static_vars'
- import_role:
name: static
- assert:
that:
- static_tasks_var == 'static_tasks'
- static_defaults_var == 'static_defaults'
- static_vars_var == 'static_vars'
- include_role:
name: dynamic_private
- assert:
that:
- private_tasks_var == 'private_tasks'
- private_defaults_var is undefined
- private_vars_var is undefined
- name: Dynamic include should not expose vars until execution time
assert:
that:
- dynamic_tasks_var is undefined
- dynamic_defaults_var is undefined
- dynamic_vars_var is undefined
- include_role:
name: dynamic
public: true
- assert:
that:
- dynamic_tasks_var == 'dynamic_tasks'
- dynamic_defaults_var == 'dynamic_defaults'
- dynamic_vars_var == 'dynamic_vars'
- include_role:
name: from
public: true
tasks_from: from.yml
vars_from: from.yml
defaults_from: from.yml
- assert:
that:
- from_tasks_var == 'from_tasks'
- from_defaults_var == 'from_defaults'
- from_vars_var == 'from_vars'

View file

@ -0,0 +1 @@
dynamic_defaults_var: dynamic_defaults

View file

@ -0,0 +1,5 @@
- debug:
msg: dynamic
- set_fact:
dynamic_tasks_var: dynamic_tasks

View file

@ -0,0 +1 @@
dynamic_vars_var: dynamic_vars

View file

@ -0,0 +1 @@
private_defaults_var: private_defaults

View file

@ -0,0 +1,5 @@
- debug:
msg: private
- set_fact:
private_tasks_var: private_tasks

View file

@ -0,0 +1 @@
private_vars_var: private_vars

View file

@ -0,0 +1 @@
from_defaults_var: from_defaults

View file

@ -0,0 +1,5 @@
- debug:
msg: from
- set_fact:
from_tasks_var: from_tasks

View file

@ -0,0 +1 @@
from_vars_var: from_vars

View file

@ -0,0 +1 @@
regular_defaults_var: regular_defaults

View file

@ -0,0 +1,5 @@
- debug:
msg: regular
- set_fact:
regular_tasks_var: regular_tasks

View file

@ -0,0 +1 @@
regular_vars_var: regular_vars

View file

@ -0,0 +1 @@
static_defaults_var: static_defaults

View file

@ -0,0 +1,5 @@
- debug:
msg: static
- set_fact:
static_tasks_var: static_tasks

View file

@ -0,0 +1 @@
static_vars_var: static_vars

View file

@ -78,4 +78,6 @@ fi
ANSIBLE_STRATEGY='linear' ansible-playbook tasks/test_include_dupe_loop.yml -i ../../inventory "$@" | tee test_include_dupe_loop.out
test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3
ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_include_dupe_loop.yml -i ../../inventory "$@" | tee test_include_dupe_loop.out
test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3
test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3
ansible-playbook public_exposure/playbook.yml -i ../../inventory "$@"