在 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 源
如您所见,“实例过滤器”和“区域”配置选项不再是 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 凭据,Ansible Tower 在同步清单时将使用它。
在 Ansible Tower 中,从左侧面板的资源下选择“凭据”,然后单击添加图标并添加新的凭据。在新凭据配置面板中,输入新凭据的名称,选择“VMware vCenter”作为凭据类型,并填写所需的信息,以下是凭据定义的外观
在 Ansible Tower 中创建动态清单源
现在是创建清单的时候了。在 Ansible Tower 中,从左侧面板的资源下,选择“清单”,然后单击添加图标并添加新的清单。为清单命名,并为清单选择一个组织 - 我们将其命名为“VMware 清单”,并将其分配给 Red Hat 组织。
单击“保存”,现在源选项卡已启用。现在转到源选项卡,单击添加图标以添加新的源 - 为其命名,选择 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
我们的新清单源现在已创建,并将显示在源下。现在让我们单击同步图标以获取我们的虚拟机 (VM) 列表。同步作业完成后,源旁边的云图标变为绿色,我们现在可以进入主机列表并查看 vCenter 中的所有主机,如果我们单击任何主机,我们可以在“标签”键下看到关联的标签。太棒了!
根据标签创建清单组
前面的配置将获取 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 中定义的标签创建的组。
新的原生 Ansible 清单插件支持可能会提高难度级别,因为您需要了解如何配置要使用的清单插件,但它为用户提供了很大的灵活性。