如何在 Ansible Playbook 中定义和使用处理程序

在 Ansible 中,句柄是任务的同义词,但这里有一个问题——当它被侦听的另一个事件或任务调用时,它会被触发以采取行动。 处理程序主要用于执行辅助任务,这些任务会继续安装新服务,例如 Web 服务器或数据库。 这些任务包括在配置文件中进行修改后重新启动或重新加载服务。 处理程序只运行然后一个任务承担一个 通知 指示。

带有用于重启 Nginx 的处理程序的 Ansible Playbook 文件

为了牢牢掌握 Ansible 中处理程序的作用,我们将创建一个简单的 playbook 文件,名为 install_nginx.yml. 该剧本包含在远程 Ubuntu 节点上安装 Nginx 网络服务器的单个剧本。 安装后, 通知 指令指示处理程序重新启动 Nginx 服务

请注意“通知”定义与处理程序的名称匹配。 正如你所看到的’重启 Nginx’ 下的定义 通知 指令匹配 playbook 中 Handler 的名称。

现在,让我们运行 playbook 文件。

$ ansible-playbook /etc/ansible/install_nginx.yml -K

从下面的输出中,您可以看到 Ansible 先执行了任务,然后是处理程序。 此外,您可以看到它记录了 2 个更改,这些更改实际上是 Nginx 的安装和由处理程序执行的 Nginx 服务的重新启动。 首要任务是安装 Nginx,而次要任务是重启 Nginx 网络服务器。

具有多个播放和处理程序的 Ansible Playbook 文件

此外,您可能会有一个剧本文件包含多个播放和处理程序的场景。

这些是我们的剧本:

  1. 安装 Nginx
  2. 允许通过 UFW 防火墙的 HTTP 流量。

播放执行后,通知指令调用每个处理程序来执行它们的任务——重新启动 Nginx 并重新加载 UFW 防火墙。

在这个 example,处理程序执行的次要任务是:

  1. 重启 Nginx 服务
  2. 重新加载防火墙

让我们再次运行剧本。

$ ansible-playbook /etc/ansible/install_nginx.yml -K

在这里,我们总共有四个任务。 前两个由戏剧执行,其余两个由处理程序处理。 您可以看到,在运行后,playbook 记录了 4 次更改,这些更改对应于执行的操作或任务的数量。

结论

显然,使用处理程序是一个非常简单直接的练习。 处理程序就像任务一样,只是它们由 ‘通知’ 并且最后在剧本中执行。