Hi!
Whenever I include a role using the meta dependencies tag I ended up with the scope of the included role in the current role, even though I set private_role_vars = yes
As an example, consider a project like this
├── ansible.cfg
├── roles
│ ├── some_other_role
│ │ └── vars
│ │ └── main.yml
│ └── some_role
│ ├── defaults
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ └── tasks
│ └── main.yml
└── test.yml
the playbook test.yml simply includes 'some_role'
- hosts: all
tasks:
- include_role:
name: some_role
In some_role meta definition I include a dependency (some_role/meta/main.yml)
---
dependencies:
- { role: some_other_role }
And also set a variable a default value (some_role/defaults/main.yml)
some_variable: SOME_VARIABLE
The main task for this role is simply showing the value of the var (some_role/tasks/main.yml)
---
- debug: var=some_variable
some_other_role simply defines a variable that happens to have the same name as a variable some_role (some_other_role/vars/main.yml)
some_variable: SOME_VARIABLE_WITH_VALUE_FROM_OUTSIDE
I have the private_role_vars = yes in my ansible.cfg
When I run the playbook...
ansible-playbook test.yml -c local
PLAY [all] ***********************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************
ok: [127.0.0.1]
TASK [some_role : debug] *********************************************************************************************************************************************************
ok: [127.0.0.1] => {
"changed": false,
"some_variable": "SOME_VARIABLE_WITH_VALUE_FROM_OUTSIDE"
}
PLAY RECAP ***********************************************************************************************************************************************************************
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0
BOOM!
Seems that even though I set the private_role_vars = yes, some_role scope gets poluted with the scope of some_other_role. If I change the definition to the vars instead of the defaults of the some_other_role it works but not because I dont get the scope, but because vars have precedence over a previously defined var.
Is this a bug? is this the desired behavior? How can overcome this?
Thanks in advance, Jose Fernandez