ansible handlers

示例:安装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

原文地址:https://www.cnblogs.com/yjt1993/p/10968434.html