2014-10-20 4 views
6

używam „oko” jako nadzorca i na zmiany w szablonach trzeba przebiega mniej więcej tak:ansibl: przekazać zmienną do obsługi

eye load service.rb 
eye restart service.rb 

Chcę określić to jako pojedynczy obsługi dla wszystkich aplikacje i nazwać jak

eye reload appname 

a w przewodnika działać tak:

- name: reload eye service 
command: eye load /path/{{ service }}.rb && eye restart {{ service }} 

Ale nie mogę znaleźć sposób, aby przekazać zmienną do obsługi. Czy to możliwe?

+0

To wygląda duplikatu z http://stackoverflow.com/questions/25694249/ansible-using-with-items-with-notify-handler – Rachel

+0

użyj modułu powłoki [http://docs.ansible.com/ansible/shell_module.html] –

+1

@va leriy-solovyov, nie robi żadnej różnicy, z wyjątkiem tego, że '' '&&' '' działałoby zgodnie z oczekiwaniami. Parametrowe procedury obsługi działają tylko w ansibla 2.0, więc sposób działania polega na użyciu nazwy usługi w nazwie modułu obsługi: '' '- name: reload eye {{service}} powłoka: eye load/path/{{service}}. rb i& eye restart {{service}} '' ' – hryamzik

Odpowiedz

0

złomu/main.yml:

- name: restart my service 
    shell: eye load /path/{{ service }}.rb && eye restart {{ service }} 

Więc można skonfigurować zmienną poprzez domyślne defaults/main.yml:

service : "service" 

lub można zdefiniować {{}} chociaż usługa linii poleceń :

ansible-playbook -i xxx path/to/playbook -e "service=service" 

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

PS: http://docs.ansible.com/ansible/playbooks_intro.html#playbook-language-

example 
--- 
- hosts: webservers 
    vars: 
    http_port: 80 
    max_clients: 200 
    remote_user: root 
    tasks: 
    - name: ensure apache is at the latest version 
    yum: name=httpd state=latest 
    - name: write the apache config file 
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf 
    notify: 
    - restart apache 
    - name: ensure apache is running (and enable it at boot) 
    service: name=httpd state=started enabled=yes 
    handlers: 
    - name: restart apache 
     service: name=httpd state=restarted 

http://docs.ansible.com/ansible/playbooks_intro.html#handlers-running-operations-on-change

Jeśli kiedykolwiek chcesz opróżnić cały obsługi poleceń natychmiast choć w 1.2 i później można:

tasks: 
    - shell: some tasks go here 
    - meta: flush_handlers 
    - shell: some other tasks 
+1

To zadziała, ale tylko dla pojedynczej aplikacji, która musi zostać zrestartowana. Handler zostanie wyrzucony tylko jeden raz na końcu playbooka. Działałoby jednak, gdyby uchwyt pętli nad listą i dla każdej usługi, która musi zostać zrestartowana, pozycja jest dodawana do tej listy przez 'set_fact'. – udondan

+0

Dodałem przykład, gdy opróżnisz procedury obsługi przed następnym zadaniem. PS: Może potrzebujesz reorganizacji swojego playbooka? –