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只会在需要时被调用。"。

posted @ 2023-04-04 10:23  武平宁  阅读(66)  评论(0)    收藏  举报