type
status
date
slug
summary
tags
category
icon
password

Ansible角色创建流程

在Ansible中创建角色不需要任何特殊的开发工具。创建和使用角色的过程分为三步:
  1. 创建角色目录结构
  1. 定义角色内容
  1. 在playbook中使用角色

1. 创建角色目录结构

Ansible会在Ansible Playbook所在目录的roles子目录中查找角色。每个角色都拥有自己的目录,并采用标准化的目录结构。通过这种结构,您可以利用Playbook和其他支持文件来存储角色。
例如,以下目录结构包含了定义motd角色的文件:
  • README.md:提供人类可读的基本角色描述、关于如何使用该角色的文档和示例,以及任何非Ansible角色要求。
  • meta子目录:包含一个main.yml文件,指定有关模块的作者、许可证、兼容性和依赖项的信息。
  • files子目录:包含固定内容的文件。
  • templates子目录:包含角色可部署的模板。
  • 其他子目录中可以包含main.yml文件,定义默认的变量值、处理程序、任务、角色元数据或变量,具体取决于其子目录。
如果某一子目录存在但为空(如本例中的handlers),它将被忽略。如果角色不使用某一功能,可以完全省略其子目录。

2. 定义角色内容

创建目录结构后,必须编写角色内容。建议从ROLENAME/tasks/main.yml任务文件开始,该文件是角色运行的主要任务列表。
以下是tasks/main.yml文件的示例,它管理受管主机上的/etc/motd文件,并使用template模块将名为motd.j2的模板部署到受管主机上:
以下是roles/motd/templates/motd.j2模板的内容,它引用了Ansible事实和system_owner变量:
角色为system_owner变量定义了一个默认值。在角色目录结构中的defaults/main.yml文件中设置这个值:
该电子邮件地址在角色应用时写入到受管主机的/etc/motd文件中。

角色内容开发的推荐做法

为了最大限度地提高角色的开发效率,考虑以下推荐做法:
  • 在角色自己的版本控制存储库中维护每个角色,Ansible适合使用基于Git的存储库。
  • 使用变量来配置角色,以便在类似情况下执行类似任务。
  • 避免在角色中存储敏感信息,如密码或SSH密钥。配置角色变量,以便在使用不敏感的默认值在play中调用时包含敏感值。使用角色的Playbook负责通过Ansible Vault变量文件或其他方式定义敏感变量。
  • 使用ansible-galaxy init命令启动您的角色,然后删除不必要的文件和目录。
  • 创建和维护README.mdmeta/main.yml文件,以记录角色的用途、作者和用法。
  • 让角色专注于特定的用途或功能,避免让一个角色承担过多任务。
  • 经常重用角色,避免为边缘配置创建新的角色。如果现有角色能够完成大部分必要配置,请重构现有角色以集成新的配置方案。
  • 使用集成和回归测试技术,确保角色提供所需的新功能,而不对现有的Playbook造成问题。

注意

有关编写角色时应遵循的良好实践的非官方列表,可从Red Hat Cop Automation Good Practices获取。

Ansible角色的变量管理与依赖关系

通过变量更改角色行为

在Ansible中,可以通过定义变量来改变角色的行为,以便使其与相关的配置场景相符。使用变量的角色更通用和可重复使用,允许在不同上下文中灵活应用。以下是变量覆盖优先级的顺序:
  1. 清单文件中定义的主机变量或组变量
  1. Playbook项目的group_varshost_vars目录下的YAML文件
  1. Play中的vars关键字嵌套定义的变量
  1. 在Play的roles关键字中包含该角色时定义的变量

示例:使用变量与角色

以下示例演示如何将motd角色与system_owner变量的不同值结合使用:
在这个示例中,system_owner变量的值会替换角色默认变量中的同名变量。如果在vars关键字内定义的变量与角色的varsdefaults目录中的同名变量存在冲突,vars内的定义不会替换角色的vars中的同名变量。

变量优先顺序注意事项

  • 大多数其他变量会覆盖角色的默认变量,如清单变量、Play变量和内嵌的角色参数。
  • 只有少数变量能够覆盖角色的vars目录中定义的变量,例如通过include_vars加载的变量、注册的变量和角色参数。
  • 声明为角色参数的变量优先级极高,可以覆盖角色的vars目录中定义的变量。如果角色参数名称与Play变量或角色的vars中的变量名称相同,该角色参数将覆盖其他变量。

定义角色依赖项

角色可以定义其他角色作为依赖项。这在角色目录的meta/main.yml文件中设置。例如,一个定义文档服务器的角色可能依赖于一个安装和配置Web服务器的角色:

注意事项

  • meta/main.yml文件还可以包含顶级galaxy_info键,描述角色的属性,如作者、用途、许可证和支持的Ansible版本。
  • 默认情况下,如果多个角色有相同的依赖关系且在Playbook中多次调用,角色仅在第一次出现时运行。可以通过将allow_duplicates变量设置为yes来改变这一行为。

重要提示

  • 限制角色对其他角色的依赖关系,过多的依赖关系会使维护变得复杂,尤其是在角色之间存在复杂交互时。保持角色的简洁和专注于单一功能,有助于提高代码的可维护性和可读性。
好的!以下是更详细的实验手册,包括代码注释、各文件路径表,以及更加清晰的步骤说明。

 

练习:

Ansible 角色创建实验手册

此手册指导在 Ansible 中创建一个 HTTP 服务器角色,包括安装 httpd、设置虚拟主机以及验证配置。该角色使用模板文件为 Apache 服务器配置虚拟主机,并自动部署一个简单的 HTML 文件。

实验目录结构

实验所用的主要文件和目录结构如下所示:

步骤 1:实验环境准备

  1. 启动实验环境并进入工作目录。

    步骤 2:创建角色目录和初始化角色

    1. 创建 roles 目录,并进入该目录:
      1. 使用 ansible-galaxy 初始化一个名为 myvhost 的角色。ansible-galaxy 会自动生成角色的标准目录结构。
        1. 删除 myvhost 角色中默认生成的 defaultsvarstests 目录。

          步骤 3:编写主要任务文件

          1. 打开 roles/myvhost/tasks/main.yml 文件,配置安装和启动 httpd 服务并部署虚拟主机文件。

            步骤 4:编写 Handlers 文件

            1. roles/myvhost/handlers/main.yml 中定义 httpd 服务的重启 handler。该 handler 会在虚拟主机配置文件更新后被触发。

              步骤 5:创建虚拟主机模板文件

              1. 在项目根目录创建模板文件 vhost.conf.j2,定义 Apache 虚拟主机的配置结构。
                1. 这个模板文件会根据你的服务器信息(比如服务器的名称和域名)自动生成一个配置文件,具体作用如下:
                  • ServerAdmin:设置网站管理员的邮箱,用于接收错误报告。
                  • ServerName:指定网站的域名,自动填入你的服务器域名。
                  • ErrorLog:定义错误日志的保存位置,便于查看网站出错的信息。
                  • CustomLog:定义访问日志的保存位置,用于记录访问网站的用户行为。
                  • DocumentRoot:指定网站的文件存放位置,比如网站首页和其他文件都放在这里。
                  • <Directory>:设置该目录的访问权限,允许谁可以查看这个网站。
                  当这个配置文件被放到 /etc/httpd/conf.d/vhost.conf 后,Apache 就会根据这些设置来服务相应的网站。这样你就可以在同一台服务器上轻松管理多个网站了。
                  • 使用 {{ ansible_fqdn }} 动态替换服务器名称。
                  • 定义日志文件路径和 DocumentRoot,该路径会在 HTML 文件复制时用到。
              1. 将模板文件移动到角色的 templates 子目录。

                步骤 6:创建 HTML 文件

                1. 创建 index.html 文件以提供简单的网页内容:

                  步骤 7:创建主剧本文件

                  编写主剧本 use-vhost-role.yml,调用 myvhost 角色完成安装、配置和内容部署。

                  步骤 8:语法检查和运行剧本

                  1. 运行语法检查,确保无语法错误。
                    1. 运行主剧本,完成 HTTP 服务器配置。

                      步骤 9:验证配置

                      1. 运行验证剧本 vertify-httpd.yml,确保 HTTPD 服务安装并运行:
                        1. 运行验证剧本 vertify-config.yml,确保配置文件部署正确:
                          1. 运行验证剧本 vertify-content.yml,确保 HTML 内容部署正确:
                            1. 使用 curl 命令访问配置的网页,确认服务正常运行:

                              步骤 10:结束实验

                              实验完成后,运行以下命令结束实验环境:

                              以上实验手册包括了每一步操作的详细解释、代码注释、文件路径说明,以及常见验证命令。这些步骤和说明可以帮助你全面了解 Ansible 角色的创建和 HTTP 服务器的自动化配置。
                              相关文章
                              RHCE 9版本考试资料
                              Lazy loaded image
                              40.总复习-4 实验手册:galaxy角色配置与部署
                              Lazy loaded image
                              39.总复习-3 实验手册:配置 RHEL 系统角色和用户管理
                              Lazy loaded image
                              38.总复习-2 实验手册:Ansible Web 服务器配置和测试
                              Lazy loaded image
                              37.总复习-1 实验手册:配置和运行Ansible脚本
                              Lazy loaded image
                              36:总复习
                              Lazy loaded image
                              23:使用角色和Ansible内容合集简化Playbook-3 从外部内容源部署角色 21:使用角色和Ansible内容合集简化Playbook-1 描述角色结构
                              Loading...
                              みなみ
                              みなみ
                              一个普通的干饭人🍚
                              最新发布
                              02-生成AIパスポート試験対策:第2章「生成AI」
                              2025-2-1
                              01-生成AIパスポート試験対策:第1章「人口知能」
                              2025-2-1
                              究極のAWS認定 AI 実践者 AIF-C01 - 学習メモ
                              2025-1-27
                              不要再傻傻的直接买NISA啦
                              2025-1-27
                              Kubernetes、仮想マシンとコンテナの概念を超簡単に解説!
                              2025-1-24
                              529-AWS SAP AWS 「理論・実践・一問道場」VPCエンドポイント
                              2025-1-22
                              公告
                              🎉欢迎访问我的博客🎉
                              - 感谢您的支持 --
                              本站点于2024/09/01建立
                              👏主要分享IT相关主题👏
                              系统管理:
                              Redhat…
                              容器和编排:
                              Kubernetes、Openshift…
                              云计算:
                              AWS、IBM…
                              AI入门
                              以及技术笔记和考证经验
                              定期更新,欢迎互动。
                              感谢访问!
                              快速浏览相关标签