从应用程序的角度来看,您的工作负载不断变化,而且底层客户操作系统 (GuestOS) 也不断变化,包括补丁和升级。尽管许多组织都有变更管理数据库 (CMDB),但从首次部署工作负载到当前运行工作负载的过程中验证这些信息仍然是一个挑战。
早在 2019 年,VMware 就增强了 VMware Tools,使其能够更轻松地识别虚拟机中运行的应用程序和进程,这也提供了一种编程方式来检索此清单信息,然后将其反馈到其 CMDB 中。
应用程序并不是虚拟机内部唯一发生变化的东西,GuestOS 可能会收到最多的更新(补丁/升级),并且能够在不依赖来宾代理的情况下准确地清点这些信息对许多人来说仍然是一个挑战。
在 vSphere 8.0 Update 2 中,我们使用 VMware Tools 增强了可用的 GuestOS 数据,并且即使在虚拟机已关闭的情况下,也可以更轻松地清点和收集此信息。
引入了新的guestDetailedData vSphere API 属性,该属性可以包含以下 10 个字段,这些字段由 VMware Tools 填充:
Field | 描述 | VMware Tools版本需求 |
---|---|---|
architecture | Arm or X86 | 11.2.0 |
bitness | 32 or 64 | 11.2.0 |
buildNumber | OS build number | 11.2.0 |
cpeString | NIST Common Platform Enumeration Specification standardized identifier string for the OS | 11.2.0 |
distroAddlVersion | Longer OS version string that may contain additional info (e.g. version name) | 12.2.0 |
distroName | OS distribution name | 11.2.0 |
distroVersion | OS version string | 11.2.0 |
familyName | OS family name (Windows; Linux; etc.) | 11.2.0 |
kernelVersion | Linux kernel version or Windows 10+ patch number or Windows build number | 11.2.0 |
prettyName | Officially specified distro "pretty name" | 11.2.0 |
如您所见,您至少需要拥有 VMware Tools 11.2.0 或 12.2.0 才能查看所有这些字段。可以在 VM 启动时检索 API 属性,并且根据 GuestOS,这些字段的全部或子集将可用。当虚拟机关闭时,VMware Tools 将不再运行,并且该属性将按预期为空或 null。
开发人员希望让用户更轻松地检索此信息,特别是如果该信息自上次收集以来没有发生变化,并使其持久化,以便即使虚拟机已关闭,您也可以快速清点虚拟机。正如 vSphere API 文档中所述,最后的已知值会保留下来,并在虚拟机关闭时可用。此信息存储在名为guestinfo.detailed.data的 VM 高级设置中,并将包含 VM 运行时的最新已知值。
为了让我们的用户更轻松地使用这个新的 vSphere API,我创建了以下 PowerCLI 片段,它将仅检索所有虚拟机的此属性并将其存储到自定义对象中,然后您可以进一步处理:
$vms = Get-View -ViewType VirtualMachine -Property Name,Config.extraConfig
$results = @()
foreach ($vm in $vms) {
$detailedData = ($vm.Config.ExtraConfig | where {$_.key -eq 'guestInfo.detailed.data'}).Value
# Split the pairs
$keyValuePairs = $detailedData -split "(?<=') " -replace "'", ""
# Clear variables
$architecture = $bitness = $distroName = $buildNumber = $cpeString = $distroAddlVersion = $distroVersion = $familyName = $kernelVersion = $prettyName = $null
# Loop through key-value pairs
foreach ($pair in $keyValuePairs) {
$key, $value = $pair -split '=', 2
if ($key -eq "architecture") { $architecture = $value }
elseif ($key -eq "bitness") { $bitness = $value }
elseif ($key -eq "buildNumber") { $buildNumber = $value }
elseif ($key -eq "cpeString") { $cpeString = $value }
elseif ($key -eq "distroAddlVersion") { $distroAddlVersion = $value }
elseif ($key -eq "distroName") { $distroName = $value }
elseif ($key -eq "distroVersion") { $distroVersion = $value }
elseif ($key -eq "familyName") { $familyName = $value }
elseif ($key -eq "kernelVersion") { $kernelVersion = $value }
elseif ($key -eq "prettyName") { $prettyName = $value }
}
$tmp = [pscustomobject] [ordered]@{
Name = $vm.Name;
Architecture = $architecture;
Bitness = $bitness;
BuildNumber = $buildNumber;
CPEString = $cpeString;
DistroName = $distroAddlVersion;
DistroVersion = $distroName;
DistroAddlVersion = $distroVersion;
FamilyName = $familyName;
KernelVersion = $kernelVersion;
PrettyName = $prettyName;
}
$results+=$tmp
}
$results
原文链接:https://williamlam.com/2023/11/new-detailed-guestos-data-in-vsphere-8-0-update-2.html