Documentation

15. 清单

:term:`Inventory`是可以作为作业启动对象的主机集合,与 Ansible 清单文件相同。清单被分成若干组,这些组包含实际的主机。组的来源可以是通过在 Tower 中输入主机名手动获取的,也可以来自 Ansible Tower 支持的云供应商之一。

注解

如果您有自定义动态清单脚本,或者尚未在 Tower 中受到原生支持的云提供商,您也可以将其导入 Tower。请参阅 Ansible Tower Administration Guide 中的 清单文件导入

这个标签页显示目前可用的清单列表。可以按照 NameTypeOrganization 对清单列表进行排序和搜索。

Inventories - home with examples

清单详情列表包括:

  • 清单同步 (sync-button):绿色表示清单中同步的成功,红色表示失败同步。点击此图标会显示最后五次清单源同步的同步状态和源信息(如果清单有可以同步的源)。

_images/inventories-home-with-status.png
  • 状态点:这显示了此清单的最近作业的状态。

  • Name:清单名称。点击清单名称可以进入所选清单的属性屏幕,其中显示了清单的组和主机。(也可以从 edit button 图标访问此视图。)

  • Type:标识它是标准清单还是智能清单。

  • Organization:清单所属的机构。

  • Actions:所选的清单可以使用以下操作:

    • 编辑 (edit button):编辑所选清单的属性

    • 复制 (copy):制作现有清单的副本作为创建新清单的模板

    • 删除 (delete):删除所选清单。此操作无法撤销!

注解

如果删除了由其他工作项目使用的项,则会打开一条信息,列出会受到删除影响的项,并提示您确认删除。一些界面会包括无效的或以前已被删除的项,因此它们将无法运行。以下是这类信息的一个示例:

_images/warning-deletion-dependencies.png

15.1. 智能清单

智能清单是一个由存储的搜索定义的主机集合,可以像标准清单一样查看,并可以轻松用于作业运行。机构管理员对其机构中的清单具有管理员权限,并可创建智能清单。智能清单由 KIND=smart 标识。您可以使用 Tower Search 中所用的相同方法定义智能清单。InventorySource 直接与清单关联。

Inventory 模型具有以下新字段,这些字段默认为空白,但会针对智能清单进行相应的设置:

  • 对于智能清单,kind 会设置为 smart

  • 对于智能清单,会设置 host_filterkind 会设置为 smart

host 模型具有一个相关的端点 smart_inventories,用于标识主机所关联的所有智能清单的集合。每次针对智能清单运行作业时,都会更新成员资格表。

注解

要更频繁地更新成员资格,您可以将基于文件的设置 AWX_REBUILD_SMART_MEMBERSHIP 更改为 **True**(默认为 False)。这将在以下事件中更新成员资格:

  • 添加了新主机

  • 修改(更新或删除)了现有主机

  • 添加了新智能清单

  • 修改(更新或删除)了现有智能清单

您可以查看实际清单而无需变为可编辑状态:

  • 清单源同步后创建的主机和组的名称

  • 组记录无法编辑或移动

您无法像普通清单一样从智能清单主机端点 (/inventories/N/hosts/) 创建主机。智能清单的管理员有权限编辑名称、描述、变量和删除功能等字段,但没有修改 host_filter 的权限,因为这会影响智能清单中包含哪些主机(在另一个清单中具有主要成员资格)。请注意,host_filter 只适用于智能清单所属机构内的清单内主机。

若要修改 host_filter,您需要成为清单所属机构的机构管理员。机构管理员已经具有对机构内所有清单的隐式“管理员”访问权限,因此,这不会使他们具有尚未拥有的任何权限。

智能清单管理员可以授予其他用户(不是您机构的管理员的用户)权限,如对智能清单的“使用”、“临时”权限,这些权限将允许执行角色所指示的操作,就像其他标准清单一样。但是,这不会赋予他们对(位于不同清单中的)主机的任何特殊权限。它不赋予他们对主机的直接读取权限,或允许他们看到 /#/hosts/ 下的其他主机,虽然他们仍然可以查看智能清单主机列表下的主机。

在有些情况下,您可以修改以下内容:

  • 在包含清单源的清单上手动创建的新主机

  • 在清单源同步后创建的组中

  • 主机和组上的变量可更改

与智能清单关联的主机会在查看时显示。如果智能清单的结果包含多个具有相同主机名的主机,则只会包含一个匹配的主机作为智能清单的一部分,按主机 ID 排序。

15.2. 清单插件

从 3.5 开始,运行 Ansible 2.8 的 Ansible Tower 会自动切换为使用清单插件(而不是脚本),具体取决于源类型。Ansible 2.8 中启用的插件有:

以下源尚未运行插件,仍在使用脚本:

如果您已经设置了清单源,那么 Tower 会根据源和 Ansible 版本自动切换为使用清单插件,但会继续维护之前位于这些脚本中的相同内容。如果您需要控制使用的 Ansible 版本,您可以使用自定义虚拟环境作为清单源。请参阅 Using virtualenv with Ansible Tower

15.3. 添加新清单

添加新清单涉及几个组件。请在下方点击以跳到特定的组件:

要创建新清单或智能清单,请执行以下操作:

  1. 点击 add 按钮,然后选择要创建的清单类型。

清单的类型由创建表单顶部的标签和标签页行来标识。

Inventories_create_new - create new inventory

  1. 在以下字段中输入相关信息:

  • Name:输入适合此清单的名称。

  • Description:根据需要输入任意描述(可选)。

  • Organization:必需。在可用机构中进行选择。

  • Smart Host Filter:(仅适用于智能清单)点击 search 按钮,打开单独的 Dynamic Hosts 窗口对此清单的主机进行过滤。这些选项基于您选择的机构。

    过滤器与标签类似,因为标签用于过滤某些包含这些名称的主机。因此,要填充 Smart Host Filter 字段,您需要指定包含您所需主机的标签,而不是实际选择主机本身。请在 Search 字段中输入标签,然后按 [Enter] 键。过滤器区分大小写。如需了解更多信息,请参阅 智能主机过滤器 部分。

    _images/inventories-create-new-inventory-dynamic-hosts.png
  • Insights Credential:(仅适用于标准清单)如果清单与 Insights 搭配使用,请输入适当的 Insights 凭证。

  • Instance Groups:点击 search 按钮以打开单独的窗口。选择要在其上面运行此清单的实例组。如果列表较长,请使用搜索功能来缩小选项范围。

  • Variables:要应用到此清单中所有主机的变量定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。

Inventories_create_new_saved - create new inventory

  1. 完成后请点击 Save

在 Tower 保存新清单后,您可以继续配置权限、组、主机、源和查看已完成的作业(如果适用于相关清单类型)。如需更多说明,请参阅后续部分。

15.3.1. 添加权限

Permissions 标签页允许您为用户和团队成员审核、授权、编辑和删除相关权限。要为特定用户分配这个资源的权限:

  1. 点击**Permissions** 标签页。

  2. 点击 add 按钮,打开 Add Users/Teams 窗口。

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

  1. 点击需要选择的用户或团队名称旁的复选框来选择它们。

注解

您可以同时选择多个用户和团队,方法是在没有保存的情况下在 UsersTeams 标签页中进行选择。

选择后,窗口将展开,以便您为选择的每个用户或团队从下拉菜单中选择一个角色。

Roles Assignment for Selected Users

上面的例子显示了与清单关联的选项. 不同的资源有不同的可用选项:

  • Admin 允许读、运行和编辑权限(适用于所有资源)

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

  • Update 允许通过 SCM 更新项目(适用于项目和 inventory)

  • AdPriority 允许使用 Ad Hoc 命令(适用于 inventory)

  • Execute 允许启动作业模板(适用于作业模板)

  • Read 允许只读访问(适用于所有资源)

小技巧

使用角色选择栏中的 Key 按钮显示每个角色的描述信息。如需更多信息,请参阅本指南的 角色 部分。

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

注解

您可以同时为多个用户和团队分配角色,方法是在没有保存的情况下在 UsersTeams 标签页中进行设置。

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

Add Permissions - Examples of roles applied
  1. 完成后,点击 保存,然后关闭 Add Users/Teams 窗口以显示为每个用户和团队分配的更新角色。

    Permissions tab with Role Assignments

要删除特定用户的权限,请点击其资源旁的 Disassociate (x) 按钮。

_images/permissions-disassociate.png

这会出现确认对话框,要求您确认解除关联。

_images/permissions-disassociate-confirm.png

15.3.2. 添加组

清单被分成若干组,这些组可能包含主机和其他组以及主机。组只适用于标准清单,而且无法直接通过智能清单进行配置。您可以通过与标准清单搭配使用的主机来关联现有的组。有几个操作可用于标准清单:

  • 创建新组

  • 创建新主机

  • 在所选清单上运行命令

  • 编辑清单属性

  • 查看组和主机的活动流

  • 获取构建清单的帮助

注解

从 Ansible Tower 3.2 开始,清单源不再与组关联。在之前的版本中,生成的组和主机是我们的清单源组的子级。现在,生成的组为顶层。这些组可能仍然有子组,且所有这些生成的组都可能含有主机。

要为清单创建新组,请执行以下操作:

  1. 点击 add 按钮,打开 Create Group 窗口。

Inventories_manage_group_add

  1. 在必填和可选字段中输入相关详情:

  • Name:(必需)

  • Description:根据需要输入任意描述(可选)

  • Variables:输入要应用到此组中所有主机的定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。

  1. 完成后,点击 保存

15.3.2.1. 在组内添加组

要在组内添加组,请执行以下操作:

  1. 点击 Groups 标签页。

  2. 点击 add 按钮,并选择添加您的配置中已存在的组,或创建新组。

  3. 如果创建新组,请在必填和可选字段中输入相关详情:

  • Name:(必需)

  • Description:根据需要输入任意描述(可选)

  • Variables:输入要应用到此组中所有主机的定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。

  1. 完成后,点击 保存

Create Group 窗口关闭,在为之创建了新组的组所关联的组列表中,新创建的组会显示为一个条目。

Inventories add group subgroup

如果您选择了添加现有组,可用组将出现在单独的选择窗口中。

Inventories add group existing subgroup

选择了一个组之后,它将在与组关联的组列表中显示为一个条目。

5. To configure additional groups and hosts under the subgroup, click on the name of the subgroup from the list of groups and repeat the same steps described in this section.

Inventories add group subgroup emphasized

15.3.2.2. 查看或编辑清单组

从 Ansible Tower 3.5 开始,您可以一次查看所有清单组,或者在过滤后仅显示根组。如果清单组不是另一个组的子集,则被视为根组。

_images/inventories-groups-all-groups-view.png _images/inventories-groups-root-groups-view.png

您可以删除子组而无需考虑依赖项,但如果您想要删除根组,则 Tower 会查找依赖项,例如任何子组或主机。如果您想要删除的根组两者皆有,则会显示一个确认对话框,供您选择是删除根组及其所有子组和主机,还是提升子组及其主机,使子组成为顶层清单组。

_images/inventories-groups-delete-root-with-children.png

如果根组有一个没有任何主机的子组,则确认对话框会只询问您是要删除所有内容,还是否提升您的组。

_images/inventories-groups-delete-root-with-child.png

15.3.3. 添加主机

您可以为清单以及组和组内的组配置主机。要配置主机,请执行以下操作:

  1. 点击 Hosts 标签页。

  2. 点击 add 按钮,并选择是添加您的配置中已存在的主机还是创建新主机。

  3. 如果创建新主机,请选择 toggle button 按钮指定是否在运行作业时包含这个主机。

  1. 在必填和可选字段中输入相关详情:

  • Host Name:(必需)

  • Description:根据需要输入任意描述(可选)

  • Variables:输入要应用到此组中所有主机的定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。

  1. 完成后,点击 保存

Create Host 窗口关闭,在为之创建了新主机的组所关联的组列表中,新创建的主机会显示为一个条目。

Inventories add group host

注解

您也可以在此屏幕中运行临时命令。更多详情请参阅 运行临时(Ad Hoc)命令

如果您选择了添加现有主机,可用主机将出现在单独的选择窗口中。

Inventories add existing host

选择了一个主机之后,它将在与组关联的主机列表中显示为一个条目。

6. To configure facts and additional groups for the host, click on the name of the host from the list of hosts.

Inventories add group host emphasized

这会打开所选主机的 Details 标签页。

Inventories add group host details

  1. 点击 Facts 标签页输入您想收集的事实。有关事实的更多信息,请参阅 事实缓存 部分。

  2. 点击 Groups 标签页为主机配置组。

  1. 点击 add 按钮将主机与现有组相关联。

可用的组会出现在单独的选择窗口中。

_images/inventories-add-group-hosts-add-groups.png
  1. 点击以选择与主机关联的组,然后点击 Save

关联了一个组之后,它将在与主机关联的组列表中显示为一个条目。

  1. 如果使用了某个主机来运行作业,您可以在此主机的 Completed Jobs 标签页中查看这些作业的详情,并点击 Expanded 查看每个作业的详情。

_images/inventories-add-host-view-completed-jobs.png

15.3.4. 添加源

清单源不再与组关联。在 Ansible Tower 3.2 之前,生成的组和主机是我们的清单源组的子级。现在,生成的组为顶层。这些组可能仍然有子组,且所有这些生成的组都可能含有主机。

在清单中添加源只适用于标准清单。智能清单会从与其关联的标准清单中继承其源。要配置清单的源,请执行以下操作:

  1. 在您要添加源的清单中,点击**Sources** 标签。

  2. 点击 add 按钮。

这会打开 Create Source 窗口。

Inventories create source

  1. 在必填和可选字段中输入相关详情:

  • Name:(必需)

  • Description:根据需要输入任意描述(可选)

  • Source:选择与可以作为主机输入依据的凭证类型匹配的源。请参阅 凭证源 部分,以了解有关每个源的更多信息以及用于输入适当信息的详情。从 Ansible Tower 版本 3.2 开始,不再支持 Rackspace Cloud Servers。

  • Ansible Environment:只有在设置自定义虚拟环境 (venvs) 时才会出现此字段。请选择您要用来运行清单导入的 venv。有关设置自定义 venv 的详情,请参阅 Using virtualenv with Ansible Tower

_images/inventories-edit-source-details-venv.png
  1. 为所选的 credential source 完成必填信息后,您可以从 Verbosity 下拉菜单中选择适当的选项,为任何清单源的更新作业配置输出级别。

  2. 所有云清单源都有以下更新选项:

  • Overwrite:有关信息请参阅屏幕上的工具提示 (tooltip)。为了保证在 3.2 迁移后具有一致的行为,请不要设置为 True

  • Overwrite Variables:有关信息请参阅屏幕上的工具提示 (tooltip)。

  • Update on Launch:每次使用此清单运行作业时,在执行作业任务前从所选源中刷新清单。如果作业的生成速度快于清单的同步速度,为了避免作业溢出,可以选择此选项来配置一个 Cache Timeout,以将之前的清单同步缓存几秒钟。

“Update on Launch”设置指的是项目和清单的依赖项系统,并且它不会特别排除两个作业同时运行。如果指定了缓存超时,那么会创建第二个作业的依赖项,并使用第一个作业生成的项目和清单更新。然后,两个作业会等待该项目和/或清单更新完成,然后再继续。如果它们是不同的作业模板,则它们可以同时启动并运行,只要系统有足够的容量。如果您要将 Tower 的部署回调功能与动态清单源结合使用,则应该为清单组设置“Update on Launch”。

  1. 检查您的条目和选择,完成后点击 Save。这时您可以配置附加详情,如通知和计划。

注解

Notifications 标签页只有在您保存新创建的源后才会显示。

_images/inventories-create-source-with-notifications-tab.png
  1. 要为源配置通知,请点击 Notifications 标签页。

  1. 如果已经设置了通知,请使用切换按钮启用或禁用要与特定源搭配使用的通知。更多详情请参阅 启用和禁用通知

  2. 如果还没有设置通知,请参阅 通知 了解更多信息。

  1. 要配置与这个清单源关联的计划,请点击 Schedules 标签页。

  1. 如果已经设置了计划,请检查、编辑或启用/禁用您的计划首选项。

  2. 如果还没有设置计划,请参阅 调度 了解更多信息。

  1. 检查您的条目和选择,完成后点击 Save

一旦定义了源,它便会在与清单关联的源列表中显示为一个条目。在 Sources 标签页中,您可以对单个源执行同步,或同时同步所有源。您也可以执行其他操作,如调度同步过程,以及编辑或删除源。

Inventories view sources

15.3.4.1. 凭证源

选择与可以作为主机输入依据的凭证类型匹配的源:

15.3.4.1.1. 源于一个项目

源于一个项目的清单意味着它会使用与之关联的项目中的 SCM 类型。例如,如果项目源来自 GitHub,或 Red Hat Insights 项目,则清单将使用相同的源。

  1. 要配置源于项目的清单,请从 Source 字段中选择 Sourced from a Project

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:指定用于此源的凭证。

  • Project:必需。指定此清单使用的项目作为其源。点击 search 按钮以从项目列表中进行选择。如果列表较长,请使用搜索功能来缩小选项范围。

  • Inventory File:必需。选择与源项目关联的清单文件。如果尚未填充,则可以将其键入到下拉菜单中的文本字段,以过滤无关的文件类型。除了平面文件清单外,您还可以指向目录或清单脚本。

_images/inventories-create-source-sourced-from-project-filter.png
  1. 除了可用于云清单源的更新选项外,您还可以指定是否在项目更改后进行更新。请选中 Update on Project Update 选项,以在因 SCM 修订版本变更进行每次项目更新后从所选源中刷新清单,再执行作业任务。如需了解更多详情,请参阅 Ansible Tower Administration Guide 中的 Update on Project Update

  2. 要传递到自定义清单脚本,您可以选择性地在 Environment Variables 字段中设置环境变量。

Inventories - create source - sourced from project example

注解

如果您要从 SCM 执行自定义清单脚本,请确保您在上游源控制中的脚本上设置执行位(例如 chmod +x)。如果您不设置,那么 Tower 会在执行时抛出 [Errno 13] Permission denied 错误。

15.3.4.1.2. Amazon Web Services EC2
  1. 要配置源于 AWS EC2 的清单,请从 Source 字段中选择 Amazon EC2

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:从现有凭证中选择(详情请参阅 凭证)。

    如果 Tower 在带有分配的 IAM 角色的 EC2 实例上运行,则可能会省略凭证,并将改用实例元数据中的安全凭证。有关使用 IAM 角色的更多信息,请参阅 IAM_Roles_for_Amazon_EC2_documentation_at_Amazon

  • Regions:点击区域字段查看云提供商的区域列表。您可以选择多个区域,或者选择“All”以包括所有区域。Tower 只会更新与所选区域关联的主机。

  • Instance Filters:根据各种元数据过滤清单脚本返回的实例,而不是导入整个 Amazon EC2 清单。如果主机与此处输入的任何过滤器匹配,则会导入这些主机。

示例:

  • 要限制为带有标签 TowerManaged 的主机:请输入 tag-key=TowerManaged

  • 要限制为使用键名称 stagingproduction 的主机:请输入 key-name=staging, key-name=production

  • 要限制为 Name 标签开头为 test 的主机,请输入 tag:Name=test*

有关此处可以使用的过滤器的更多信息,请参阅 Amazon 的 Describe Instances 文档。

  • Only Group By:默认情况下,Tower 根据以下 Amazon EC2 参数创建组:

    • 可用性区域

    • 镜像 ID

    • 实例 ID

    • 实例类型

    • 键名称

    • 区域

    • 安全组

    • 标签(按名称)

    • VPC ID

    • Tag None

    如果您不想创建所有这些组,请从下拉列表中选择您想默认创建的组列表。您也可以选择 Instance ID 以根据实例的实例 ID 创建组。

  1. 使用 Source Variables 字段覆盖 ec2.ini 中由清单更新脚本使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的详细描述,请 view ec2.ini in the Ansible GitHub repo

Inventories - create source - AWS EC2 example

15.3.4.1.3. Google Compute Engine
  1. 要配置源于 Google 的清单,请从 Source 字段中选择 Google Compute Engine

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择。详情请参阅 凭证

  • Regions:点击区域字段查看云提供商的区域列表。您可以选择多个区域,或者选择“All”以包括所有区域。Tower 只会更新与所选区域关联的主机。

Inventories - create source - GCE example

15.3.4.1.4. Microsoft Azure Resource Manager
  1. 要配置源于 Azure Resource Manager 的清单,请从 Source 字段中选择 Azure Resource Manager

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择。详情请参阅 凭证

  • Regions:点击区域字段查看云提供商的区域列表。您可以选择多个区域,或者选择“All”以包括所有区域。Tower 只会更新与所选区域关联的主机。

Inventories - create source - Azure RM example

15.3.4.1.5. VMware vCenter
  1. 要配置源于 VMWare 的清单,请从 Source 字段中选择 VMware vCenter

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择(详情请参阅 凭证)。

  • Instance Filters:根据各种元数据过滤清单脚本返回的实例,而不是导入整个 VMWare 清单。如果主机与此处输入的任何过滤器匹配,则会导入这些主机。

有关可以使用的过滤器的更多信息,请参阅 VMware 的 Quick Filters Available for vSphere Objects 文档。

  • Only Group By:默认情况下,Tower 根据用户指定的 VMWare 参数创建组。例如,输入 Instance ID 以根据实例的实例 ID 创建组。

  1. 使用 Source Variables 字段覆盖 vmware.ini 中由清单更新脚本使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的详细描述,请 view vmware_inventory.ini in the Ansible GitHub repo

注解

在 Ansible Tower 3.1.2 中,VMware 的清单脚本经过了更新以允许配置 host_filtersgroupby_patterns 参数。请在 Create Group 屏幕或 Edit Group 屏幕的 Source Variables 文本字段中指定这些值。例如:

_images/inventories-create-vmware-group-source-variables.png

Inventories - create source - VMWare example

15.3.4.1.6. Red Hat Satellite 6
  1. 要配置源于 Red Hat Satellite 的清单,请从 Source 字段中选择 Red Hat Satellite

  2. Create Source 窗口会展开更多字段。

  • Credential:必需。从现有凭证中选择(详情请参阅 凭证)。

  • 使用 Source Variables 字段覆盖 foreman.ini 中由清单更新脚本使用的变量。

注解

foreman.ini 中的变量 want_facts 硬编码为 True,此时不能被覆盖。如果您想要设置 group_patternsgroup_prefixwant_hostcollections 变量,请为它们添加前缀 satellite6,例如:satellite6_group_prefix: myprefix

使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的详细描述,请 view foreman.ini in the Ansible GitHub repo

Inventories - create source - RH Satellite example

15.3.4.1.7. Red Hat CloudForms
  1. 要配置源于红帽 CloudForms 的清单,请从 Source 字段中选择 Red Hat CloudForms

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择(详情请参阅 凭证)。

  • 使用 Source Variables 字段覆盖 cloudforms.ini 中由清单更新脚本使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的详细描述,请 view cloudforms.ini in the Ansible GitHub repo

Inventories - create source - RH CloudForms example

15.3.4.1.8. OpenStack
  1. 要配置源于 OpenStack 的清单,请从 Source 字段中选择 OpenStack

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择(详情请参阅 凭证)。

  • 使用 Source Variables 字段覆盖 openstack.yml 中由清单更新脚本使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的详细描述,请 view openstack.yml in the Ansible GitHub repo

Inventories - create source - OpenStack example

15.3.4.1.9. Red Hat Virtualization
  1. 要配置源于 Red Hat Virtualization 的清单,请从 Source 字段中选择 Red Hat Virtualization

  2. Create Source 窗口会展开更多字段。Credential 是必需的。从现有凭证中选择(详情请参阅 凭证)。

Inventories - create source - RHV example

15.3.4.1.10. Ansible Tower
  1. 要配置源于 Ansible Tower 的清单,请从 Source 字段中选择 Ansible Tower

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:必需。从现有凭证中选择(详情请参阅 凭证)。

  • Instance Filters:按清单 ID/名称过滤实例,而不是导入整个 Tower 清单;然后,清单脚本将从另一个 Tower 实例返回该清单。

_images/inventories-create-source-atower-example.png
15.3.4.1.11. 自定义脚本

如果您的管理员添加了自定义动态清单脚本,您可以在 Tower 中使用它。

  1. 要配置源于自定义脚本的清单,请从 Source 字段中选择 Custom Script

  2. Create Source 窗口会展开更多字段。请输入以下详情:

  • Credential:您可选择性地为自定义源提供凭证。凭证种类仅限于云和网络。详情请参阅 自定义凭证类型

  • Custom Inventory Script:必需。从现有清单脚本中选择(详情请参阅 自定义清单脚本)。

  • Environment Variables:设置环境中由清单更新脚本使用的变量。变量将特定于您编写的脚本。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。

Inventories - create source - custom script example

有关同步或使用自定义清单脚本的详情,请参阅 Ansible Tower Administration Guide 中的 自定义清单脚本

15.3.5. 查看完成的作业

如果使用了某个清单来运行作业,您可以在此清单的 Completed Jobs 标签页中查看这些作业的详情,并点击 Expanded 查看每个作业的详情。

Inventories view completed jobs

15.3.5.1. 智能主机过滤器

您可以使用搜索过滤器为清单填充主机。这个功能是在 Ansible Tower 3.2 中引入的,利用了事实搜索功能的特性。

只要为每个作业模板设置了 use_fact_cache=True,在运行作业模板期间由 Ansible playbook 生成的事实便会被 Tower 存储到数据库中。新事实将按主机与现有事实合并。这些存储的事实可用于通过 /api/v2/hosts 端点使用 GET 查询参数 host_filter 来过滤主机,例如:/api/v2/hosts?host_filter=ansible_facts__ansible_processor_vcpus=8

host_filter 参数允许以下操作:

  • 通过 () 进行分组

  • 使用布尔值和运算符:

    • __ 用于引用关系字段中的相关字段

    • __ 在 ansible_facts 上用于分离 JSON 键路径中的键

    • [] 用于表示路径规格中的 json 数组

    • "" 可在值中需要空格时用于值中

  • "classic" Django 查询可以嵌入到 host_filter

示例:

/api/v2/hosts/?host_filter=name=localhost
/api/v2/hosts/?host_filter=ansible_facts__ansible_date_time__weekday_number="3"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"
/api/v2/hosts/?host_filter=ansible_facts__ansible_lo__ipv6[]__scope="host"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor_vcpus=8
/api/v2/hosts/?host_filter=ansible_facts__ansible_env__PYTHONUNBUFFERED="true"
/api/v2/hosts/?host_filter=(name=localhost or name=database) and (groups__name=east or groups__name="west coast") and ansible_facts__an

您可以按主机名、组名称和 Ansible 事实来搜索 host_filter

组搜索的格式为:

groups.name:groupA

事实搜索的格式为:

ansible_facts.ansible_fips:false

您还可以执行包含主机名和主机描述的智能搜索。

host_filter=name=my_host

如果 host_filter 中的搜索词为字符串类型,要使值成为数字(如 2.66)或使 JSON 关键字(如 nulltruefalse)有效,请在值的两旁添加双引号以防止 Tower 错误地将它解析为非字符串:

host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"

15.4. 运行临时(Ad Hoc)命令

要运行临时命令,请执行以下操作:

  1. 从主机或组列表中选择清单源。该清单源可以是单个组或主机,也可以是特定的多个主机或特定的多个组。

ad hoc-commands-inventory-home

  1. 点击 adhoc 按钮。

Execute Command 窗口将打开。

_images/ad-hoc-run-execute-command.png
  1. 输入以下字段的详情:

  • Module:选择 Tower 支持运行命令的模块之一。

    命令

    apt_repository

    mount

    win_service

    shell

    apt_rpm

    ping

    win_updates

    yum

    service

    selinux

    win_group

    apt

    group

    setup

    win_user

    apt_key

    user

    win_ping

  • Arguments:提供要与您选择的模块搭配使用的参数。

  • Limit:输入用于确定清单中的目标主机的限制。要将清单中的所有主机作为目标,请输入 all*,或将该字段留空。该字段将自动填充在点击启动按钮之前的上一个视图中选择的内容。

  • Machine Credential:选择要在访问远程主机时用来运行命令的凭证。选择包含 Ansbile 登录远程主机所需的用户名和 SSH 密钥或密码的凭证。

  • Verbosity:选择标准输出的详细程度。

  • Forks:如果需要,请选择执行命令时使用的并行或同步进程数量。

  • Show Changes:选择此项可在标准输出中显示 Ansible 更改。默认值为 OFF。

  • Enable Privilege Escalation:如果启用此项,则会使用管理员权限运行 playbook。这等同于将 --become 选项传递给 ansible 命令。

  • Extra Variables:提供要在运行此清单时应用的额外命令行变量。使用 JSON 或 YAML 语法输入变量.。用单选按钮在两者之间切换。

ad hoc-commands-inventory-run-command

  1. 点击 launch-adhoc 按钮来运行这个临时命令。

结果会显示在 Details 窗格和 Standard Out 窗口中。

ad hoc-commands-inventory-results-example