Có giải pháp thích hợp cho vấn đề này là của Ansible 2.2.
xử lý cũng có thể “lắng nghe” để chủ đề chung chung, và nhiệm vụ có thể thông báo những chủ đề như sau:
handlers:
- name: restart memcached
service: name=memcached state=restarted
listen: "restart web services"
- name: restart apache
service: name=apache state=restarted
listen: "restart web services"
tasks:
- name: restart everything
command: echo "this task will restart the web services"
notify: "restart web services"
sử dụng này làm cho nó dễ dàng hơn nhiều để kích hoạt nhiều bộ xử lý. Nó cũng tách riêng xử lý từ tên của họ, làm cho nó dễ dàng hơn để chia sẻ bộ xử lý trong playbooks và vai trò
Cụ thể cho câu hỏi, điều này sẽ làm việc:
- name: Check if restarted
shell: check_is_started.sh
register: result
listen: Restart processes
- name: Restart conditionally step 2
service: name=service state=restarted
when: result
listen: Restart processes
và trong nhiệm vụ, thông báo xử lý thông qua 'quá trình khởi động lại'
http://docs.ansible.com/ansible/playbooks_intro.html#handlers-running-operations-on-change
Thật vậy, có vẻ như trong Ansible 2.2, tính năng này không khả dụng. (! 'LỖI 'notfiy' không phải là một thuộc tính có giá trị trong một Handler') –
@ leo-the-hưng Dường như bạn có một typo: 'notfiy' thay vì' notify' – timdiels
derp, cảm ơn bạn. công trình hạ tầng đêm khuya không phải là ý tưởng tốt nhất –