2014-10-20 20 views
6

tôi sử dụng một "con mắt" như một giám sát viên và những thay đổi trong các mẫu phải chạy một cái gì đó như thế này:ansible: pass biến để một handler

eye load service.rb 
eye restart service.rb 

Tôi muốn xác định điều này như một handler duy nhất cho tất cả các ứng dụng và gọi nó là như

eye reload appname 

và trong một handler hoạt động như thế này:

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

Nhưng tôi không thể tìm thấy một cách để vượt qua biến cho một người xử lý. Có thể không?

+0

này trông giống như một bản sao của http://stackoverflow.com/questions/25694249/ansible-using-with-items-with-notify-handler – Rachel

+0

sử dụng mô-đun trình bao [http://docs.ansible.com/ansible/shell_module.html] –

+1

@va leriy-solovyov, nó không tạo ra bất kỳ sự khác biệt nào ngoại trừ '' '&&' '' sẽ hoạt động như mong đợi. Các trình xử lý tham số chỉ hoạt động trong ansible 2.0 nên cách propper là sử dụng tên dịch vụ trong tên bộ xử lý: '' '- name: reload eye {{service}} shell: eye load/path/{{service}}. rb && eye restart {{service}} '' ' – hryamzik

Trả lời

0

xử lý/main.yml:

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

Vì vậy, bạn có thể thiết lập biến qua mặc định mặc định/main.yml:

service : "service" 

hoặc bạn có thể xác định {{}} dịch vụ mặc dù dòng lệnh :

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

Nếu bạn đã bao giờ muốn tuôn ra lệnh cho tất cả các xử lý ngay lập tức, mặc dù trong 1.2 và sau đó, bạn có thể:

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

Điều đó sẽ hoạt động, nhưng chỉ cho một ứng dụng duy nhất cần được khởi động lại. Một người xử lý sẽ chỉ được kích hoạt một lần ở cuối cuốn sách. Nó sẽ làm việc mặc dù nếu trình xử lý vòng lặp trên một danh sách và cho mỗi dịch vụ cần được khởi động lại một mục sẽ được thêm vào danh sách đó thông qua 'set_fact'. – udondan

+0

Tôi đã thêm ví dụ khi bạn xóa các trình xử lý trước tác vụ tiếp theo. PS: Có lẽ bạn cần tổ chức lại sách của bạn? –

Các vấn đề liên quan