2014-05-07 12 views
6

Mam hosta w 2 grupach: pc i Serwery Mam 2 group_vars (pc i serwery) z, w każdym pliku packages.yml Te pliki definiują listę pakietów do zainstalowania na komputerach PC i serwerach gospodarzeOdpowiedz: host w wielu grupach

mam rolę, aby zainstalować pakiet domyślny

problemem jest: tylko group_vars/pc/packages.yml to wziąć pod uwagę zadania ról, paczki od group_vars/serwerów /packages.yml nie są zainstalowane

Oczywiście, czego chcę, to instalacja pakietów d efined dla komputerów PC i serwerów

ja nie wiem, czy jest to błąd lub funkcja ...

Dzięki za pomoc

oto konfiguracja:

# file: production 
[pc] 
armen 
kerbel 
kerzo 

[servers] 
kerbel 

--- 
# packages on servers 
packages: 
    - lftp 
    - mercurial 

--- 
# packages on pc 
packages: 
    - keepassx 
    - lm-sensors 
    - hddtemp 
+0

To nie bezpośrednio rozwiązać problem, to narzędzie stworzy wykres, aby zobaczyć, jak Twój komputer został przypisany do grupy https://willthames.github.io/2014/04/03/an-ansible-inventory-grapher.html – Mxx

+0

Jaką wersję Ansible używasz? – Shahar

+0

ansible-playbook 1.7 – dype

Odpowiedz

1

Nie błąd. Zgodnie z docs o zmiennym priorytecie, nie powinieneś definiować zmiennej w wielu miejscach i starać się zachować prostotę. Michael DeHaan (ołów dev ansibl za) responded z podobnym pytaniem na ten temat:

Generalnie uważam cel sztukach choć wiążą hosty do ról, więc poszczególne role powinny zawierać list pakietów.

Używam ról, ponieważ jest to nieco czystsze IMO.

Jeśli naprawdę chcesz (i nie jest to zalecany sposób), można ustawić opcję hash_behaviour w ansible.cfg:

[defaults] 
hash_behaviour = merge 

To spowoduje scalenie dwóch wartości, gdy hash (dict) jest przedefiniowane, zamiast zastępowania starej wartości nową. To nie działa na listach, choć, więc trzeba utworzyć skrót listach, jak:

group_vars/all/package.yml:

packages: 
    all: [pkg1, pkg2] 

group_vars/serwery/package.yml:

packages: 
    servers: [pkg3, pkg4] 

Pętla w książce jest nieco bardziej skomplikowana.

2

Jeśli chcesz użyć takiego schematu. Należy ustawić opcję hash_behaviour w ansible.cfg:

[defaults] 
hash_behaviour = merge 

Ponadto, trzeba korzystać ze słowników zamiast list. Aby zapobiec duplikaty polecam używać nazw jako klucze, na przykład:

group_vars/serwery/packages.yml:

packages: 
package_name1: 
package_name2: 

group_vars/pc/pakiety.yml:

packages: 
package_name3: 
package_name4: 

A w zadaniu PlayBook (| default ({}) - dla nieobecnego "pakiet" Zmienna przypadek):

- name: install host packages 
    yum: name={{ item.key }} state=latest 
    with_dict: packages | default({}) 
Powiązane problemy