第 18 章 清单
Red Hat Ansible Automation Platform 使用清单文件,根据您以逻辑方式组织的基础架构中的受管节点或主机列表进行工作。您可以使用 Red Hat Ansible Automation Platform 安装程序清单文件指定您的安装场景,并描述 Ansible 的主机部署。通过使用清单文件,Ansible 可以通过一个命令管理大量主机。清单还可以通过减少您指定的命令行选项数目来更有效地使用 Ansible。清单被分成不同的组,这些组包含主机。
组可以通过将主机名输入到自动化控制器或其支持的云供应商来手动提供。
如果您有自定义动态清单脚本,或者尚未在自动化控制器中受到原生支持的云供应商,您也可以将其导入到自动化控制器中。
如需更多信息,请参阅 自动化控制器管理指南中的 清单文件导入。
在导航面板中,选择
清单详情页面 包括:
- Name :清单名称。
- Status
状态为:
- 成功 :清单源同步成功完成
- disabled: 没有添加到清单中的清单源
Error: 当清单源同步完成并出错时
- Type: 标识它是标准清单、智能清单还是构建的清单。
- Organization: 清单所属的机构。
- Actions: 以下操作可用于所选清单:
-
编辑
:编辑所选清单的属性
-
复制
:制作现有清单的副本作为创建新清单的模板
单击 Inventory 名称,以显示所选清单的 Details 页面,其中显示清单的组和主机。
18.1. 智能清单
智能清单是由存储的搜索定义的主机集合,可以像标准清单一样查看,可轻松用于作业运行。机构管理员对其机构中的清单具有 admin 权限,并可创建智能清单。
智能清单由 KIND=smart
标识。
您可以使用与搜索相同的方法定义智能清单。InventorySource
与清单直接关联。
智能清单已弃用,并将在以后的发行版本中删除。考虑移至构建的清单以进行功能增强和替换。
清单
模型具有以下新字段,默认为空白,但会针对智能清单进行相应设置:
-
对于智能清单,
kind
设置为smart
。 -
host_filter
是针对智能清单设置的 ANDkind
,设置为smart
。
主机模型
具有一个相关的端点 smart_inventories
,用于标识主机所关联的所有智能清单的集合。每次作业针对智能清单运行时,都会更新成员资格表。
要更频繁地更新成员资格,您可以将 AWX_REBUILD_SMART_MEMBERSHIP
文件的设置改为 True
。(默认为 False)。如果发生以下事件,这个更新成员资格:
- 添加了新主机
- 修改(更新或删除)现有主机
- 添加了新智能清单
- 修改(更新或删除)现有智能清单
您可以在不编辑的情况下查看清单:
- 清单源同步后创建的主机和组的名称。
- 组记录无法编辑或移动。
您不能像普通清单一样从智能清单主机端点(/inventories/N/hosts/
)创建主机。智能清单的管理员具有编辑名称、描述、变量以及删除功能等字段的权限,但没有修改 host_filter
的权限,因为这会影响智能清单中包含哪些主机(在另一个清单中具有主要成员资格)。
host_filter
仅适用于智能清单机构中清单内的主机。
要修改 host_filter
,您必须是清单机构的机构管理员。机构管理员具有对机构内所有清单的隐式"管理员"访问权限,因此,这不会使他们尚未拥有的任何权限。
智能清单的管理员可以向智能清单授予其他用户(不是您机构的管理员)权限。它们允许角色指示的操作,与其他标准清单一样。但是,这不会为主机(位于不同的清单中)授予任何特殊权限。它不允许主机直接读取权限,或者允许它们查看 /#/hosts/
下的其他主机,但它们仍然可以查看智能清单主机列表下的主机。
在有些情况下,您可以修改以下内容:
- 使用清单源在清单上手动创建的新主机。
- 清单源同步后创建的组。
- 主机和组上的变量不可更改,即使作为本地系统管理员也是如此。
与智能清单关联的主机会在查看时显示。如果智能清单的结果包含多个具有相同主机名的主机,则只会包含一个匹配的主机作为智能清单的一部分,按主机 ID 排序。
18.1.1. 智能主机过滤器
您可以使用搜索过滤器为清单填充主机。此功能使用事实搜索功能。
每当每个作业模板设置了 use_fact_cache=True
时,自动化控制器会在数据库中存储由 Ansible Playbook 生成的事实。新事实与现有事实合并,并按主机合并。这些存储的事实可用于使用 GET
查询参数 host_filter
使用 /api/v2/hosts
端点过滤主机。
例如:
/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 关键字(如 null
、true
或 false
)有效,请在值之间添加双引号以防止控制器将其解析为非字符串:
host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"
18.1.2. 使用 ansible_facts 定义主机过滤器
使用以下步骤在创建智能清单时使用 ansible_facts
定义主机过滤器。
流程
-
在导航面板中,选择
。 - 从 Add 列表中选择 Add Smart Inventory。
在 Create new Smart inventory 页面中,点 Smart host filter 字段中的
图标。这会打开一个窗口,用于过滤此清单的主机。
在搜索菜单中,将搜索条件从 Name 更改为 Advanced,然后从 Key 字段中选择 ansible_facts。
如果要添加以下 ansible 事实:
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"
在搜索字段中,输入
ansible_processor[]="GenuineIntel"
(在值前面没有额外空格或__
),然后单击 。此时会显示指定 ansible 事实的搜索条件。
要根据 regex 变量过滤,请参阅
ansible.builtin.regex_search 过滤器
文档,以及 KCS 文章,如何在创建智能清单时使用 regex 过滤没有特定变量名称的主机。
- 点 Smart host 过滤器 字段。 将其添加到
- 点击 。
- 新智能清单的 Details 选项卡会打开,并在 Smart host filter 字段中显示指定的 ansible 事实。
在 Details 视图中,您可以通过点 Edit and delete existing filters、清除所有现有过滤器或添加新过滤器来编辑 Smart host filter 字段。