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