我们想听听你的意见!帮助我们深入了解 Ansible 生态系统的现状。
参加 2024 年 Ansible 项目调查

在 Red Hat Ansible Tower 动态清单中使用 VMware vCenter 标签

在 Red Hat Ansible Tower 动态清单中使用 VMware vCenter 标签

VMware vCenter Server 标签是可应用于对象的标签,例如系统的环境和使用情况,因此它是非常有用的资产管理方法,也使标签非常适合在 Ansible 世界中组织 Ansible 清单中的系统。Red Hat 客户经常要求能够在 Red Hat Ansible Tower 中使用 vCenter 标签。现在,通过支持标签的 Ansible Tower 清单源,以及提供 vmware_vm_inventory 插件,这已成为可能。

Ansible 自动化平台 1.2 为 Ansible Tower 3.8 带来了完全原生的 Ansible 清单插件支持。在以前的版本中,存在基于旧清单脚本的特定清单插件配置,其中一组特定参数在 Ansible Tower 的用户界面中显示。例如:云区域以及可以传递给这些清单脚本的特定变量子集作为变量显示,您可以传递给清单源,这意味着为了保持与旧清单脚本的兼容性,不支持新的清单插件配置参数。 

支持原生清单插件的举动使 Red Hat Ansible 自动化平台客户能够使用通过插件提供的所有配置参数,并自动支持任何未来的新插件功能。

例如,下面的屏幕截图显示了 Ansible Tower 的旧版本(在本例中为 3.7)和 Ansible Tower 3.8 中的新源配置面板之间的区别。此特定示例适用于 Ansible Tower 3.8 中的 Amazon EC2 源

vcenter tags blog one

如您所见,“实例过滤器”和“区域”配置选项不再是 Ansible Tower 3.8 中用户界面的一部分,但现在可以在清单源定义的“源变量”部分进行配置。此 Ansible Tower 实例实际上是从 3.7 升级到 3.8 的,并且在升级期间,平台安装程序将获取旧的清单源并将其转换为兼容的清单插件配置,因此该部分中将有许多条目以保持升级后的源的相同结果,例如默认创建的组,作为旧的清单脚本。

非常激动人心的东西!

环境设置

因此,vmware_vm_inventory 插件使用配置参数支持标签 - with_tags - 默认值为 false - 因此我们需要在源定义中将其设置为 true,但如上面链接的文档中所述,使用此参数需要在控制器机器(在本例中为 Ansible Tower 节点)上安装 vSphere 自动化 SDK 库。该文档还链接到此 URL,了解安装步骤。

对于此示例,我们将使用创建的六个虚拟机

名称 类型 标签
testvm_1 RHEL7 Dev、TestVM、Linux
testvm_2 RHEL7 Prod、TestVM、Linux
testvm_3 RHEL8 Dev、TestVM、Linux
testvm_4 RHEL8 Prod、TestVM、Linux
testvm_5 Win2019 Dev、TestVM、Windows
testvm_6 Win2019 Prod、TestVM、Windows

第一步是确保我们的 Ansible Tower 节点具有使用此功能所需的库。由于我们可以使用带有自定义 Python 虚拟环境的清单源,因此我们将在 /opt/towervenvs 下创建一个名为 vmware-venv 的新 Python 虚拟环境,并将在这个环境中安装所需的库(您可以在 文档 中详细了解 Ansible Tower 的虚拟环境以及如何使用它们)。

$ sudo /opt/towervenvs/vmware-venv/bin/pip3 install --upgrade pip setuptools
$ sudo /opt/towervenvs/vmware-venv/bin/pip3 install --upgrade  git+https://github.com/vmware/vsphere-automation-sdk-python.git

确保在 Ansible Tower 集群中的所有节点上都安装了虚拟环境和所需的库,并且 Ansible Tower 已配置为在它们定义的目录下查找虚拟环境。此设置可以在 设置 > 系统 > 自定义虚拟环境路径 中找到

vcenter tags blog two

接下来,我们需要配置一个 vCenter 凭据,Ansible Tower 在同步清单时将使用它。 

在 Ansible Tower 中,从左侧面板的资源下选择“凭据”,然后单击添加图标并添加新的凭据。在新凭据配置面板中,输入新凭据的名称,选择“VMware vCenter”作为凭据类型,并填写所需的信息,以下是凭据定义的外观

vcenter tags blog three

在 Ansible Tower 中创建动态清单源

现在是创建清单的时候了。在 Ansible Tower 中,从左侧面板的资源下,选择“清单”,然后单击添加图标并添加新的清单。为清单命名,并为清单选择一个组织 - 我们将其命名为“VMware 清单”,并将其分配给 Red Hat 组织。

vcenter tags blog four

单击“保存”,现在源选项卡已启用。现在转到源选项卡,单击添加图标以添加新的源 - 为其命名,选择 VMware vCenter 作为源,然后选择我们之前创建的凭据(如果它是定义的唯一类型为“VMware vCenter”的凭据,则凭据可能已被自动填充),并确保选择安装了所需库的虚拟环境。

在源变量下,我们将添加以下内容并单击保存

---
plugin: community.vmware.vmware_vm_inventory
hostnames:
- 'config.name'
properties:
- name
- network
- overallStatus
- value
- capability
- config
- guest
- runtime
- summary
with_nested_properties: true
with_tags: true

vcenter tags blog five

我们的新清单源现在已创建,并将显示在源下。现在让我们单击同步图标以获取我们的虚拟机 (VM) 列表。同步作业完成后,源旁边的云图标变为绿色,我们现在可以进入主机列表并查看 vCenter 中的所有主机,如果我们单击任何主机,我们可以在“标签”键下看到关联的标签。太棒了!

vcenter tags blog six

vcenter tags blog seven

根据标签创建清单组

前面的配置将获取 vCenter 中所有具有关联标签的主机,以及我们根据清单插件文档中提供的内容定义的来宾属性。但我们只希望获取带有标签“TestVM”的虚拟机,并且我们希望根据与导入的虚拟机关联的标签、它们的电源状态和它们的来宾 ID 来创建组。因此,让我们添加一些过滤器,以及一些键控组定义。返回到我们定义的清单源,并将源变量下的定义替换为以下内容

---
plugin: community.vmware.vmware_vm_inventory
hostnames:
- 'config.name'
properties:
- name
- network
- overallStatus
- value
- capability
- config
- guest
- runtime
- summary
with_nested_properties: true
with_tags: true
keyed_groups:
- key: tags
  prefix: "vm_tag_"
  separator: ""
- key: config.guestId
  prefix: ''
  separator: ''
- key: summary.runtime.powerState
  prefix: ''
  separator: ''
filters:
- "'TestVM' in tags"

然后再次刷新清单源。

就是这样,我们现在拥有一个仅包含带有 TestVM 标签的主机的列表,以及根据 vCenter 中定义的标签创建的组。

vcenter tags blog eight

vcenter tags blog nine

新的原生 Ansible 清单插件支持可能会提高难度级别,因为您需要了解如何配置要使用的清单插件,但它为用户提供了很大的灵活性。