2016-03-04 10 views
6

Mam ogólną rolę webserver, która używa innej roli nginx do odradzania nowych vserverów.Jak przekazywać zmienne z jednej roli w dół do innych ról zależności za pomocą ansibl?

webserver/meta/main.yml wygląda następująco:

 
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 

Problemem jest to, że zmienne te mają być zdefiniowana wewnątrz webserver-role/vars/(test|staging).yml

Is Wydaje się, że ansibl spróbuje załadować zależności przed załadowaniem zmienne.

Jak mogę rozwiązać ten problem? Nie chcę umieszczać żadnych szczegółów dotyczących konfiguracji wewnątrz ról niskiego poziomu.

Ponadto, nie chcę umieszczać konfiguracji wewnątrz samego playbooka, ponieważ te konfiguracje są wspólne dla wielu zestawów.

+0

Generalnie będzie lepiej z posiadania oddzielnych configs etap w 'group_vars' zamiast oddzielnych plików w' role'. –

Odpowiedz

3

Ten scenariusz działa z Ansible 2.2.
Vars dla ról zależnych są określone w roli głównej na vars pliki:

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

Wynik:

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

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

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

TASK [role2 : debug] *********************************************************** 
ok: [localhost] => { 
    "msg": "role2" 
} 
Powiązane problemy