I have a generic webserver role that is using another nginx role to spawn new vservers.
webserver/meta/main.yml looks like:
allow_duplicates: yes
dependencies:
- role: nginx
name: api vserver
frontend_port: "{{ frontend_port }}"
domain: "{{ api_domain }}"
backend_host: 127.0.0.1
- role: nginx
name: portal vserver
domain: "{{ portal_domain }}"
backend_host: 127.0.0.1
The problem is that these variables are supposed to be defined inside the webserver-role/vars/(test|staging).yml
Is seems that Ansible will try to load the dependencies before loading the variables.
How can I solve this problem? I don't want to put any configuration specifics inside the low level roles.
Also, I do not want to put configurations inside the playbook itself because these configurations are shared across multiple playbooks.
This scenario works with Ansible 2.2.
Vars for dependent roles are specified in main role's vars files:
./roles/role1/tasks/main.yml:
- debug: msg="{{ role_param }}"
./roles/role2/meta/main.yml:
allow_duplicates: yes
dependencies:
- role: role1
role_param: "{{ param1 }}"
- role: role1
role_param: "{{ param2 }}"
./roles/role2/tasks/main.yml:
- debug: msg=role2
./roles/role2/vars/main.yml:
param1: hello1
param2: hello2
Result:
PLAY [localhost] ***************************************************************
TASK [role1 : debug] ***********************************************************
ok: [localhost] => {
"msg": "hello1"
}
TASK [role1 : debug] ***********************************************************
ok: [localhost] => {
"msg": "hello2"
}
TASK [role2 : debug] ***********************************************************
ok: [localhost] => {
"msg": "role2"
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With