文档

14. 项目

一个 项目 是 Ansible 剧本的逻辑集合,在 Tower 中表示。

您可以通过以下两种方式管理剧本和剧本目录:将它们手动放置在 Tower 服务器上的项目基本路径下,或者将您的剧本放置在 Tower 支持的源代码管理 (SCM) 系统中,包括 Git、Subversion、Mercurial 和 Red Hat Insights。要创建 Red Hat Insights 项目,请参考 设置 Insights 项目.

注意

默认情况下,项目基本路径为 /var/lib/awx/projects,但可能已被 Tower 管理员修改。它在 /etc/tower/conf.d/custom.py 中配置。在编辑此文件时请谨慎,因为不正确的设置可能会禁用您的安装。

此菜单显示当前可用的项目列表。默认视图是折叠的(**紧凑**),包含项目名称及其状态,但您可以展开以查看更多信息。您可以根据各种标准对列表进行排序,并执行搜索以筛选感兴趣的项目。

Projects - home with example project

_images/projects-list-all-expanded.png

对于列出的每个项目,您可以获取最新的 SCM 修订版 (refresh),复制项目属性 (copy),或删除 (delete-icon) 项目,使用每个项目旁边相应的图标。从 Ansible Tower 3.7 开始,允许在相关作业运行时更新项目。在项目规模较大(约 10 GB)的情况下,/tmp 上的磁盘空间可能会成为问题。

**状态** 指示项目的状况,可能是以下之一(请注意,您还可以按特定状态类型筛选视图)

  • **待定** - 源代码控制更新已创建,但尚未排队或开始。任何作业(不仅仅是源代码控制更新)都将保持待定状态,直到它实际上准备好由系统运行。它未准备好可能的原因包括:它有依赖项正在运行,因此必须等到它们完成,或者在它配置的运行位置没有足够的容量。

  • **等待** - 源代码控制更新正在排队等待执行。

  • **正在运行** - 源代码控制更新当前正在进行。

  • **成功** - 此项目的最后一次源代码控制更新成功。

  • **失败** - 此项目的最后一次源代码控制更新失败。

  • **错误** - 此项目的最后一次源代码控制更新作业根本无法运行。(将被弃用。)

  • **已取消** - 此项目的最后一次源代码控制更新已取消。

  • **从未更新** - 该项目配置了源代码控制,但从未更新。

  • **正常** - 该项目未配置源代码控制,并且已正确到位。(将被弃用。)

  • **缺少** - 项目不存在于 /var/lib/awx/projects 的项目基本路径中(适用于手动或源代码控制管理的项目)。

注意

凭据类型为“手动”的项目,在不重新配置为 SCM 类型凭据的情况下,无法更新或计划基于源代码控制的操作。

注意

如果删除其他工作项正在使用的项目,将显示一条消息,列出受删除影响的项目,并提示您确认删除。某些屏幕将包含无效或先前已删除的项目,因此这些项目将无法运行。以下是一个此类消息的示例

_images/warning-deletion-dependencies.png

14.1. 添加新的项目

要创建新的项目

  1. 点击 add 按钮,这将启动 **创建项目** 窗口。

Projects - create new project

  1. 在以下必填字段中输入相应的信息

  • 名称

  • **描述**(可选)

  • **组织** - 项目必须至少有一个组织。现在选择一个组织来创建项目,然后在项目创建后,您可以添加其他组织。

  • **Ansible 环境**(可选) - 从下拉菜单列表中选择要在其上运行此项目的自定义虚拟环境。此字段仅在先前创建了自定义环境时才出现。在Ansible Tower 升级和迁移指南中查看 使用虚拟环境与 Ansible Tower

  • **SCM 类型** - 从下拉菜单列表中选择与该项目关联的 SCM 类型。后续部分中的选项将根据您选择的类型而变为可用。有关更多详细信息,请参阅后续部分中的 手动管理剧本使用源代码控制管理剧本

注意

如果添加手动项目,则项目根文件夹内的每个项目路径只能分配给一个项目。如果您收到以下消息,请确保您尚未将项目路径分配给现有项目

所有 项目 路径 已被 分配 现有 项目, 或者 基本 路径 找到 目录。 需要 添加 一个 项目 路径 才能 创建 项目。

  1. 完成后,单击保存

14.1.1. 手动管理剧本

  • 在项目基本路径下(例如,/var/lib/awx/projects/)创建一个或多个目录来存储剧本。

  • 在剧本目录中创建或复制剧本文件。

  • 确保剧本目录和文件由与 Tower 服务运行的相同 UNIX 用户和组拥有。

  • 确保剧本目录和文件的权限适合。

如果您在添加项目路径时遇到问题,请检查项目目录和文件的权限和 SELinux 上下文设置。

警告

如果您尚未在项目基本路径中添加任何 Ansible 剧本目录,您将收到来自 Tower 的以下消息

Projects - create new warning

通过创建适当的剧本目录并从您的 SCM 中检出剧本或以其他方式将剧本复制到适当的剧本目录中来纠正此问题。

14.1.2. 使用源代码管理管理剧本

14.1.2.1. SCM 类型 - Git、Mercurial 和 Subversion

要在项目**详细信息**选项卡中配置使用源代码管理的剧本

  1. 从**SCM 类型**下拉菜单列表中选择适当的选项(Git、Subversion 或 Mercurial)。

Projects - create SCM project

  1. 在以下字段中输入适当的详细信息

  • **SCM URL** - 在帮助help文本中查看示例。

  • **SCM 分支/标签/提交** - 可选地从源代码控制(Git、Subversion 或 Mercurial)中输入要签出的 SCM 分支、标签、提交哈希值、任意引用或修订号(如果适用)。除非您还在下一个字段中提供自定义 refspec,否则某些提交哈希值和引用可能不可用。

  • **SCM Refspec** - 此字段是 git 源代码控制的特定选项,只有熟悉并精通 git 的高级用户才会指定要从远程存储库下载哪些引用。有关更多详细信息,请参阅作业分支覆盖.

  • **SCM 凭据** - 如果需要身份验证,请选择适当的 SCM 凭据

  1. 在**SCM 更新选项**中,可选地选择启动行为(如果适用)。

  • **清除** - 在执行更新之前删除所有本地修改。

  • **更新时删除** - 在执行更新之前完全删除本地存储库。根据存储库的大小,这可能会大大增加完成更新所需的时间。

  • **启动时更新修订号** - 将项目的修订号更新为远程源代码控制中的当前修订号,以及从GalaxyCollections中缓存角色目录。Tower 确保本地修订号匹配,并且角色和集合与最后一次更新保持一致。此外,为了避免在作业启动速度快于项目同步速度的情况下作业溢出,选择此选项允许您配置缓存超时,以在一定秒数内缓存先前项目同步。

  • **允许分支覆盖** - 允许使用此项目的作业模板以指定的 SCM 分支或修订号启动,而不是项目的修订号。有关更多详细信息,请参阅作业分支覆盖.

_images/projects-create-scm-project-branch-override-checked.png
  1. 单击**保存**以保存您的项目。

提示

使用 GitHub 链接可以轻松地使用剧本。为了帮助您入门,请使用以下位置提供的helloworld.yml文件:https://github.com/ansible/tower-example.git

此链接提供的剧本与Ansible Tower 快速入门指南中找到的手动创建的剧本非常相似。使用它不会以任何方式改变或损害您的系统。

14.1.2.2. SCM 类型 - Red Hat Insights

要在项目**详细信息**选项卡中配置使用 Red Hat Insights 的剧本

  1. 从**SCM 类型**下拉菜单列表中选择**Red Hat Insights**。

  2. Red Hat Insights 需要凭据进行身份验证。从**凭据**字段中选择用于 Insights 的适当凭据。

  3. 在**SCM 更新选项**中,可选地选择启动行为(如果适用)。

  • **清除** - 在执行更新之前删除所有本地修改。

  • **更新时删除** - 在执行更新之前完全删除本地存储库。根据存储库的大小,这可能会大大增加完成更新所需的时间。

  • **启动时更新修订号** - 将项目的修订号更新为远程源代码控制中的当前修订号,以及从GalaxyCollections中缓存角色目录。Tower 确保本地修订号匹配,并且角色和集合与最后一次更新保持一致。此外,为了避免在作业启动速度快于项目同步速度的情况下作业溢出,选择此选项允许您配置缓存超时,以在一定秒数内缓存先前项目同步。

_images/projects-create-scm-insights.png
  1. 单击**保存**以保存您的项目。

14.1.2.3. SCM 类型 - 远程存档

使用远程存档的剧本允许根据构建过程提供项目,该构建过程会生成一个版本化的工件或版本,其中包含该项目的所有要求,并将其打包在一个存档中。

要在项目**详细信息**选项卡中配置使用远程存档的剧本

  1. 从**SCM 类型**下拉菜单列表中选择**远程存档**。

  2. 在以下字段中输入适当的详细信息

  • **SCM URL** - 需要一个指向远程存档的 URL,例如GitHub 版本或存储在Artifactory中的构建工件,并将其解压缩到项目路径中以供使用

  • **SCM 凭据** - 如果需要身份验证,请选择适当的 SCM 凭据

  1. 在**SCM 更新选项**中,可选地选择启动行为(如果适用)。

  • **清除** - 在执行更新之前删除所有本地修改。

  • **更新时删除** - 在执行更新之前完全删除本地存储库。根据存储库的大小,这可能会大大增加完成更新所需的时间。

  • **启动时更新修订号** - 不建议使用,因为此选项会将项目的修订号更新为远程源代码控制中的当前修订号,以及从GalaxyCollections中缓存角色目录。

  • **允许分支覆盖** - 不建议使用,因为此选项允许使用此项目的作业模板以指定的 SCM 分支或修订号启动,而不是项目的修订号。

_images/projects-create-scm-rm-archive.png

注意

由于此 SCM 类型旨在支持不变工件的概念,因此建议禁用 Galaxy 集成(至少对于角色而言)。

  1. 单击**保存**以保存您的项目。

14.2. 从源代码管理更新项目

  1. 通过选择项目并单击refresh按钮来更新现有的基于 SCM 的项目。

注意

请注意,在添加使用源代码管理的项目设置后,会立即启动“同步”,它会从配置的源代码管理中获取项目详细信息。

projects - list all

  1. 单击**状态**下的点(最左边,在项目名称旁边)以获取有关更新过程的更多详细信息。

Project - update status

14.3. 使用权限

分配给此项目的一组权限(基于角色的访问控制)提供读取、修改和管理项目、清单、作业模板和其他 Tower 元素的能力,这些权限被称为特权。

您可以通过**详细信息**选项卡旁边的**权限**选项卡访问项目权限。此屏幕显示当前具有此项目权限的用户列表。列表可以按**用户**、**角色**或**团队角色**排序和搜索。

Projects - permissions list for example project

14.3.1. 添加权限

**权限**选项卡允许您查看、授予、编辑和删除与用户和团队成员相关的权限。要为特定用户分配此资源的权限

  1. 单击**权限**选项卡。

  2. 单击add按钮以打开添加用户/团队窗口。

Add Permissions Form
  1. 指定将拥有访问权限的用户或团队,然后为其分配特定角色

  1. 单击以选中用户或团队名称旁边的一个或多个复选框以选中它们。

注意

您可以在不保存的情况下,在**用户**和**团队**选项卡之间导航,同时选择多个用户和团队。

进行选择后,该窗口将扩展,允许您从下拉菜单列表中为所选的每个用户或团队选择一个角色。

Roles Assignment for Selected Users

上面的示例显示了与清单相关的选项。不同的资源具有不同的可用选项

  • **管理员**允许读取、运行和编辑权限(适用于所有资源)

  • **使用**允许在作业模板中使用资源(适用于除作业模板以外的所有资源)

  • **更新**允许通过 SCM 更新来更新项目(适用于项目和清单)

  • **临时**允许使用临时命令(适用于清单)

  • **执行**允许启动作业模板(适用于作业模板)

  • **读取**允许仅查看访问权限(适用于所有资源)

提示

使用角色选择窗格中的**键**按钮来显示每个角色的描述。有关更多信息,请参阅本指南的角色部分。

  1. 选择要应用于所选用户或团队的角色。

注意

您可以在不保存的情况下,在**用户**和**团队**选项卡之间导航,同时为多个用户和团队分配角色。

Add Permissions - Examples of users and teams selected
  1. 查看每个用户和团队的角色分配。

Add Permissions - Examples of roles applied
  1. 完成后,单击**保存**,添加用户/团队窗口将关闭,显示为每个用户和团队分配的更新角色。

    Permissions tab with Role Assignments

要删除特定用户的权限,请单击其资源旁边的取消关联(x)按钮。

_images/permissions-disassociate.png

这将启动一个确认对话框,要求您确认取消关联。

_images/permissions-disassociate-confirm.png

14.4. 使用通知

单击**通知**选项卡允许您查看已设置的任何通知集成。

_images/projects-notifications-example-list.png

使用切换按钮来启用或禁用要与特定项目一起使用的通知。有关更多详细信息,请参阅启用和禁用通知.

如果尚未设置任何通知,请单击灰色框内的**通知**链接以创建新的通知。

_images/project-notifications-empty.png

有关配置各种通知类型的更多详细信息,请参阅通知类型

14.5. 使用作业模板

点击作业模板,您可以添加和查看与该项目关联的任何作业模板或工作流模板。点击展开以查看每个模板的详细信息,包括使用该模板运行的作业的状态和其他有用信息。您可以根据各种标准对列表进行排序,并执行搜索以筛选感兴趣的模板。

_images/projects-templates-example-list.png

在此视图中,您还可以启动 (launch)、复制 (copy) 或删除 (delete-icon) 模板配置。注意,上面的示例显示了展开视图。

14.6. 使用计划

点击计划,您可以查看为此项目设置的任何计划。

_images/projects-schedules-example-list.png

14.6.1. 安排项目

要安排项目运行,请点击计划选项卡。

  • 如果已设置计划;查看、编辑或启用/禁用您的计划首选项。

  • 如果尚未设置计划,请参阅计划以了解更多信息。

14.7. Ansible Galaxy 支持

在项目更新结束时,Tower 会在 roles 目录(位于 <project-top-level-directory>/roles/requirements.yml)中搜索名为 requirements.yml 的文件。如果找到此文件,则会自动运行以下命令

ansible-galaxy role install -r roles/requirements.yml -p <project-specific cache location>/requirements_roles -vvv

此文件允许您引用 Galaxy 角色或其他存储库中的角色,这些角色可以在您的项目中一起检出。添加此 Ansible Galaxy 支持消除了创建 git 子模块以实现此结果的需要。鉴于 SCM 项目(以及角色/集合)被拉入并从私有作业环境执行,因此默认情况下会在 /tmp 中创建特定于项目的 <private job directory>。但是,您可以在“配置 Tower”窗口的“作业设置”选项卡中根据您的环境指定其他作业执行路径

_images/configure-tower-jobs-execution-path.png

缓存目录是全局项目文件夹中的一个子目录。内容可以从缓存位置复制到 <job private directory>/requirements_roles 位置。

默认情况下,Ansible Tower 具有一个系统范围的设置,允许从 roles/requirements.yml 文件中为 SCM 项目动态下载角色。您可以在“设置”(settings)菜单的“作业”选项卡中,通过将启用角色下载切换按钮切换到关闭来关闭此设置。

_images/configure-tower-jobs-download-roles.png

每当项目同步运行时,Tower 都会确定项目源以及来自 Galaxy 和/或集合的任何角色是否与项目过时。项目更新将在更新中下载角色。

如果作业需要获取对上游角色所做的更改,则更新项目将确保发生这种情况。角色的更改意味着将新的提交推送到provision-role源代码控制。要使此更改在作业中生效,您不需要将新的提交推送到playbooks存储库,但您需要更新项目,这会将角色下载到本地缓存。例如,假设您的源代码控制中有两个 git 存储库。第一个是playbooks,Tower 中的项目指向此 URL。第二个是provision-role,它由playbooks git 存储库中的 roles/requirements.yml 文件引用。

简而言之,作业将在每次作业运行之前下载最新的角色。出于性能原因,角色和集合在本地缓存,您需要在项目 SCM 更新选项中选择启动时更新版本以确保在每次作业运行之前重新下载上游角色

update-on-launch

更新发生在流程的更早阶段,而不是同步,因此这会更快地以更逻辑的方式显示错误和详细信息。

_images/project-update-job-details-stdout.png

有关 requirements.yml 文件语法的更多信息和示例,请参阅 Ansible 文档中的角色需求部分

如果需要专门公开任何目录,您可以在“配置 Tower”屏幕的“要向隔离作业公开的路径”中指定它们,或通过更新设置文件中的以下条目

AWX_PROOT_SHOW_PATHS = ['/list/of/', '/paths']

注意

您可能想要添加到 AWX_PROOT_SHOW_PATHS 的主要文件是 /var/lib/awx/.ssh,如果您的剧本需要使用在那里定义的密钥或设置。

如果您在设置文件中进行了更改,请确保在保存更改后使用 ansible-tower-service restart 命令重新启动服务。

在 Tower 用户界面中,您可以在“作业设置”窗口中配置这些设置。

_images/configure-tower-jobs-path-to-expose.png

注意

主要 Galaxy 服务器用户名主要 Galaxy 服务器密码字段不再可在 Ansible Tower 3.8 中配置。我们建议使用令牌访问 Galaxy 或 Automation Hub。

14.8. 集合支持

Tower 支持作业运行中特定于项目的 Ansible 集合。如果您在 SCM 中的 collections/requirements.yml 中指定了集合需求文件,Tower 将在作业运行之前隐式项目同步中安装该文件中的集合。要指定集合需求

ansible-galaxy collection install -r requirements.yml -p <job tmp location>

默认情况下,Ansible Tower 具有一个系统范围的设置,允许从 collections/requirements.yml 文件中为 SCM 项目动态下载集合。您可以在“设置”(settings)菜单的“作业”选项卡中,通过将启用集合下载切换按钮切换到关闭来关闭此设置。

_images/configure-tower-jobs-download-collections.png

出于性能原因,角色和集合在本地缓存,您需要在项目 SCM 更新选项中选择启动时更新版本以确保这

update-on-launch

14.8.1. 在 Tower 中使用集合

在 Tower 可以将 Automation Hub 用作集合内容的默认源之前,您需要在 Automation Hub UI 中创建一个 API 令牌,以便可以在 Ansible Tower 中指定它。您可以连接到私有 Automation Hub 或公共 Automation Hub 集合,唯一的区别是您指定的 URL。

  1. 导航到 https://cloud.redhat.com/ansible/automation-hub/token 并点击加载令牌

  2. 点击复制图标将 API 令牌复制到剪贴板。

_images/projects-ah-loaded-token-shown.png
  1. 要在 Tower 中使用公共 Automation Hub,请使用复制的令牌创建一个 Automation Hub 凭据,并指向令牌页面中服务器 URLSSO URL 字段中显示的 URL

  • Galaxy 服务器 URL = https://cloud.redhat.com/api/automation-hub/

  • AUTH 服务器 URL = https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token

  1. 要在 Tower 中使用私有 Automation Hub,请使用从您的本地 Automation Hub 的 Repo 管理仪表板中检索的令牌创建一个 Automation Hub 凭据,并指向已发布的存储库 URL,如

_images/projects-ah-repo-mgmt-get-token.png _images/projects-ah-repo-mgmt-repos-published.png

您可以在其中创建具有不同命名空间/集合的不同存储库。但对于 Automation Hub 中的每个存储库,您都需要创建不同的 Automation Hub 凭据。从 Automation Hub UI 中以 https://$<hub_url>/api/galaxy/content/<repo you want to pull from> 格式复制Ansible CLI URLTower 创建凭据窗体的Galaxy 服务器 URL 字段

_images/projects-create-ah-credential.png

注意

在私有 Automation Hub 中生成的令牌用于所有内容。rh-certifiedcommunity 等存储库没有专用令牌。您应该使用为 ansible.cfg 文件中的所有适当 ansible-galaxy 定义生成的令牌。有关详细信息,请参阅Ansible Tower 管理指南中的查找和配置 Ansible 配置文件

有关 Automation Hub UI 特定说明,请参阅在 Ansible Hub 中管理 Red Hat 认证和 Ansible Galaxy 集合

  1. 导航到您要从中同步 Automation Hub 内容的组织,并将新的 Automation Hub 凭据添加到组织。此步骤允许您将每个组织与您要从中使用内容的 Automation Hub 凭据(即存储库)关联起来。

_images/projects-organizations-add-ah-credential.png

注意

假设您有两个存储库

  • ProdNamespace 1Namespace 2,每个都包含集合 AB,因此:namespace1.collectionA:v2.0.0namespace2.collectionB:v2.0.0

  • StageNamespace 1 仅包含集合 A,因此:namespace1.collectionA:v1.5.0 在 Automation Hub 上,您将拥有ProdStage 的存储库 URL。

您可以为每个存储库创建一个 Automation Hub 凭据。然后,您可以将不同级别的访问权限分配给不同的组织。例如,您可以创建一个开发人员组织,该组织可以访问这两个存储库,而操作组织只能访问 Automation Hub Prod 存储库。

有关 Automation Hub UI 特定说明,请参阅在 Ansible Hub 中管理用户访问权限

  1. 如果 Automation Hub 具有自签名证书,请点击切换以启用 Tower 设置忽略 Ansible Galaxy SSL 证书验证。对于公共 Automation Hub(使用已签署的证书),请点击切换以禁用它。注意,这是一个全局设置

_images/settings-jobs-ignore-galaxy-certs.png
  1. 创建一个项目,其中源存储库在 collections/requirements.yml 文件中指定了需求文件中所需的集合。请参阅 Ansible 文档中描述的语法:https://docs.ansible.org.cn/ansible/latest/user_guide/collections_using.html#install-multiple-collections-with-a-requirements-file

_images/projects-add-ah-source-repo.png
  1. 在“项目”列表视图中,点击 更新 对该项目运行更新。Tower 会从 collections/requirements.yml 文件中获取 Galaxy 集合并报告更改;现在,任何使用该项目的作业模板都会安装这些集合。

注意

如果 Galaxy 或集合需要更新,则会执行同步操作,该操作会下载所需的 roles,从而在您的 /tmp 文件中消耗更多空间。在您拥有大型项目(约 10 GB)的情况下,/tmp 上的磁盘空间可能会成为问题。

有关集合的更多信息,请参阅 使用集合。有关 Red Hat 如何发布这些官方集合之一的更多信息,这些集合可用于直接自动化您的 Tower 安装,请参阅 AWX Ansible 集合 文档。您可以在 Red Hat Ansible 自动化平台订阅中使用 Red Hat 客户凭据访问此页面。