Ansible 角色以及如何在剧本中使用它们

在编写 Ansible playbook 文件的过程中,您可能已经注意到您可以重用现有 playbook 中定义的一些代码。 为了 example,您可以将代码重新用于在一个托管主机上安装 MariaDB 数据库服务器,并为另一台远程主机使用不同的主机名、用户和密码。 这节省了大量时间和精力,这些时间和精力本来可以用于从头开始编写新的剧本文件。 这就是 Ansible 角色概念的用武之地。

ansible 角色是将任务重新分配到单个文件中的概念,这些文件更易于管理和操作。 每个角色都提供了一组任务、变量和处理程序(仅举几例),它们是其实现所必需的。 角色允许用户将长而复杂的剧本结构重新组织成更简单、更短、更整洁的剧本文件。 正如我们之前提到的,角色是可重用的,在剧本文件中调用角色可以简化代码并消除重复。 应用程序的安装和配置等重复性任务可以打包在单独的文件中,并在各种托管主机之间重复使用。

在本指南中,您将学习如何在剧本中创建和使用 Ansible 角色。 为了演示,我们将创建一个角色来安装 Apache Web 服务器并配置防火墙以打开端口 80。

如何创建 Ansible 角色

我们将从创建一个简单的 Ansible 角色开始。 要创建角色,只需使用以下命令语法 where 我的角色 是角色的名称。

$ ansible-galaxy init myrole

为了 example创建一个名为 测试角色 调用命令。

$ ansible-galaxy init  test-role

从输出中,我们得到该命令产生了一个 测试角色 目录,默认情况下,它包含一些默认目录。 您可以使用 命令列出它们,如图所示。

$ tree test-role

让我们简要概述每个目录包含的内容

这 ‘默认值‘ 文件夹 – 此目录包含角色所需的默认变量。 这些变量的优先级最低,因此很容易覆盖。

这 ‘文件‘ 文件夹 – 此文件夹包含要复制到托管主机或远程主机的文件。

这 ‘处理程序‘ 文件夹——该目录包含通常由“通知”指令调用的处理程序。 您可以了解有关 Ansible 处理程序的更多信息。

这 ‘‘ 文件夹 – 包含角色的元数据,例如实例作者、依赖项等。

这 ‘任务‘ 文件夹 – 它包含一个 YAML 文件,该文件定义了要由角色本身执行的任务列表。 它包含 主要的.yml 文件。

这 ‘模板‘ 文件夹 – 该目录包含模板文件,可以根据认为适合配置角色进行修改。

这 ‘测试‘ 文件夹 – 将测试与 Ansible playbook 文件集成。

这 ‘变量‘ 文件夹 – 包含稍后将由角色使用的变量。 角色。 与 ‘ 中的变量相比,这些变量具有更高的优先级默认值‘ 目录。

我们将创建两个角色用于演示目的:

混帐 角色——这将安装最新版本的 Git。

阿帕奇 角色 – 这将安装 Apache 网络服务器

如下创建它们:

$ sudo ansible-galaxy init git
$ sudo ansible-galaxy init apache

此后,我们需要通过编辑 主要的.yml 文件中 ‘任务‘ 每个角色中的文件夹。 让我们从定义 混帐 角色。

$ sudo vim git/tasks/main.yml

如图所示,为 git 角色定义任务。

Save 这 主要的.yml 文件并退出。

接下来,定义任务 Apache 角色。

$ sudo vim apache/tasks/main.yml

指定安装 Apache 网络服务器。

同样,保存 主要的.yml 文件并退出。

创建剧本文件并调用角色

一旦每个角色的任务在 主要的.yml 为每个角色创建一个文件,创建一个剧本文件并引用角色,如图所示。

$ sudo vim roles_demo.yml

笔记:

您需要在剧本中指定角色的完整路径。

角色:

  • /路径/目标/角色

在这个 example,角色与剧本文件位于同一目录中,只需通过名称调用它们就可以了。

最后,运行 playbook 文件。

$ sudo ansible-playbook /etc/ansible/roles_demo.yml

将引用 playbook 文件中定义的角色并执行它们各自的任务。 在这里,Ansible 安装了 git 和 Apache 网络服务器。

您可以通过运行显示的命令来验证安装。

$ git --version
$ apachectl -v

正如您所注意到的,剧本文件很简短,易于理解,因为任务已被剧本文件中指定的角色引用。

加起来

Ansible 角色有助于组织剧本文件并有助于避免代码重复。 它们可以被其他 playbook 文件重用和引用,以在不同节点上执行类似的任务,从而节省时间和精力,这些时间和精力本来可以用于编写新的 playbook。 总的来说,角色让工作更轻松。