Documentation

4. 清单文件导入

Tower 允许用户从来源控制中选择清单文件的功能,而不是从头开始创建清单文件。这个功能与自定义清单脚本相同,唯一的不同是从源控制系统获取内容而不是编辑其内容浏览器。这意味着,这些文件不可编辑,并且因为清单在来源中更新,项目内的清单也会相应更新,包括与它们关联的 group_varshost_vars 文件或目录。SCM 类型可能会消耗清单文件和脚本、清单文件和自定义类型之间的重叠,两者均编写脚本。

4.1. 自定义动态清单脚本

存储在版本控制系统中的自定义动态清单脚本可以导入并运行。这有助于对清单脚本进行修改,而不必将脚本复制并粘贴到 Tower 中,而是直接从来源控制拉取出来,然后执行。该脚本必须编写来处理所有执行其操作所需的凭证,并且您负责安装该脚本所需的任何 Python 库(这与自定义动态清单脚本的要求相同)。这会应用到用户定义的清单源脚本和 SCM 来源,因为它们都对与 playbook 相关的 Ansible virtualenv 要求公开。

在编辑 SCM 清单源自身时,您可以指定环境变量。对于某些脚本来说,这已足够了,但这并不是一种安全的方法来存储可访问云提供程序或清单的 secret 信息。

更好的方法是为要使用的清单脚本创建新凭证类型。凭证类型需要指定所有必要的输入类型。然后,当您创建该类型的凭证时,secret 将以加密的形式保存。如果您将该凭证应用到清单源中,该脚本将能够访问这些输入,如环境变量或文件。

如需更多详情,请参阅 Credential types

4.1.1. 更新项目更新

如果清单源包含静态内容,则可能需要在其源项目的 SHA-1 哈希更改时自动更新其内容。这可以通过将清单源配置为在项目更新时更新来完成。

_images/sourced-from-project-update-on-project-update.png

选中此复选框后,清单源将不允许在启动时更新。在启动时更新很重要,因为某些配置需要这个功能。例如,当您设置了一个项目,在作业模板运行前,清单引用进行一系列更新的项目,以便作业模板运行的清单将具有该清单的更新格式。这可以通过其他两种替代方法达到这一目的:

  • 您可以创建使用项目以及从同一项目更新的清单的作业模板。在这种情况下,您可以将项目设置为 update_on_launch,如果需要,它将触发清单更新。

  • 如果必须在 playbook 中使用与清单源不同的项目,则仍可将项目放置到工作流中,然后在项目更新成功时运行作业模板。

这将保证清单“及时”更新(这意味着清单更改在启动作业模板前完成),因为项目在清单更新完成前不会向完成状态转换。

注解

失败的清单更新不会将项目标记为失败。同时,并非每个项目更新都会触发对应的清单更新。如果项目修订没有更改,清单更新没有编辑,则不会执行。

另外,当一个相关作业正在运行时项目不会阻止更新。当您有大型项目(大约 10 GB)时,/tmp 可能会出现磁盘空间不足的问题。

4.2. SCM 清单源字段

使用的源字段有:

  • source_project:要使用的项目

  • source_path:项目内的相对路径指定目录或文件。如果留空,"" 仍是一个相对路径,指定项目的根目录。

  • source_vars:如果在“文件”类型清单源上设置,则会在运行时将其传递给环境变量

项目更新会在使用清单更新的地方自动触发清单更新。创建清单源后立即调度项目更新。在相关作业运行时,清单或项目更新都不会阻断。当您有大型项目(大约 10 GB)时,/tmp 可能会出现磁盘空间的问题。

您可以通过 Create Inventory Source 页面手动在 Tower 用户界面中指定位置。有关创建清单源的信息,请参阅 Ansible Tower User Guide清单 部分。

此列表应当在项目更新时刷新为最新的 SCM 信息。如果没有将项目作为 SCM 清单源,则在更新时不会刷新清单列表。

对于 SCM 来源的清单,清单更新的作业详情页面显示项目更新的状态指示符以及项目的名称。状态指示符链接到项目更新作业。项目名称链接到项目。

_images/jobs-details-scm-sourced-inventories.png

在相关作业运行时可以进行清单更新。

4.2.1. 支持的文件语法

Ansible Tower 使用 Ansible 中的 ansible-inventory 模块来处理清单(inventory)文件,并支持 Tower 所需的所有有效的清单语法。