我们希望听到您的意见!帮助我们深入了解 Ansible 生态系统的现状。
参与 2024 年 Ansible 项目调查

使用 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 获取。