2015-11-30 15 views
12

Mam książeczkę podręczną z sekcją wielu hostów. Chciałbym zdefiniować zmienną w tym pliku playbook.yml że ma zastosowanie wyłącznie w pliku, na przykład:Zmienna oszczucjalna w całym skrypcie

vars: 
    my_global_var: 'hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 

Powyższy przykład nie działa. Muszę zduplikować zmienną dla każdej sekcji hosta (bad) lub zdefiniować ją na wyższym poziomie, na przykład w moim group_vars/all (nie to, co chcę, ale działa). Jestem również świadomy, że pliki zmiennych mogą być zawarte, ale wpływa to na czytelność. Wszelkie sugestie, aby uzyskać go we właściwym zakresie (np. Sam plik playbooka)?

+0

Możesz być zainteresowany PR [# 13787] (https://github.com/ansible/ansible/pull/13787), która realizuje dokładnie to, czego szukasz (a także całej playbook vars_prompt). –

Odpowiedz

4

Moduł set_fact spełni to, jeśli group_vars nie spełnia Twoich wymagań.

http://docs.ansible.com/ansible/set_fact_module.html

Moduł ten pozwala na ustawienie nowych zmiennych. Zmienne są ustawiane na podstawie host-by-host> podobnie jak fakty odkryte przez moduł instalacyjny. Zmienne te> przetrwają między kolejnymi zagrywkami podczas przebiegu Ansaly, ale nie zostaną zapisane w> wykonaniach, nawet jeśli użyjesz pamięci podręcznej faktów.

- hosts: db:web 
    tasks: 
    - set_fact: my_global_var='hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 
3

Wolę zachować zmienne globalne w pliku inwentaryzacji, w którym przechowuje się grupy i nazwy hostów.

Na przykład:

my-hosts:

[all:vars] 
my_global_var="hello" 

[db] 
db1 
db2 
[web] 
web1 
web2 

Uruchom playbook z:

ansible-playbook -i my-hosts playbook.yml 

Zmienna zostanie określona dla wszystkich hostów.

Jeśli używasz ec2.py lub innego , możesz umieścić zmienne globalne w pliku group_vars/all, aby uzyskać ten sam wynik.

+0

Jak już wspomniałem, umieszczenie var w inwentarzu lub pliku hosta działa, ale jest trudniejsze do odczytania, a następnie zdefiniowanie go w książce adresowej, ponieważ trzeba przejrzeć 2 lub więcej plików. –

+0

Nie wspomniałeś o inwentarzu w twoim pytaniu, dlatego zasugerowałem :-) Ponieważ jest to plik, którego musisz mimo wszystko użyć, aby zdefiniować swoje hosty, warto zdefiniować tam również swoje zmienne. – jonatan

+0

Co w przypadku korzystania z dynamicznych zasobów reklamowych, takich jak ec2.py? – xenithorb

Powiązane problemy