FAQ: ansible playbook 中 tasks 与 handlers 的区别
ansible自动化运维有两种执行方式,一种是对远程主机批量执行命令,使用ansible命令,直接调用模块加参数执行;另一种是对远程主机批量执行脚本,也是调用模块,但是要把参数按照yanl语法写到一个文件里,执行方式是ansible-playbook 文件名。
以下是一个同时包含tasks和handlers的Ansible playbook示例:
---
- name: Example playbook
hosts: web_servers
become: true
tasks:
- name: Install Apache
yum:
name: httpd
state: present
notify:
- Start Apache
- name: Configure Apache
template:
src: /path/to/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify:
- Reload Apache
handlers:
- name: Start Apache
service:
name: httpd
state: started
- name: Reload Apache
service:
name: httpd
state: reloaded
在这个示例中,tasks定义了两个操作:安装Apache和配置Apache。在每个任务的最后,使用notify关键字指定了需要调用的handlers。
handlers定义了两个操作:启动Apache和重新加载Apache。当前面的tasks完成后,handlers会被自动调用以确保状态更改得以生效。
反应快的同学应该已经知道了,tasks 是任务的序列,比如安装软件和修改配置,相当于程序中的
main函数
。 而安装软件之后的start
与修改配置之后的reload
在需要时被调用,相当于功能函数
。
所以说,"Tasks是用于定义需要在目标主机上执行的操作列表,而handlers是用于响应状态更改的操作集合。Tasks会按照定义的顺序依次执行,而handlers只会在需要时被调用。"。