2016-03-04 21 views
6

Ho un ruolo generico webserver che utilizza un altro ruolo nginx per generare nuovi vserver.Come passare variabili da un ruolo a valle ad altri ruoli di dipendenza con ansible?

webserver/meta/main.yml assomiglia:

 
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 

Il problema è che queste variabili dovrebbero essere definiti all'interno del webserver-role/vars/(test|staging).yml

Is sembra che Ansible cercherà di caricare le dipendenze prima di caricare le variabili.

Come posso risolvere questo problema? Non voglio inserire specifiche di configurazione all'interno dei ruoli di basso livello.

Inoltre, non voglio inserire configurazioni all'interno del playbook perché queste configurazioni sono condivise su più Playbook.

+0

Generalmente si sarà meglio di avere i file di configurazione di scena separati in 'group_vars' piuttosto che file separati in' role'. –

risposta

3

Questo scenario funziona con Ansible 2.2.
Vars per i ruoli di dipendenti sono specificati nel ruolo principale Vars file:

./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 

Risultato:

PLAY [localhost] *************************************************************** 

TASK [role1 : debug] *********************************************************** 
ok: [localhost] => { 
    "msg": "hello1" 
} 

TASK [role1 : debug] *********************************************************** 
ok: [localhost] => { 
    "msg": "hello2" 
} 

TASK [role2 : debug] *********************************************************** 
ok: [localhost] => { 
    "msg": "role2" 
} 
Problemi correlati