使用 Ansible 审计 VMware vCenter Server
使用 Ansible 审计 VMware vCenter Server
如果您想与 vCenter 交互,它有一个图形用户界面,但如果您管理多个 vCenter 服务器并希望自动化这些服务器的审计或维护怎么办?在本博文中,我们将了解如何直接使用 Ansible 检索有关 VMware vCenter Server 的详细信息。博客中列出的实践将帮助负责管理多个 vCenter 服务器的系统管理员。此外,在开发环境中,Ansible 自动化对于在 CI/CD 管道中针对多个实例进行测试变得至关重要。
新的 vmware.vmware_rest 集合最近已发布,并且附带了一组新的模块,专门用于 vCenter Server (VCSA) 管理。
VMware vSphere(包含 vCenter Server 和其他功能的产品捆绑包)7.0.2(又名 7.0U2)附带了一些新的 REST 端点。此 REST API 并未涵盖通过 SOAP 接口公开的所有功能。vmware.vmware_rest 集合中的模块构建在此 API 之上,并面临相同的限制。
vmware.vmware_rest 集合包含这些模块,这些模块受 Red Hat 支持,可在 Ansible 自动化中心 获取。
从 Ansible 验证 vCenter Server 实例的状态
以我们自己的“吃自己狗粮”(或“喝自己香槟”)的例子为例,我们的云/基础设施团队维护一个 CI 来验证 VMware Ansible 模块。每次提交新的更改时,都会针对新部署的 VMware 实验室运行完整的测试套件。初始部署需要 15 分钟,因此我们无法在运行十几项测试之前生成新的环境。因此,保持测试环境尽可能干净变得非常重要。
我们使用这些新的设备模块来构建测试套件运行之前和之后的 vCenter 实例的审计报告。这样,更容易发现测试运行之间的任何不一致之处。
设备模块涵盖以下用例。
- 访问 → 本地帐户、审计和控制控制台、直接控制台 UI、Shell 甚至 SSH。
- 健康 → 检索有关系统组件状态的信息。
- 网络 → 收集有关网络配置的信息并进行调整。
- 系统 → 管理服务、重启系统、获取存储配置、获取更新状态等。
- 时间管理 → 配置 NTP 服务器、调整时区。
如何开始使用这些模块
可在 Ansible 自动化中心 获取的 vmware_rest 集合的最新版本支持 vSphere 7.0.2 及更高版本。
我们可以通过一些环境变量或模块参数传递身份验证密钥。在以下示例中,我们使用第一个选项。例如
VMWARE_HOST=<vsphere_host> VMWARE_PASSWORD=<vsphere_password> VMWARE_USER=<vsphere_username>
注意:community.vmware 集合使用相同的环境变量。
我们将在下面尝试解释一些示例用例,以便读者了解如何开始使用这些模块。
收集有关 VCSA 实例的信息
在此第一个示例中,我们通过关闭任何潜在的用户界面来保护设备。模块使用的 REST 接口仍然可用。以下是如何使用可用的模块进行检查。
- name: Shell access should be disabled vmware.vmware_rest.appliance_access_shell_info: - name: The Direct Console User Interface should also be disabled vmware.vmware_rest.appliance_access_dcui_info: - name: We need the SSH access vmware.vmware_rest.appliance_access_ssh_info:
响应
{ "changed": false, "value": { "enabled": false, "timeout": 0 } } { "changed": false, "value": false } { "changed": false, "value": true }
健康状态
我们可以依靠 appliance_health 模块或其他信息模块来审计 VCSA 的状态。例如,这里我们检查系统负载和数据库是否处于绿色状态。
- name: Ensure the database health status is green vmware.vmware_rest.appliance_health_database_info: - name: Get the system load status vmware.vmware_rest.appliance_health_load_info: - name: Get the system load status vmware.vmware_rest.appliance_health_system_info:
响应
{ "changed": false, "value": { "messages": [ { "message": { "args": [], "default_message": "DB state is Degraded", "id": "desc" }, "severity": "WARNING" } ], "status": "DEGRADED" } } { "changed": false, "value": "gray" } { "changed": false, "value": "gray" }
在此示例中,我们的数据库处于降级状态,其余系统未处于最佳 GREEN 状态。
网络配置
Ansible 还可以读取和设置 VCSA 的网络配置。appliance_networking_info 模块返回网络配置的系统范围概述
- name: Get network information vmware.vmware_rest.appliance_networking_info:
响应:
{ "changed": false, "value": { "dns": { "hostname": "vcenter.test", "mode": "DHCP", "servers": [ "192.168.123.1" ] }, "interfaces": { "nic0": { "ipv4": { "address": "192.168.123.8", "configurable": true, "default_gateway": "192.168.123.1", "mode": "DHCP", "prefix": 24 }, "mac": "52:54:00:c9:06:64", "name": "nic0", "status": "up" } }, "vcenter_base_url": "https://vcenter.test:443" } }
但我们也可以收集特定 NIC 的详细信息
- name: Get details about one network interfaces vmware.vmware_rest.appliance_networking_interfaces_info: interface_name: nic0
响应
{ "changed": false, "id": "nic0", "value": { "ipv4": { "address": "192.168.123.8", "configurable": true, "default_gateway": "192.168.123.1", "mode": "DHCP", "prefix": 24 }, "mac": "52:54:00:c9:06:64", "name": "nic0", "status": "up" } }
DNS 配置
appliance_networking_dns_hostname_info 模块可用于检索 VCSA 的主机名。
- name: Get the hostname configuration vmware.vmware_rest.appliance_networking_dns_hostname_info:
响应
{ "changed": false, "value": "vcenter.test" }
使用 appliance_networking_dns_servers_info 获取当前使用的 DNS 服务器
- name: Get the DNS servers vmware.vmware_rest.appliance_networking_dns_servers_info:
响应
{ "changed": false, "value": { "mode": "dhcp", "servers": [ "192.168.123.1" ] } }
结论和后续步骤
这些新模块有助于快速从正在运行的 VCSA 实例中检索信息,而无需依赖 SSH。输出将很好地融入常规的 Ansible Playbook 中。最后,您还可以使用它们来调整系统的配置(网络、防火墙等)。此集合的未经支持的版本也可在 Ansible Galaxy 获取。