Ansible 角色说明 | 备忘单
角色是 Ansible 的一项强大功能,可促进重用并进一步促进配置模块化,但 Ansible 角色经常被忽视,取而代之的是针对手头任务的简单剧本。好消息是,Ansible 角色易于设置,并在必要时允许复杂性。与我一起了解如何设置和部署简单的 Ansible 角色的基础知识。奖励:下载下面的 Ansible 角色备忘单!
Ansible 角色的剖析
Ansible 角色的概念很简单;它是一组变量、任务、文件和处理程序,存储在标准化的文件结构中。角色最复杂的部分是调用目录结构,但有帮助。内置的ansible-galaxy命令有一个子命令,它将为我们创建角色骨架。只需使用它即可ansible-galaxy init <ROLE_NAME>
在当前工作目录中创建新角色。您将在此处看到在新角色中创建了几个目录和文件:
文件和目录的数量可能看起来很吓人,但它们相当简单。大多数目录都包含一个main.yml文件;Ansible 使用每个文件作为读取目录内容的入口点(文件、模板和测试除外)。您可以自由地将任务和变量分支到每个目录中的其他文件中。但是,当您这样做时,您必须使用目录的main.yml中的include指令才能将您的文件用作角色的一部分。在简要介绍每个目录的用途后,我们将仔细研究这一点。默认目录指定用于优先级最低的变量默认值。换句话说:如果变量未在其他地方定义,则将使用defaults/main.yml中给出的定义。文件和模板目录具有类似的用途。它们分别包含角色中使用的附属文件和 Ansible 模板。这些目录的优点在于,在角色中工作时,Ansible 不需要存储在其中的资源的路径。Ansible 首先检查它们。如果要引用角色之外的文件,您仍可以使用完整路径,但是,最佳实践建议您将所有角色组件放在一起。handlers 目录用于存储 Ansible 处理程序。如果您不熟悉,Ansible 处理程序只是在剧集中标记以在剧集完成时运行的任务。您可以根据角色的需要拥有任意数量的处理程序。meta 目录包含作者信息,如果您选择在galaxy.ansible.com上发布角色,这些信息会很有用。meta 目录还可用于定义角色依赖关系。您可能会想到,角色依赖关系允许您要求在相关角色之前安装其他角色。README.md文件只是 markdown 格式的 README 文件。此文件对于发布到galaxy.ansible.com的角色至关重要,老实说,即使您不公开此文件,该文件也应该包含角色如何运作的一般描述。task目录是您编写大部分角色的地方。此目录包含您的角色将运行的所有任务。理想情况下,每个逻辑相关的任务系列都将放在各自的文件中,并通过任务目录中的main.yml文件简单地包含在内。测试目录包含一个示例清单和一个test.yml剧本。如果您有一个围绕角色构建的自动化测试流程,这可能会很有用。当您构建角色但使用它不是强制性的时,它也会很方便。最后创建的目录是vars目录。您可以在此处创建定义角色所需变量的变量文件。此目录中定义的变量仅供角色内部使用。最好将角色变量名称纳入命名空间,以防止与角色之外的变量发生潜在的命名冲突。例如,如果您在基线剧本中需要一个名为config_file的变量,则您可能希望将变量命名为baseline_config_file,以避免与其他地方定义的另一个可能的config_file变量发生冲突。
创建一个简单的角色
如前所述,Ansible 角色可以根据您的需要变得复杂或简单。有时,从简单角色开始,然后在巩固基本功能后迭代到更复杂的角色会很有帮助。让我们尝试一下,定义一个名为base_httpd的角色,该角色使用简单的配置和一个非常简单的网站安装 httpd。首先,我们需要创建我们的角色。我们可以手动创建每个目录和文件,但让ansible-galaxy为我们完成繁重的工作要简单得多,只需运行ansible-galaxy init base_httpd
:接下来,我们可以在文件目录中创建简单的网页。出于学术目的,我们可以创建一个名为index.html的文件,其中包含一些经过验证的示例文本:
我们将通过从全新安装的 httpd 中复制现有模板来创建httpd.conf文件模板。让我们借此机会在我们的角色中定义几个默认变量。我们将默认监听端口为 80,LogLevel 默认为警告。我们可以通过在defaults/main.yml中添加条目来做到这一点:您会注意到这里的模板文件具有.j2扩展名作为自定义,并且我已使用 grep 突出显示我们通过将httpd.conf中的默认值替换为 Ansible 变量来自定义模板的位置。然后我展示了在defaults/main.yml中定义变量的位置。 这里最好使用默认值而不是变量,因为它允许以后进行自定义,而无需更改实际角色。现在我们有了简单的网站和配置,我们将需要创建任务来实现我们的网络服务器。为了举例说明,我将把我们的 httpd 设置隔离到其自己的 yaml 文件(位于task/httpd.yml)中,然后将该文件包含到task/main.yml中: 我们使用 yum、template、copy 和 service 模块来安装、配置和启动我们的 Web 服务器。值得注意的是,我引用httpd.yml、httpd.conf.j2和index.html文件时没有使用完整路径,因为它们存储在角色中。
部署角色
大部分艰苦的工作都是在我们构建角色本身时完成的。相比之下,部署角色很容易。我们只需要设置一个简单的剧本并使用适当的关键字引入角色:我们可以在部署角色后轻松添加典型任务,也可以通过简单地将它们添加到列表中来部署其他角色。此外,我们可以使用相同的变量名覆盖我们配置的默认变量,如下所示:Ansible 角色提供了一种强大的方法来组织部署工件和任务,以便重用和共享。ansible-galaxy中提供的工具使设置新角色变得前所未有的简单。任何对编写 Ansible 剧本有基本了解的人都可以轻松创建 Ansible 角色,下载下面的备忘单以供将来参考。要免费启动您的第一个 Ansible 动手实验室, 请阅读这篇文章。有关 Ansible 的其他阅读材料,以下是一些有趣的帖子:
- Ansible 角色备忘单
- 使用 Ansible Facts 查看系统属性
- Ansible 与 Terraform:战斗!
- Ansible 中三种鲜为人知的文件操作策略
- Ansible 和 SSH 注意事项
- 通过实践学习 Ansible
立即开始您的 7 天免费试用,开始您的 Ansible 学习之旅!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~