2015-10-19 7 views
38

ten jest fragmentem poradnika używam (server.yml)Zastąpienie odbywa zmienną ansibl Poradniku z linii polecenia

- name: Determine Remote User 
    hosts: web 
    gather_facts: false 
    roles: 
    - { role: remote-user, tags: [remote-user, always] } 

My plik gospodarze ma inne grupy, na przykład serwerów

[web] 
x.x.x.x 

[droplets] 
x.x.x.x 

Teraz chcę wykonać ansible-playbook -i hosts/<env> server.yml i zastąpić hosts: web od server.yml do uruchomienia tej playbook dla [droplets].

Czy mogę tylko przesłonić jako jednorazową rzecz bez edycji server.yml bezpośrednio?

Dzięki.

Odpowiedz

50

Nie sądzę ansibl udostępnia tę funkcję, które powinny. Oto coś, co można zrobić:

hosts: "{{ variable_host | default('web') }}"

i można przekazać variable_host albo z linii poleceń lub z pliku Vars, np:

ansible-playbook server.yml --extra-vars "variable_host=newtarget(s)" 
+2

Wymagana niewielka korekta. Powinien to być 'hosts:" {{variable_host | default ('web')}} "' – SPM

+0

o tak, mój zły. Dziękuję za wskazanie :) – wallydrag

+10

Oto notatka, którą według mnie powinien ukończyć odpowiedź dla początkujących ansiblów szukających tego rozwiązania: Przykład: 'ansible-playbook server.yml --extra-vars" variable_host = newtarget (s) "' – Frobbit

2

Jeśli chcesz uruchomić zadanie powiązane z hostem, ale na innym hoście, powinieneś wypróbować delegate_to.

W twoim przypadku, należy przekazać do localhost (ansibl master) i wywołującego ansible-playbook komenda

25

Dla każdego, kto może przyjść szuka rozwiązania .
play Book

- hosts: '{{ host }}' 
    tasks: 
    - debug: msg="Host is {{ ansible_fqdn }}" 

Inventory

[web] 
x.x.x.x 

[droplets] 
x.x.x.x 

Command:ansible-playbook deplyment.yml -i hosts --extra-vars "host=droplets" Tak można określić nazwę grupy w ekstra-vars

+0

FYI, to powinna być poprawna odpowiedź. – OzNetNerd

4

To trochę późno , ale myślę, że mógłbyś użyć --limit or -l polecenie ograniczenia wzorca do bardziej konkretnych hostów. (Wersja 2.3.2.0)

Można mieć - hosts: all (or group) tasks: - some_task

a następnie ansible-playbook playbook.yml -l some_more_strict_host_or_pattern i użyć flagi --list-hosts zobaczyć na którym odbywa konfiguracja ta będzie stosowana.

+2

Jestem bardzo nowy w ansibli, ale uważam to za bardzo skuteczne rozwiązanie, o wiele bardziej kompaktowe niż inne. Dlaczego została odrzucona? –

+1

To jest niebezpieczne. W przypadku zapomnienia o "ograniczeniu" listy dotkniętych hostów, zakładka może spowodować wiele szkód. –

+0

Uważam, że za pomocą '--extra-vars" variable_host = newtarget (s) "' podobnie jak przyjęte rozwiązanie jest równie niebezpieczne i bardziej skomplikowane rozwiązanie. Używa domyślnych hostów 'web', które również mogą być zastosowane tutaj zamiast' all'. Możesz użyć domyślnej grupy hostów, aby uniknąć pomyłki i użyć flagi '--list-hosts', aby dokładnie zrozumieć, na które hosty wpływasz. –

Powiązane problemy