开发 Ansible 自动化内容
开发 Ansible 自动化内容以运行自动化作业
摘要
前言
感谢您对 Red Hat Ansible Automation Platform 的关注。Ansible Automation Platform 是一个商业产品,它可以帮助团队通过增加控制、知识、协调基于 Ansible 的环境来更好地管理多阶的复杂部署环境。
本指南介绍了如何开发 Ansible 自动化内容,以及如何使用它从 Red Hat Ansible Automation Platform 运行自动化作业。本文档已更新,以包含 Ansible Automation Platform 最新版本的信息。
对红帽文档提供反馈
如果您对本文档有任何改进建议,或发现错误,请通过 https://access.redhat.com 联系技术支持来创建一个请求。
Red Hat Developer Hub 的 Ansible 插件只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
第 1 章 Ansible 开发工具
Ansible 开发工具(ansible-dev-tools
)是 Ansible Automation Platform 提供的一组工具,可帮助自动化创建、测试和部署 playbook 项目、执行环境和集合。
红帽 Ansible VS Code 扩展集成了大部分 Ansible 开发工具:您可以从 VS Code 用户界面中使用这些工具。
在 playbook 的本地开发过程中,在 CI 管道(lint 和测试)中使用 Ansible 开发工具。
本文档论述了如何使用 Ansible 开发工具来创建包含可以在项目内重复使用的 playbook 和角色的 playbook 项目。它还介绍了如何在 {AAP} 实例中测试 playbook 并部署项目,以便您可以在自动化作业中使用 playbook。
1.1. Ansible 开发工具组件
当您安装了 Ansible 扩展以及从命令行中的其余部分时,您可以从 VS Code UI 操作一些 Ansible 开发工具。VS Code 是 Linux、Mac 和 Windows 上提供的免费开源代码编辑器。
- Ansible VS Code 扩展
这没有与 Ansible Automation Platform RPM 软件包一起打包,但它是自动化创建工作流不可或缺的一部分。在 VS Code UI 中,您可以使用 Ansible 开发工具进行以下任务:
- 为 playbook 项目或集合构建目录。
- 使用语法高亮显示和自动完成的帮助编写 playbook。
- 使用 linter 调试您的 playbook。
-
使用
ansible-playbook
执行 Ansible Core 的 playbook。 -
使用
ansible-navigator
在执行环境中执行 playbook。
在 VS Code 扩展中,您还可以使用 IBM watsonx Code Assistant 连接到 Red Hat Ansible Lightspeed。
- 命令行 Ansible 开发工具
您可以使用从命令行中的 Ansible 开发工具执行以下任务,包括 VS Code 中的终端:
- 创建执行环境。
- 测试您的 playbook、角色、模块、插件和集合。
第 2 章 开发自动化内容的工作流
2.1. 工作流
2.1.1. 创建
在 create 阶段中,您可以使用 VS Code 在本地创建新 playbook 项目。以下是一个典型的工作流:
- 在 VS Code 中安装并运行 Ansible 扩展。
- 从 VS Code 构建 playbook 项目.
- 将 playbook 文件添加到您的项目中,并在 VS Code 中编辑它们。
2.1.2. 测试
-
使用
ansible-lint
帮助调试您的 playbook。 - 选择或创建自动化执行环境,以便本地环境在 Ansible Automation Platform 上复制环境。
-
使用
ansible-playbook
或在执行环境中使用ansible-navigator
从 VS Code 运行您的 playbook。 - 在复制生产环境的执行环境中运行它们来测试您的 playbook。
2.1.3. 部署
- 将您的 playbook 项目推送到源控制存储库。
- 在 Ansible Automation Platform 上设置凭证,以从源代码控制存储库拉取,并为 playbook 存储库创建项目。
- 如果您已创建了执行环境,请将其推送到私有自动化中心。
- 在 Ansible Automation Platform 上创建作业模板,从项目运行 playbook,并指定您要使用的执行环境。
第 3 章 安装 Ansible 开发工具
红帽提供了两个安装 Ansible 开发工具的选项。
- 在 VS Code 中运行的 RHEL 容器上安装。您可以在 MacOS、Windows 和 Linux 系统上安装这个选项。
- 使用 RPM (Red Hat Package Manager)软件包在本地 RHEL 系统中安装。
3.1. 要求
要安装和使用 Ansible 开发工具,您必须满足以下要求。此流程中指明了对 Windows 安装和容器化安装的额外要求。
- Python 3.10 或更高版本。
- 添加 Ansible 扩展的 VS Code (Visual Studio Code)。请参阅 安装 VS Code。
- 对于容器化安装,Micorsoft Dev Containers VS Code 扩展。请参阅 安装和配置 Dev Containers 扩展。
容器化平台,如 Podman、Podman 桌面、Docker 或 Docker 桌面。
注意Windows 上 Ansible 开发工具的安装过程仅涵盖 Podman 桌面的使用。请参阅在 Windows 机器上安装 Podman Desktop。
-
您有一个红帽帐户,您可以在
registry.redhat.io
中登录到红帽容器 registry。有关登录到registry.redhat.io
的详情,请参考使用红帽容器 registry 身份验证。
3.1.1. Windows 上 Ansible 开发工具的要求
如果要在 Windows 上的 VS Code 中安装 Ansible 开发工具,则需要额外的要求:
- Windows 子系统 for Linux (WSL2)
- podman Desktop
3.1.1.1. 安装 WSL
安装不带发行版的 WSL2:
$ `wsl --install --no-distribution`
通过为 WSL2 禁用
cgroupsv1
来使用cgroupsv2
:编辑
%USERPROFILE%/wsl.conf
文件并添加以下行来强制cgroupv2
使用:[wsl2] kernelCommandLine = cgroup_no_v1="all"
3.1.1.2. 在 Windows 机器上安装 Podman Desktop
安装 Podman 桌面。按照 Podman 桌面文档中的在 Windows 上安装 Podman 桌面和 Podman 的说明。
您不需要更改设置向导中的默认设置。
确保 podman 机器使用
cgroupsv2
:$ podman info | findstr cgroup
测试 Podman 桌面:
$ podman run hello
3.1.1.3. 为 Podman 桌面配置设置
使用以下内容添加
%USERPROFILE%\bin\docker.bat
文件:@echo off podman %*
这可避免根据 VS Code
Dev
容器扩展所需的 Docker 安装。将
%USERPROFILE%\bin
目录添加到PATH
中。- 选择 Settings 并搜索 "Edit 环境变量 for your account" 以显示所有用户环境变量。
- 突出显示顶部用户变量框中的"路径",单击 并添加路径。
- 点 设置您打开的任何新控制台的路径。
3.1.2. 使用红帽容器 registry 进行身份验证
红帽容器目录提供的所有容器镜像都托管在镜像 registry 上,即 registry.redhat.io
。registry 需要进行身份验证才能访问镜像。
要使用 registry.redhat.io
registry,您必须有一个红帽登录。这与您用来登录到红帽客户门户网站(access.redhat.com)并管理您的红帽订阅的帐户相同。
如果您计划在 VS Code 中的容器上安装 Ansible 开发工具,则必须在启动 VS Code 前登录 registry.redhat.io
,以便 VS Code 可以从 registry.redhat.io
拉取 devtools
容器。
如果您在 VS Code 中的容器中运行 Ansible 开发工具,并且希望拉取执行环境或 devcontainer
以用作执行环境,则必须从 devcontainer
中从 VS Code 中的终端提示符登录。
您可以将 podman login
或 docker login
命令与凭证一起使用,以访问 registry 中的内容。
- Podman
$ podman login registry.redhat.io Username: my__redhat_username Password: ***********
- Docker
$ docker login registry.redhat.io Username: my__redhat_username Password: ***********
有关红帽容器 registry 身份验证的更多信息,请参阅红帽客户门户网站中的 Red Hat Container Registry Authentication。
3.1.3. 安装 VS Code
- 要安装 VS Code,请遵循 Visual Studio Code 文档中的 Download Visual Studio Code 页面上 的说明。
3.1.4. 安装 VS Code Ansible 扩展
Ansible 扩展添加了对 Ansible 的语言支持到 VS Code。它整合了 Ansible 开发工具,以协助创建和运行自动化内容。
有关 Ansible 扩展的完整描述,请参阅 Visual Studio Code Marketplace。
请参阅 学习路径 - Ansible VS Code 扩展入门,以了解使用扩展名 的教程。
安装 Ansible VS Code 扩展:
- 打开 VS Code.
-
点活动栏中的 Extensions (
)图标,或者点击 → 来显示 Extensions 视图。
-
在 Extensions 视图中的搜索字段中,键入
Ansible Red Hat
。 - 选择 Ansible 扩展,然后单击 。
当文件语言被识别为 Ansible 时,Ansible 扩展提供了自动完成、悬停、诊断和 goto 等功能。为文件标识的语言显示在 VS Code 窗口底部的 Status 栏中。
为以下文件分配 Ansible 语言:
-
/playbooks
目录中的 YAML 文件 -
双重扩展名的文件:
.ansible.yml
或.ansible.yaml
-
Ansible 识别的某些 YAML 名称,如
site.yml
或site.yaml
-
文件名包含 "playbook":
playbook .yml
或playbook .yaml
的 YAML 文件
如果扩展没有标识您的 playbook 文件的语言,请按照 将 Ansible 语言关联到 YAML 文件 的步骤进行操作。
3.1.5. 配置 Ansible 扩展设置
Ansible 扩展支持多个配置选项。
您可以在用户级别、工作区级别或特定目录配置扩展设置。基于用户的设置会全局应用,适用于打开的 VS Code 实例。工作区设置存储在您的工作区中,只有在当前工作区被打开时才适用。
出于以下原因,为您的工作区配置设置非常有用:
- 如果您定义和维护特定于 playbook 项目的配置,您可以为单个项目自定义 Ansible 开发环境,而无需为其他工作更改您首选的设置。您可以为 Python 项目、Ansible 项目和 C++ 项目有不同的设置,每个项目都针对相应的堆栈进行了优化,而无需在每次切换项目时手动重新配置设置。
- 如果您在为要与团队共享的项目设置版本控制时包括工作区设置,则每个人都对该项目使用相同的配置。
流程
打开 Ansible 扩展设置:
- 点活动栏中的"扩展"图标。
选择 Ansible 扩展,然后单击"gear"图标,然后选择 Extension Settings 以显示扩展设置。
或者,点 Settings 页面。
→ 打开-
在搜索栏中输入
Ansible
,以显示扩展的设置。
- 选择 Workspace 选项卡来配置当前 VS Code 工作区的设置。
Ansible 扩展设置已预先填充。修改设置以符合您的要求:
- 选中 → → 框以启用 ansible-lint。
-
选中
Ansible Execution Environment: Enabled
框,以使用执行环境。 - 在 Ansible > Execution Environment: image 字段中指定您要使用的执行环境镜像。
- 要使用 Red Hat Ansible Lightspeed,请选中 Ansible > Lightspeed: Enabled 框,并输入 Lightspeed 的 URL。
设置记录在 VisualStudio marketplace 文档中的 红帽页面的 Ansible VS Code 扩展 上。
3.1.6. 将 Ansible 语言与 YAML 文件关联
只有与文件关联的语言设置为 Ansible 时,Ansible VS Code 扩展才起作用。扩展提供有助于创建 Ansible playbook 的功能,如自动完成、悬停和诊断。
Ansible VS Code 扩展会自动将 Ansible 语言与某些文件关联。以下流程描述了如何为不识别为 Ansible 文件的文件设置语言。
手动将 Ansible 语言与 YAML 文件关联
以下流程描述了如何手动将 Ansible 语言分配给在 VS Code 中打开的 YAML 文件。
- 在 VS Code 中打开或创建 YAML 文件。
- 将光标悬停在 VS Code 窗口底部的状态栏中标识的语言上,以打开 Select Language Mode 列表。
从列表中选择 Ansible。
文件 VS Code 窗口底部的状态栏中显示的语言已更改为 Ansible。
将 Ansible 语言的永久文件关联添加到 settings.json
或者,您可以在 settings.json
文件中添加 Ansible 语言的文件关联。
打开
settings.json
文件:- 单击 → openmpi 以打开命令面板。
-
在搜索框中输入
Workspace 设置
,然后选择 Open Workspace Settings (JSON)。
将以下代码添加到
settings.json
。{ ... "files.associations": { "*plays.yml": "ansible", "*init.yml": "yaml", } }
3.1.7. 安装和配置 Dev Containers
扩展
如果要安装容器化版本的 Ansible 开发工具,则必须在 VS Code 中安装 Microsoft Dev Containers 扩展。
- 打开 VS Code.
-
点活动栏中的 Extensions (
)图标,或者点击 → 来显示 Extensions 视图。
-
在 Extensions 视图中的 search 字段中,键入
Dev Containers
。 - 从 Microsoft 选择 Dev Containers 扩展,再单击 。
如果您使用 Podman 或 Podman Desktop 作为容器化平台,您必须修改 Dev Containers
扩展中的默认设置。
在
Dev Containers
扩展设置中将 docker 替换为 podman :- 在 VS Code 中,打开设置编辑器。
搜索
@ext:ms-vscode-remote.remote-containers
。或者,单击活动栏中的 Extensions 图标,再单击
Dev Containers
扩展的齿轮图标。
-
将
Dev > Containers:Docker Path
设置为podman
。 -
将
Dev > Containers:Docker Compose Path
设置为podman-compose
。
3.2. 在 VS Code 中的容器上安装 Ansible 开发工具
Dev Containers VS Code 扩展需要一个 .devcontainer
文件来存储 dev 容器的设置。您必须使用 Ansible 扩展来为 dev 容器构建配置文件,并在 VS Code 中的容器中重新打开您的目录。
先决条件
- 已安装容器化平台,如 Podman、Podman Desktop、Docker 或 Docker 桌面。
-
您有一个红帽登录信息,并已登陆到
registry.redhat.io
上的 Red Hat registry。有关登录到registry.redhat.io
的详情,请参考使用红帽容器 registry 身份验证。 - 您已安装了 VS Code。
- 您已在 VS Code 中安装了 Ansible 扩展。
- 您已在 VS Code 中安装了 Microsoft Dev Containers 扩展。
如果要在 Windows 上安装 Ansible 开发工具,请启动 VS Code 并连接到 WSL 机器:
-
点
Remote
()图标。
- 在出现的下拉菜单中,选择用于连接 WSL 机器的选项。
-
点
流程
- 在 VS Code 中,导航到您的项目目录。
- 单击 VS Code 活动栏中的 Ansible 图标,以打开 Ansible 扩展。
- 在 Ansible 扩展的 Ansible Development Tools 部分中,向下滚动到 ADD 选项,再选择 Devcontainer。
在 Create a devcontainer 页面中,从容器镜像选项中选择 Downstream 容器镜像。
此操作在
.devcontainer
目录中为 Podman 和 Docker 添加devcontainer.json
文件。重新打开或重新载入项目目录:
如果 VS Code 检测到您的目录包含
devcontainer.json
文件,则会出现以下通知:单击 Reopen in Container。
-
如果没有显示通知,点
Remote
()图标。在出现的下拉菜单中,选择 Reopen in Container。
根据您使用的容器化平台,为 Podman 或 Docker 选择 dev 容器。
VS Code Status 栏中的 Remote () 状态会显示
打开 Remote
,通知表示打开容器的进度。
验证
当容器中的目录重新打开时,远程() 状态会显示 Dev Container: ansible-dev-container
。
容器的基础镜像是一个通用基础镜像 Minimal (UBI Minimal)镜像,它使用 microdnf
作为软件包管理器。dnf
和 yum
软件包管理器没有在容器中可用。
有关在基于 UBI Minimal 镜像的容器中使用 microdnf
的详情,请参考 Red Hat Enterprise Linux 构建、运行和管理容器指南中的在 最小 UBI 容器中添加软件。
3.3. 从 RHEL 上的软件包安装 Ansible 开发工具
Ansible 开发工具捆绑在 Ansible Automation Platform RPM (红帽软件包管理器)软件包中。有关安装 Ansible Automation Platform 的信息,请参阅 Red Hat Ansible Automation Platform 安装指南 文档。
先决条件
- 已安装 RHEL。
- 已使用 Red Hat Subscription Manager 注册您的系统。
- 已安装容器化平台,如 Podman 或 Docker。
流程
运行以下命令检查是否启用了简单内容访问(SCA):
$ sudo subscription-manager status
如果启用了简单内容访问,输出将包含以下信息:
Content Access Mode is set to Simple Content Access.
如果没有启用简单内容访问,请附加 Red Hat Ansible Automation Platform SKU:
$ sudo subscription-manager attach --pool=<sku-pool-id>
使用以下命令安装 Ansible 开发工具:
$ sudo dnf install --enablerepo=ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms ansible-dev-tools
$ sudo dnf install --enablerepo=ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms ansible-dev-tools
验证:
验证 Ansible 开发工具组件是否已安装:
$ rpm -aq | grep ansible
输出显示已安装的 Ansible 软件包:
ansible-sign-0.1.1-2.el9ap.noarch ansible-creator-24.4.1-1.el9ap.noarch python3.11-ansible-runner-2.4.0-0.1.20240412.git764790f.el9ap.noarch ansible-runner-2.4.0-0.1.20240412.git764790f.el9ap.noarch ansible-builder-3.1.0-0.2.20240413.git167ed5c.el9ap.noarch ansible-dev-environment-24.1.0-2.el9ap.noarch ansible-core-2.16.6-0.1.20240413.gite636132.el9ap.noarch python3.11-ansible-compat-4.1.11-2.el9ap.noarch python3.11-pytest-ansible-24.1.2-1.el9ap.noarch ansible-lint-6.14.3-4.el9ap.noarch ansible-navigator-3.4.1-2.el9ap.noarch python3.11-tox-ansible-24.2.0-1.el9ap.noarch ansible-dev-tools-2.5-2.el9ap.noarch
在成功安装时,您可以查看 ansible-creator 的帮助文档:
$ ansible-creator --help usage: ansible-creator [-h] [--version] command ... The fastest way to generate all your ansible content. Positional arguments: command add Add resources to an existing Ansible project. init Initialize a new Ansible project. Options: --version Print ansible-creator version and exit. -h --help Show this help message and exit
第 4 章 创建 playbook 项目
4.1. 构建 playbook 项目
下列步骤介绍了使用 Ansible VS Code 扩展构建新 playbook 项目的流程。
先决条件
- 您已安装了 Ansible 开发工具。
- 已安装并打开 Ansible VS Code 扩展。
- 您已识别要保存项目的目录。
流程
- 打开 VS Code.
- 单击 VS Code 活动栏中的 Ansible 图标,以打开 Ansible 扩展。
在 Ansible 内容创建者 部分选择 Get started。
Ansible 内容创建者 选项卡将打开。
在 Create 部分中,单击 Ansible playbook project。
Create Ansible project 选项卡将打开。
在 Create Ansible project 选项卡中的表单中,输入以下内容:
目标目录 :输入您要构建新 playbook 项目的目录的路径。
注意如果您输入现有的目录名称,则构建过程会覆盖该目录的内容。如果启用
Force
选项,则构建过程只允许使用现有目录。-
如果您使用 Ansible Dev 工具的容器化版本,则目标目录路径相对于容器,而不是本地系统中的路径。要在容器中发现当前目录名称,请在 VS Code 终端中运行
pwd
命令。如果容器中的当前目录为工作区,请输入workspaces
/<destination_directory_name -
如果您使用本地安装的 Ansible Dev 工具版本,请输入到该目录的完整路径,如
/user/<username>/projects/<destination_directory_name
>。
-
如果您使用 Ansible Dev 工具的容器化版本,则目标目录路径相对于容器,而不是本地系统中的路径。要在容器中发现当前目录名称,请在 VS Code 终端中运行
- SCM 组织和 SCM 项目 :输入目录和子目录的名称,您可以在其中存储您为 playbook 创建的角色。
- 输入您要构建新 playbook 项目的目录的名称。
验证
创建项目目录后,Create Ansible Project 选项卡的 Logs 窗格中会出现以下消息。在本例中,目标目录名称为 destination_directory_name
。
------------------ ansible-creator logs ------------------ Note: ansible project created at /Users/username/test_project
在项目目录中创建以下目录和文件:
$ tree -a -L 5 . ├── .devcontainer │ ├── devcontainer.json │ ├── docker │ │ └── devcontainer.json │ └── podman │ └── devcontainer.json ├── .gitignore ├── README.md ├── ansible-navigator.yml ├── ansible.cfg ├── collections │ ├── ansible_collections │ │ └── scm_organization_name │ │ └── scm_project_name │ └── requirements.yml ├── devfile.yaml ├── inventory │ ├── group_vars │ │ ├── all.yml │ │ └── web_servers.yml │ ├── host_vars │ │ ├── server1.yml │ │ ├── server2.yml │ │ ├── server3.yml │ │ ├── switch1.yml │ │ └── switch2.yml │ └── hosts.yml ├── linux_playbook.yml ├── network_playbook.yml └── site.yml
第 5 章 使用 Ansible 开发工具编写和运行 playbook
5.1. 为您的 playbook 项目设置 Ansible 配置文件
当您构建 playbook 项目时,一个 Ansible 配置文件 ansible.cfg
被添加到项目的根目录中。
如果您在 /etc/ansible/ansible.cfg
中配置了默认的 Ansible 配置文件,请将要在项目中重复使用的任何设置从默认 Ansible 配置文件复制到项目根目录中的 ansible.cfg
文件。
要了解更多有关 Ansible 配置文件的信息,请参阅 Ansible 文档中的 Ansible 配置设置。
5.2. 编写第一个 playbook
以下说明说明 Ansible 开发工具如何帮助您在 VS Code 中创建并运行第一个 playbook。
先决条件
- 已安装并打开 Ansible VS Code 扩展。
- 您已在 VS Code 中打开终端。
-
已安装
ansible-devtools
。
流程
-
在 VS Code 中为您的 playbook 创建一个新的 .yml 文件,如
example_playbook.yml
。将它放在与示例site.yml
文件相同的目录级别。 将以下示例代码添加到 playbook 文件中,再保存文件。playbook 由一个对本地机器执行
ping
的 play 组成。--- - name: My first play hosts: localhost tasks: - name: Ping my hosts ansible.builtin.ping:
ansible-lint
在后台运行,并在终端的 Problems 选项卡中显示错误。此 playbook 中没有错误:- 保存您的 playbook 文件。
5.3. 检查您的 playbook
Ansible VS Code 扩展提供了语法高亮显示,并帮助您处理 .yml
文件中的缩进。
以下规则适用于 playbook 文件:
- 每个 playbook 文件都必须以空行结束。
- 不允许在行末尾的尾随空格。
- 每个 playbook 和每个 play 都需要一个标识符(name)。
5.3.1. 内联帮助
在编辑 playbook 文件时,Ansible 扩展还提供内联帮助。
如果您将鼠标悬停在关键字或模块名称上,Ansible 扩展会提供文档:
如果您开始键入模块的名称,如
ansible.builtin.ping
,扩展将提供一个建议列表。选择其中一个建议来自动完成行。
5.4. 运行 playbook
Ansible VS Code 扩展提供了两个选项来运行您的 playbook:
-
ansible-playbook
使用 Ansible Core 在本地机器上运行 playbook。 -
Ansible
-navigator
在执行环境中运行 playbook,其方式与 Ansible Automation Platform 运行自动化作业相同。您可以在 Ansible 扩展设置中为执行环境指定基础镜像。
5.4.1. 使用 ansible-playbook
运行您的 playbook
流程
要运行 playbook,请在 Explorer 窗格中右键单击 playbook 名称, 。
其输出显示在 VS Code 终端的 Terminal 选项卡中。ok=2
和 failed=0
消息表示 playbook 运行成功。
5.4.3. 使用执行环境
您可以在 红帽生态系统目录 中查看红帽提供的自动化执行环境。
单击执行环境,以了解有关如何下载它的信息。
如果您还没有这样做,请登录
registry.redhat.io
。注意如果您在 VS Code 中的容器中运行 Ansible 开发工具,并且希望拉取执行环境或
devcontainer
以用作执行环境,则必须从 VS Code 中的devcontainer
中终端提示符登录到registry.redhat.io
。使用 红帽生态系统目录中的 信息,下载您需要的执行环境。
例如,要下载最小 RHEL 8 基础镜像,请运行以下命令:
$ podman pull registry.redhat.io/ansible-automation-platform-25/ee-minimal-rhel9
您可以使用 ansible-builder
构建和创建自定义执行环境。有关在本地使用执行环境的更多信息,请参阅 创建和使用执行环境。
自定义执行环境后,您可以将新镜像推送到自动化中心中的容器 registry。请参阅 创建和使用执行环境文档中的发布自动化执行环境。
5.5. 调试 playbook
5.5.1. 错误消息
以下 playbook 包含多个错误:
- name: hosts: localhost tasks: - name: ansible.builtin.ping:
错误在 VS Code 中以 wavy 的形式表示。将鼠标悬停在错误上以查看详情:

错误列在 VS Code 终端的 Problems 选项卡中。包含错误的 playbook 文件在 Explorer 窗格中带有数字:

$[0].tasks[0].name None 不是类型为 'string'
,表示 playbook 没有标签。
5.6. 测试您的 playbook
要在项目中测试您的 playbook,请在非生产环境中运行它们,如实验设置或虚拟机。
自动化内容导航器(ansible-navigator
)是一个基于文本的用户界面(TUI),用于在执行环境中开发 Ansible 内容和故障排除。
使用 ansible-navigator
运行 playbook 生成详细输出,您可以检查该 playbook 是否在运行您预期的方式。您可以指定您要运行 playbook 的执行环境,以便测试在 Ansible Automation Platform 上复制生产环境设置:
要在执行环境上运行 playbook,请从 VS Code 中的终端运行以下命令:
$ ansible-navigator run <playbook_name.yml> -eei <execution_environment_name>
例如,若要在 Ansible Automation Platform RHEL 9 最小执行环境上执行一个名为
site.yml
的 playbook,请在 VS Code 中的终端运行以下命令:ansible-navigator run site.yml --eei ee-minimal-rhel8
终端中会显示输出。您可以检查结果,并步骤到执行的每个 play 和任务中。
如需有关运行 playbook 的更多信息,请参阅 自动化内容导航器 指南中的使用自动化内容导航器运行 Ansibleplaybook 。
第 6 章 在 Ansible Automation Platform 中发布并运行 playbook
以下流程描述了如何在 Ansible Automation Platform 实例中部署新 playbook,以便您可以使用它们运行自动化作业。
6.1. 将项目保存到 SCM 中
将 playbook 项目保存为源代码控制管理系统中的存储库,如 GitHub。
流程
- 将项目目录初始化为 git 存储库。
- 将项目推送到源控制系统,如 GitHub。
6.2. 在 Ansible Automation Platform 中运行您的 playbook
要在 Ansible Automation Platform 中运行 playbook,您必须在自动化控制器中为存储 playbook 项目的存储库创建一个项目。然后,您可以为项目中的每个 playbook 创建作业模板。
流程
- 在浏览器中,登录到自动化控制器。
- 如果需要,为您的源控制系统配置 Source Control 凭证类型。如需了解更多详细信息 , 请参阅 Automation controller 用户指南中的创建新凭证 部分。
- 在自动化控制器中,为存储 playbook 项目的 GitHub 仓库创建一个项目。请参阅 自动化控制器用户指南中的 项目 章节。
- 创建使用您创建的项目中的 playbook 的作业模板。请参阅 自动化控制器用户指南中的 作业模板 章节。
- 通过启动作业模板,从自动化控制器运行您的 playbook。请参阅 自动化控制器 用户指南中的启动作业模板 部分。
第 7 章 开发集合
集合是 Ansible 内容的分发格式,可包含 playbook、角色、模块和插件。红帽在 Ansible 自动化 hub 上提供 Ansible 内容集合,其中包含 Red Hat Ansible 认证的内容和 Ansible 验证的内容。
如果安装了私有自动化中心,您可以为您的机构创建集合并将其推送到私有自动化中心,以便在 Ansible Automation Platform 的作业模板中使用它们。您可以使用集合来打包和分发插件。这些插件使用 Python 编写。
您还可以创建集合来打包和分发 Ansible 角色,它们以 YAML 表示。您还可以在集合中包含这些角色所需的 playbook 和自定义插件。通常,角色集合会被分发,以便在您的机构中使用。
第 8 章 创建用于分发角色的集合
Ansible 角色是 Ansible 自动化内容的自包含单元,可将相关的任务和相关变量、文件、处理程序和其他资产分组到定义的目录结构中。
您可以在一个或多个 play 中运行 Ansible 角色,并在 playbook 之间重复使用它们。调用角色而不是任务简化了 playbook。您可以将现有的独立角色迁移到集合中,并将它们推送到私有自动化中心,使其与机构中的其他用户共享。以这种方式分发角色是使用集合的典型方法。
使用 Ansible 集合,您可以在单个可重复利用的自动化单元中存储和分发多个角色。在集合内,您可以在集合中的所有角色间共享自定义插件,而不是在各个角色中复制它们。
如果要在 Ansible Automation Platform 中使用角色,则必须将角色移到集合中。
您可以将现有的独立角色添加到集合中,或向其添加新角色。将集合推送到源控制并配置 Ansible Automation Platform 中存储库的凭证。
8.1. 规划您的集合
将较小的策展自动化捆绑包组织到单独的集合中,用于特定功能,而不是为所有角色创建一个大型通用集合。
例如,您可以将管理名为 myapp
的内部系统的角色存储在 company_namespace.myapp_network
集合中,并将 AWS 中网络的角色存储在名为 company_namespace.aws_net
的集合中。
8.2. 先决条件
- 已安装 VS Code 和 Ansible 扩展。
- 您已在 {VS Code 中安装了 Microsoft Dev Containers 扩展。
- 您已安装了 Ansible 开发工具。
- 已安装容器化平台,如 Podman、Podman Desktop、Docker 或 Docker 桌面。
-
您有一个红帽帐户,您可以在
registry.redhat.io
中登录到红帽容器 registry。有关登录到registry.redhat.io
的详情,请参考使用红帽容器 registry 身份验证。
8.3. 为您的角色构建集合
您可以从 VS Code 中的 Ansible 扩展为角色构建集合。
流程
- 打开 VS Code.
- 导航到您要创建角色集合的目录。
- 单击 VS Code 活动栏中的 Ansible 图标,以打开 Ansible 扩展。
在 Ansible 内容创建者 部分选择 Get started。
Ansible 内容创建者 选项卡将打开。
在 Create 部分中,单击 Ansible collection project。
此时会打开 Create new Ansible project 选项卡。
在 Create Ansible project 选项卡中的表单中,输入以下内容:
-
命名空间 :输入命名空间的名称,如
company_namespace
。 -
集合 :输入集合的名称,例如
myapp_network
。 init 路径 :输入您要构建新集合的目录的路径。
如果您输入现有的目录名称,则构建过程会覆盖该目录的内容。如果启用 Force 选项,则构建过程只允许使用现有目录。
-
如果您使用 Ansible 开发工具的容器化版本,则目标目录路径相对于容器,而不是本地系统中的路径。要在容器中发现当前目录名称,请在 VS Code 终端中运行 pwd 命令。如果容器中的当前目录为工作区,请输入
workspaces
/<current_project>/collections -
如果您使用本地安装的 Ansible Dev 工具版本,请输入到该目录的完整路径,如
/user/<username>/path/to/<collection_directory&
gt;。
-
如果您使用 Ansible 开发工具的容器化版本,则目标目录路径相对于容器,而不是本地系统中的路径。要在容器中发现当前目录名称,请在 VS Code 终端中运行 pwd 命令。如果容器中的当前目录为工作区,请输入
-
命名空间 :输入命名空间的名称,如
- 点 。
验证
以下消息会出现在 Create Ansible collection 选项卡的 Logs 窗格中。
--------------------- ansible-creator logs --------------------- Note: collection company_namespace.myapp_network created at /path/to/collections/directory
以下目录和文件在您的 collections/
目录中创建:
├── .devcontainer ├── .github ├── .gitignore ├── .isort.cfg ├── .pre-commit-config.yaml ├── .prettierignore ├── .vscode ├── CHANGELOG.rst ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING ├── LICENSE ├── MAINTAINERS ├── README.md ├── changelogs ├── devfile.yaml ├── docs ├── extensions ├── galaxy.yml ├── meta ├── plugins ├── pyproject.toml ├── requirements.txt ├── roles ├── test-requirements.txt ├── tests └── tox-ansible.ini
8.4. 将现有角色迁移到您的集合
单机角色的目录具有以下结构:您的角色可能不包含所有这些目录。
my_role ├── README.md ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml
Ansible 角色有一个定义的目录结构,包含 7 个主要标准目录。每个角色必须至少包含其中一个目录。您可以省略角色不使用的任何目录。每个目录包含一个 main.yml
文件。
流程
如有必要,重命名包含角色的目录以反映其内容,例如
acl_config
或tacacs
。集合中的角色的名称不能有连字符。改为使用下划线字符(
_
)。将独立角色中的 roles 目录复制到集合中的
roles/
目录中。例如,在名为
myapp_network
的集合中,将角色添加到myapp_network/roles/
目录中。将独立角色中的任何插件复制到新集合的
plugins directory/
中。集合目录结构类似:company_namespace └── myapp_network ├── ... ├── galaxy.yml ├── docs ├── extensions ├── meta ├── plugins ├── roles │ ├── acl_config │ │ ├── README.md │ │ ├── defaults │ │ ├── files │ │ ├── handlers │ │ ├── meta │ │ ├── tasks │ │ ├── templates │ │ ├── tests │ │ └── vars │ └── tacacs │ ├── README.md │ ├── default │ ├── files │ ├── handlers │ ├── meta │ ├── tasks │ ├── templates │ ├── tests │ └── vars │ ├── run ├── ... ├── tests └── vars
run
角色是构建集合时创建的默认角色目录。- 更新您的 playbook,以将完全限定集合名称(FQDN)用于您的集合中新角色。
并非所有独立角色都会在不修改代码的情况下无缝集成到您的集合中。例如,如果包含插件的 Galaxy 的第三方单机角色使用 module_utils/
目录,则插件本身具有 import 语句。
8.5. 集合中创建新角色
流程
-
要创建新角色,请复制创建集合时构建的默认
运行
角色目录。 -
在
tasks/main.yml
文件中定义您希望角色执行的任务。如果您要创建角色来重新利用现有 playbook 中的任务,请将内容复制到 playbook YAML 文件的 tasks 块中。删除任务左侧的空格。在 VS Code 中使用ansible-lint
检查您的 YAML 代码。 -
如果您的角色依赖于另一个角色,请在
meta/main.yml
文件中添加依赖项。
8.6. 为您的角色集合添加文档
为您的角色提供文档非常重要,以便其他用户了解您的角色的作用以及如何使用它们。
8.6.1. 记录您的角色
当您构建集合目录时,在角色目录中添加了一个 README.md
文件。在此文件中为角色添加您的文档。在 README.md
文件中为集合中的每个角色提供以下信息:
- 角色描述:角色的作用的简要概述
- 要求:列出集合、库和所需安装
- 依赖项
角色变量:提供有关角色使用的变量的以下信息。
- 描述
- 默认值
- 示例值
- 所需的变量
- 示例 playbook:显示使用您的角色的 playbook 示例。使用 playbook 中的注释来帮助用户了解在哪里设置变量。
controller_configuration.ad_hoc_command_cancel
中的 README.md
文件是一个带有标准文档的角色示例:
8.6.2. 记录您的集合
在集合的 README.md
文件中,提供以下信息:
- 集合描述 :描述集合的作用。
- 要求:列出所需的集合。
- 将角色列为集合的一个组件。
- 使用集合: 描述如何运行集合的组件。
- 添加故障排除部分。
- 版本:描述集合的发行周期。
8.7. 在私有自动化中心中发布您的集合
前提条件
- 将集合打包为一个 tarball。按如下方式格式化您的集合文件名:
<my_namespace-my_collection-x.y.z.tar.gz>
例如: company_namespace-myapp_network-1.0.0.tar.gz
流程
- 在私有自动化中心中为集合创建一个命名空间。请参阅 Automation hub 指南中的 创建命名空间。
- 可选:在命名空间中添加信息。请参阅 Automation hub 指南中的管理内容中的 向命名空间添加额外信息和资源。
- 将角色集合 tarball 上传到命名空间。请参阅 Automation Hub 指南中的 将集合上传到命名空间。
- 批准您的集合以进行内部发布。请参阅 Automation Hub 指南中的 将集合上传到命名空间。
8.7.1. 在 Red Hat Ansible Automation Platform 中使用您的项目集合
要在自动化控制器中使用集合,您必须将集合添加到执行环境中,并将其推送到私有自动化中心。
以下流程描述了在执行环境中添加集合的工作流。如需执行这些步骤 ,请参阅 创建和使用执行环境 指南中的自定义现有自动化执行环境镜像。
- 您可以从自动化中心拉取执行环境基础镜像,也可以将集合添加到您自己的自定义执行环境中。
- 添加您要包含在执行环境中的集合。
- 构建新的执行环境。
- 验证集合是否在执行环境中。
- 标记镜像并将其推送到私有自动化中心。
- 将新镜像拉取(pull)到自动化控制器实例中。
- 在集合中使用角色的 playbook 必须为角色使用完全限定域名(FQDN)。