How to pass variables from one role downstream to other dependency roles with ansible?

Viewed 6770

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.

2 Answers

A "vars" can be provided :

    # roles/myapp/meta/main.yml
---
dependencies:
  - role: common
    vars:
      some_parameter: 3
  - role: apache
    vars:
      apache_port: 80
  - role: postgres
    vars:
      dbname: blarg
      other_parameter: 12

please refer to Using role dependencies, here

Related