【问题标题】:How to determine the OS version using pvymomi?如何使用 pyvmomi 确定操作系统版本?
【发布时间】:2021-06-29 20:55:56
【问题描述】:

使用 pvymomi,我可以确定操作系统。如何确定操作系统版本?

#!/usr/bin/python3
import sys
import atexit
from pyVmomi       import vim
from pyVim.connect import SmartConnectNoSSL, Disconnect

si = SmartConnectNoSSL(host = 'xxx', user = 'xxx', pwd = 'xxx', port = 443)
atexit.register(Disconnect, si)
content = si.RetrieveContent()
vm = si.content.searchIndex.FindByIp(None, sys.argv[1], True)

print(vm.summary.config.guestFullName)
print(vm.summary.config.guestId)

上面的代码产生以下内容:

$ ./example.py  10.120.73.45
CentOS 7 (64-bit)
centos7_64Guest

我可以看到 VM 运行的是 CentOS 7,但它是 7.6 还是 7.9?我没有看到什么属性甚至什么数据对象提供了该信息。

【问题讨论】:

  • 也许看看platform 模块。

标签: python-3.x vsphere


【解决方案1】:

在对这个问题做了一些研究之后,我发现Python包pyvmomi使用的vSphere Web Services API,没有有一个简单的方法来收集带有基本 API 调用的操作系统版本。

如果您查看vSphere Web Services API 信息 guestFamily,在 GuestInfo 中,您不会看到任何 API 调用来获取精确的版本信息。

此外,要获得 CentOS 的确切操作系统版本信息,您通常必须查询包含此信息的内核。

您可以使用以下命令获取 CentOS 的版本:

cat /etc/centos-release
# output 
CentOS Linux release 7.9.2009 (Core)

您可以查询此信息GuestProgramSpec

这里有一些用于执行此操作的伪代码。

ps = vim.vm.guest.ProcessManager.ProgramSpec(programPath="/usr/bin/cat", arguments=" /etc/centos-release > /tmp/os_version_info.txt")
res = pm.StartProgramInGuest(vm, creds, ps)

您也可以使用uname 工具获取此信息,该工具通常用于获取有关处理器架构的信息,如系统主机名和系统上运行的内核版本。

这是命令 - uname -s -r

  • -s, (--kernel-name) - 打印内核名称
  • -r, (--kernel-release) - 打印内核版本。

这里有一个website,它提供了一些关于将内核发布信息映射到特定操作系统的信息。这是另一个website。使用后一个网站,我可以看到 kernel-3.10.0-1160.el7.x86_64 映射到 CentOS 7.9.2009 for x86_64.

这里有一些用于执行此操作的伪代码。

ps = vim.vm.guest.ProcessManager.ProgramSpec(programPath="/usr/bin/uname", arguments=" -s -r > /tmp/os_kernel_info.txt")
res = pm.StartProgramInGuest(vm, creds, ps)

根据我的研究,将这些信息返回到控制台更为复杂。这是Stack Overflow question in how to do this。

更新

我发现了这个示例pyvmomi 脚本,它可以执行命令并将内容检索回控制台。

【讨论】:

  • 上面执行了命令,但是没有返回结果。
  • @user2569618 如果没有更多详细信息,很难提供反馈。请向我提供有关您指的是哪个命令的详细信息。还请提供有关您如何在代码中使用该命令的详细信息。
  • 道歉。上面的伪代码变成实际代码返回的是执行命令的PID,而不是命令的结果。仍然无法恢复操作系统版本。例如creds = vim.vm.guest.NamePasswordAuthentication(username=username, password=password) cmdspec = vim.vm.guest.ProcessManager.ProgramSpec(arguments='/etc/centos-release | tee /tmp/os_verision_info.txt', programPath='/usr/bin/cat') cmdpid = content.guestOperationsManager.processManager.StartProgramInGuest(vm=vm, auth=creds, spec=cmdspec)
  • @user2569618 res 是 PID,但文件 os_verision_info.txt 已创建。您需要将该文件传输到您的系统。这是使用vmware.com/support/orchestrator/doc/vco_vsphere55_api/html/… 完成的。
  • 这意味着需要用户/密码,这不是一个选项。很遗憾,您提供的答案不是答案。
猜你喜欢
  • 2014-08-07
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多