示例:安装nginx
--- - hosts: hadoop #指定主机组 remote_user: root #远程执行命令的用户 gather_facts: no #是否获取远程主机的信息 tasks: - name: install nginx yum: name: nginx state: present notify: restart nginx #通知机制,当这个任务执行的时候,通知handlers执行 - name: start nginx server service: name: nginx state: started handlers: - name: restart nginx service: name: nginx state: restarted
注:在剧本编写完以后,可以使用--syntax-check检查剧本的语法是否有问题,使用--check或者-C来预执行剧本。
handlers的用处:一般是当修改某个配置文件的时候,通过handlers来执行某个任务。
一般情况下,handlers的执行需要在所以的tasks执行完以后才开始执行,那么如果想要在执行某一个tasks以后就执行对应的handlers呢?这个时候需要使用一个模块:meta
用法: - meta: flush_handlers
如:
--- - hosts: hadoop #指定主机组 remote_user: root #远程执行命令的用户 gather_facts: no #是否获取远程主机的信息 tasks: - name: install nginx yum: name: nginx state: present notify: restart nginx #通知机制,当这个任务执行的时候,通知handlers执行
-meta: flush_handlers - name: start nginx server service: name: nginx state: started handlers: - name: restart nginx service: name: nginx state: restarted
在某些情况下,可能需要同时调用多个handlers,或者handlers调用其他的handlers。
1、一个任务同时调用多个handlers。
- name: test command: /test.sh notify: - restart nginx - restart mysql
2、要handlers调用handlers,则在handlers中直接使用notify
handlers: - name: test service: name: nginx state: restarted notify: restart mysql
当剧本执行失败以后,handlers可能并没有被触发,也就不会执行了,如果想不管任务是否成功执行,都强制执行handlers。
在这个时候,可以在执行playboox的时候,添加--force-handlers来强制执行handlers