Red Hat Ansible Automation Platform Creator 指南
本指南面向希望了解如何在创建自动化内容时使用 Ansible 的开发人员。
摘要
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 前言 复制链接链接已复制到粘贴板!
使用自动化执行环境在 Red Hat Ansible Automation Platform 中自动化内容
您可以将执行环境用作可重复生成的、可移植、一致和可共享的容器镜像。它们以集合的形式从系统依赖项、Python 依赖项、Ansible 版本和 Ansible 内容控制 Ansible Automation Platform 作业运行时环境的所有依赖项。
第 2 章 内容创建器工作流和自动化执行环境简介 复制链接链接已复制到粘贴板!
2.1. 关于内容工作流 复制链接链接已复制到粘贴板!
在 Red Hat Ansible Automation Platform 2.0 之前,自动化内容开发人员可能需要多个 Python 虚拟环境来管理它们。为降低这种复杂性,Ansible Automation Platform 2.0 正在脱离虚拟环境并使用容器(称为自动化执行环境),因为它们易于构建和管理,并且更容易在团队和机构间共享。
随着自动化控制器转变为使用自动化执行环境,Automation 内容导航器和 Ansible Builder 等工具将确保您可以在您自己的开发系统中本地利用这些自动化执行环境。
2.2. 架构概述 复制链接链接已复制到粘贴板!
下表显示了 Ansible Automation Platform 2.0 上可用的工具的安排和使用,以及如何使用它们:
- 今天,自动化内容在 Ansible Automation Platform 1.2 中使用。
- 自动化内容导航器 + 下载的自动化执行环境 - 直接在笔记本电脑/工作站上使用
- 自动化内容导航器 + 下载的自动化执行环境 + 自动化控制器 - 用于本地推送/执行 → 远程
- 自动化内容导航器 + 自动化控制器 + Ansible Builder + 分层自定义 EE - 提供对所用内容的更多控制,以用于如何执行自动化作业
第 3 章 了解 Ansible 概念 复制链接链接已复制到粘贴板!
作为自动化开发人员,请在开始 Ansible 开发项目之前,回顾以下 Ansible 概念以创建成功的 Ansible playbook 和自动化执行环境。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- Ansible 已经安装。有关安装 Ansible 的详情,请参考 Ansible 文档中的安装 Ansible。
3.2. 关于 Ansible Playbook 复制链接链接已复制到粘贴板!
Playbook 是使用 YAML 编写的文件,其中包含特定组人类可读的指令或 "plays",供您发送到在单个目标或目标组上运行。
Playbook 可用于管理远程机器的配置和部署,以及涉及滚动更新的多层部署顺序。使用 playbook 将操作委派给其他主机,并在此过程中与监控服务器和负载平衡器交互。编写完 playbook 后,您可以在企业内重复使用 playbook 实现自动化。
3.3. 关于 Ansible 角色 复制链接链接已复制到粘贴板!
角色是 Ansible 捆绑自动化内容的方式,以及利用已知文件结构自动加载相关的变量、文件、任务、处理程序和其他工件。除了创建具有数百个任务的大型 playbook 外,您可以使用角色将任务划分为更小、离散且可组合的工作单元。
您可以查找用于调配基础架构、部署应用以及 Ansible Galaxy 上每天执行的所有任务的角色。根据 Type 过滤您的搜索并选择 Role。找到您需要的角色后,可以使用 Ansible 捆绑的 ansible-galaxy 命令下载该角色:
$ ansible-galaxy role install username.rolename
3.4. 关于内容集合 复制链接链接已复制到粘贴板!
Ansible 内容集合是用于自动化的现成工具包。它包括多种类型的内容,如 playbook、角色、模块和插件。下图显示了集合的基本结构:
collection/
├── docs/
├── galaxy.yml
├── meta/
│ └── runtime.yml
├── plugins/
│ ├── modules/
│ │ └── module1.py
│ ├── inventory/
│ ├── lookup/
│ ├── filter/
│ └── .../
├── README.md
├── roles/
│ ├── role1/
│ ├── role2/
│ └── .../
├── playbooks/
│ ├── files/
│ ├── vars/
│ ├── templates/
│ ├── playbook1.yml
│ └── tasks/
└── tests/
├── integration/
└── unit/
在 Red Hat Ansible Automation Platform 中,自动化中心充当 Ansible 认证内容集合的来源。
3.5. 关于执行环境 复制链接链接已复制到粘贴板!
自动化执行环境是一致且可共享的容器镜像,充当 Ansible 控制节点。自动化执行环境减少了共享具有外部依赖项的 Ansible 内容的挑战。
自动化执行环境包括:
- Ansible 内核
- Ansible Runner
- Ansible Collections
- Python 库
- 系统依赖项
- 自定义用户需求
您可以使用 Ansible Builder 定义并创建自动化执行环境。
第 4 章 工具和组件 复制链接链接已复制到粘贴板!
了解更多有关您在创建自动化执行环境中使用的红帽 Ansible 自动化平台工具和组件。
4.1. 关于 Ansible Builder 复制链接链接已复制到粘贴板!
Ansible Builder(Ansible 构建器)是一个命令行工具,它通过使用各种 Ansible Collections 中定义的元数据以及用户自动构建自动化执行环境的过程。
在开发 Ansible Builder 之前,Red Hat Ansible Automation Platform 用户可以在创建自定义虚拟环境或容器(包含所有必要的依赖项)时遇到依赖项问题和错误。
现在,使用 Ansible Builder 时,您可以轻松地创建一个可自定义的自动化执行环境定义文件,该文件指定了自动化执行环境中包含的内容,如集合、第三方 Python 要求和系统级别软件包。这可让您满足所有必要的要求和依赖项来获取作业运行。
红帽目前不支持在构建自动化执行环境时选择提供自己的容器镜像的用户。
4.3. 关于自动化中心 复制链接链接已复制到粘贴板!
Automation Hub 为红帽订阅的用户提供了一个途径,以便快速找到并使用红帽及我们的技术合作伙伴支持的内容,以便为最需要的环境提供额外的保证。
在高级别上,Automation Hub 为所有合作伙伴提供参与和提供经认证、受支持的内容的概述。
从中央视图中,用户可以深入了解每个合作伙伴并签出集合。
此外,也可搜索所有可用集合的概述。
4.4. 关于 Ansible 命令行界面 复制链接链接已复制到粘贴板!
在命令行中使用 Ansible 是运行您不经常重复的任务的有用方法。处理重复任务的建议方法是编写 playbook。
命令行中 Ansible 的临时命令遵循以下结构:
$ ansible [pattern] -m [module] -a "[module options]"
第 5 章 设置您的开发环境 复制链接链接已复制到粘贴板!
您可以按照本节中的步骤设置开发环境,以创建自动化执行环境。
5.1. 安装 Ansible Builder 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Subscription Management (RHSM) 安装 Ansible Builder 来附加 Red Hat Ansible Automation Platform 订阅。附加 Red Hat Ansible Automation Platform 订阅 可让您访问安装 ansible-builder 所需的仅订阅资源。附加订阅后,会自动启用 ansible-builder 所需的存储库。
在安装 ansible-builder 之前,您必须在主机上附加了有效的订阅。
流程
在终端中,运行以下命令来安装 Ansible Builder 并激活 Ansible Automation Platform 仓库:
# dnf install --enablerepo ansible-automation-platform-2.2-for-rhel-8-x86_64-rpms ansible-builder
5.3. 下载基本自动化执行环境 复制链接链接已复制到粘贴板!
Ansible Automation Platform 2.0 附带的基础镜像托管在红帽生态系统目录(registry.redhat.io)上。
先决条件
- 您有有效的 Red Hat Ansible Automation Platform 订阅。
流程
登录到 registry.redhat.io
$ podman login registry.redhat.io从 registry 中拉取基础镜像
$ podman pull registry.redhat.io/aap/<image name>
第 6 章 创建内容 复制链接链接已复制到粘贴板!
使用创建器指南一节中的指南,了解更多有关开发 Red Hat Ansible Automation Platform 中使用的内容的信息。
6.1. 创建 playbook 复制链接链接已复制到粘贴板!
Playbook 包含一个或多个 play。基本 play 包括以下部分:
- Name:对 playbook 整体功能的简短描述,有助于保持所有用户的可读性和组织性。
- Hosts:识别要针对 Ansible 运行的目标。
-
Become 声明:这个可选声明可以被设置为
true/yes来使用一个 become 插件 (如sudo,su,pfexec,doas,pbrun,dzdo,ksu) 进行权限升级。 - Tasks:这是对 play 中每一主机执行的列表操作。
playbook 示例
- name: Set Up a Project and Job Template
hosts: host.name.ip
become: true
tasks:
- name: Create a Project
ansible.controller.project:
name: Job Template Test Project
state: present
scm_type: git
scm_url: https://github.com/ansible/ansible-tower-samples.git
- name: Create a Job Template
ansible.controller.job_template:
name: my-job-1
project: Job Template Test Project
inventory: Demo Inventory
playbook: hello_world.yml
job_type: run
state: present
6.2. 创建集合 复制链接链接已复制到粘贴板!
您可以使用 Ansible Galaxy CLI 工具在本地创建自己的集合。所有特定于集合的命令都可使用 collection 子命令激活。
先决条件
- 开发环境中安装了 Ansible 版本 2.9 或更新版本。
流程
- 在终端中,导航到您希望命名空间根目录的位置。为简单起见,这应当是 COLLECTIONS_PATH 中的路径,但这不是必须的。
运行以下命令,将
my_namespace和my_collection_name替换为您选择的值:$ ansible-galaxy collection init <my_namespace>.<my_collection_name>注意在 galaxy.ansible.com 或 cloud.redhat.com/ansible/automation-hub 的"My Content" 标签页下检查,确保您具有上传到命名空间的适当权限
以上命令将从上述命名空间参数(如果尚未存在)创建名为 的目录,然后在 下创建具有集合名称的目录。该目录内为默认值或"框架"集合。在这里,您可以添加角色或插件,并开始开发自己的集合。
对于执行环境,集合开发人员可以通过在 Ansible Builder 中提供适当的元数据来声明其内容的要求。
集合的要求可以通过以下方法识别:
-
文件
meta/execution-environment.yml引用 Python 和/或bindep要求文件 -
名为
requirements.txt的文件,其中包含有关 Python 依赖项的信息,有时可以在集合的根目录中找到 -
名为
bindep.txt的文件,其中包含系统级别的依赖项,有时可以在集合的根目录中找到 -
如果其中任何文件位于 Collection 的
build_ignore中,Ansible Builder 将不会在这些中提取,因为本节用于过滤构建工件中不应包含的任何文件或目录。
集合维护器可以使用 introspect 命令验证 ansible-builder 是否识别他们期望的要求:
$ ansible-builder introspect --sanitize ~/.ansible/collections/
6.3. 创建角色 复制链接链接已复制到粘贴板!
您可以使用 Ansible Galaxy CLI 工具创建角色。角色相关命令可以从 roles 子命令访问。
ansible-galaxy role init <role_name>
仍然支持集合外的独立角色,但应在集合内创建新的角色,以利用 Ansible Automation Platform 必须提供的所有功能。
流程
-
在终端中,前往集合内的
roles目录。 在前面创建的集合中创建名为
role_name的角色:$ ansible-galaxy role init my_role该集合现在在
roles目录中包含一个名为my_role的角色:~/.ansible/collections/ansible_collections/<my_namespace>/<my_collection_name> ... └── roles/ └── my_role/ ├── .travis.yml ├── README.md ├── defaults/ │ └── main.yml ├── files/ ├── handlers/ │ └── main.yml ├── meta/ │ └── main.yml ├── tasks/ │ └── main.yml ├── templates/ ├── tests/ │ ├── inventory │ └── test.yml └── vars/ └── main.yml可以使用
--role-skeleton参数提供自定义角色框架目录。这使得组织能够为新角色创建标准化模板,以满足其需求。ansible-galaxy role init my_role --role-skeleton ~/role_skeleton
这将通过将 ~/role_skeleton 的内容复制到 my _role 来创建名为 my_role 的角色。role_skeleton 的内容可以是在角色目录中有效的任何文件或文件夹。
6.4. 创建自动化执行环境 复制链接链接已复制到粘贴板!
- 自动化执行环境定义文件将指定
- Ansible 版本
- Python 版本(默认为系统 Python)
- 组所需的 Python 库
- 零个或多个内容集合(可选)
- 这些特定集合的 Python 依赖项
为环境指定一组集合的概念是解析并安装其依赖项。不需要将集合本身安装到您要在其上生成自动化执行环境的机器上。
从此定义构建自动化执行环境,生成容器镜像。请阅读 Ansible Builder 文档,以了解创建这些镜像涉及的步骤。
第 7 章 迁移现有内容 复制链接链接已复制到粘贴板!
以下小节了解如何在升级到 Red Hat Ansible Automation Platform 2.0 和自动化控制器 4.0 后,使用 awx-manage 命令协助迁移过程中的其他步骤。此外,了解更多关于在 Ansible 版本间迁移的信息。
7.1. 将虚拟环境迁移到自动化执行环境 复制链接链接已复制到粘贴板!
升级到 Red Hat Ansible Automation Platform 2.0 和自动化控制器 4.0 后,请使用以下部分协助迁移过程中的其他步骤。
7.1.1. 列出自定义虚拟环境 复制链接链接已复制到粘贴板!
您可以使用 awx-manage 命令列出自动化控制器实例上的虚拟环境。
流程
SSH 到自动化控制器实例并运行:
$ awx-manage list_custom_venvs
这时将显示已发现的虚拟环境列表。
# Discovered virtual environments:
/var/lib/awx/venv/testing
/var/lib/venv/new_env
To export the contents of a virtual environment, re-run while supplying the path as an argument:
awx-manage export_custom_venv /path/to/venv
7.1.2. 查看与自定义虚拟环境关联的对象 复制链接链接已复制到粘贴板!
使用 awx-manage 命令,查看与自定义虚拟环境关联的组织、作业和清单源。
流程
SSH 到自动化控制器实例并运行:
$ awx-manage custom_venv_associations /path/to/venv
这时将显示相关对象的列表。
inventory_sources:
- id: 15
name: celery
job_templates:
- id: 9
name: Demo Job Template @ 2:40:47 PM
- id: 13
name: elephant
organizations
- id: 3
name: alternating_bongo_meow
- id: 1
name: Default
projects: []
7.1.3. 选择要导出的自定义虚拟环境 复制链接链接已复制到粘贴板!
选择您要使用 awx-manage export_custom_venv 命令导出的自定义虚拟环境。
流程
SSH 到自动化控制器实例并运行:
$ awx-manage export_custom_venv /path/to/venv
此命令的输出将显示在指定虚拟环境中的 pip freeze 状态。此信息可复制到 Ansible Builder 的 requirements.txt 文件中,用于创建新的自动化执行环境镜像
numpy==1.20.2
pandas==1.2.4
python-dateutil==2.8.1
pytz==2021.1
six==1.16.0
To list all available custom virtual environments run:
awx-manage list_custom_venvs
在运行 awx-manage list_custom_venvs 时传递 -q 标志来减少输出。
7.2. 在 Ansible 内核版本间迁移 复制链接链接已复制到粘贴板!
在 Ansible 核心版本之间迁移需要您更新 playbook、插件和 Ansible 基础架构的其他部分,以确保它们使用最新版本。此过程要求根据对每个连续版本的 Ansible Core 所做的更新来验证更改。如果要从 Ansible 2.9 迁移到 Ansible 2.11,您首先需要验证是否满足 Ansible 2.10 的要求,并从那里对 2.11 进行更新。
7.2.1. Ansible 移植指南 复制链接链接已复制到粘贴板!
Ansible 移植指南是一系列文档,提供关于连续 Ansible 版本之间行为更改的信息。从 Ansible 版本迁移到较新版本时,请参考指南。
第 9 章 总结 复制链接链接已复制到粘贴板!
现在,您应能够根据特定的自动化需求自定义自动化执行环境,并通过容器 registry 共享和使用它们。