1

我想将虚拟机的主机名(它是一个安装了 open-vm-tools 的 debian 挤压系统)自动设置为我在 vSphere Client 中设置和看到的虚拟机名称。

我试过了

    ~# vmtoolsd --cmd "info-get guestinfo.name" 2> /etc/hostname

但命令返回“未找到值”

4

2 回答 2

7

我使用 VMware 的pyVmomi模块 在我的 Linux 客户操作系统上使用 Python 脚本完成了这项工作。

首先,我通过读取系统文件来检索系统 UUID /sys/devices/virtual/dmi/id/product_uuid然后,我根据pyvmomi-community-samples 站点中的find_by_uuid.py示例,通过 UUID 在 vCenter 服务器中搜索虚拟机。另一种选择是通过 IP 地址进行搜索,这将更加独立于平台。pyVmomi 模块提供了启用此方法的FindByIp()方法。

#!/usr/bin/env python
import atexit
import pyVmomi
from pyVmomi import vim, vmodl
from pyVim.connect import SmartConnect, Disconnect

si = SmartConnect(host='<host>', port='<port>', user='<user>', pwd='<password>')
atexit.register(Disconnect, si)
file = open('/sys/devices/virtual/dmi/id/product_uuid')
uuid = file.read().strip().lower()
file.close()

search_index = si.content.searchIndex
vm = search_index.FindByUuid(None, uuid, True, False)
#Alternatively: vm = search_index.FindByIp(None, <ip_address>, True)
print vm.summary.config.name

获得虚拟机名称后,您可以使用客户操作系统的命令(例如hostname)来执行重命名。

于 2014-08-15T23:28:04.477 回答
4

在另一个网站上找到了这个。似乎您必须先设置值才能查询它们。

在某些情况下,您可能希望从 VM 的操作系统中确定 VM 的 vCenter 拨号名称。

如果从 syspreped 模板克隆多个虚拟桌面以启用将计算机名称设置为与 vCenter 显示名称相同的选项,这可能很有用。它在许多其他情况下也很有用。

但是,默认情况下,无法使用安装在虚拟机中的标准 VM 工具来执行此操作。

可以在 vCenter 中的 VM 对象上设置自定义属性,然后从虚拟机的操作系统中查询此属性。

可以使用 vSphere PowerCLI 运行以下脚本,将自定义属性设置为与 vCenter 显示名称相同:

$vServer= “vCenter.server.fqdn”
$vmName = “VM display name”

If (-not (Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue)) {
Add-PSSnapin VMware.VimAutomation.Core
}

Connect-VIServer $vServer | out-null

$vmSet = GET-VM $vmName | Get-View
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$gInfo = New-Object VMware.Vim.optionvalue
$ginfo.Key=”guestinfo.hostname”
$gInfo.Value=$vmSet.Name
$vmConfigSpec.extraconfig += $gInfo
$vmSet.ReconfigVM($vmConfigSpec)

Disconnect-VIServer $vServer -Confirm:$false | out-null

一旦设置好,就可以在 VM 中查询它,使用 VM 工具和以下命令:

vmtoolsd.exe –cmd “info-get guestinfo.hostname”

当然,这可以添加到脚本中以针对多台机器设置此属性。

归功于理查德·帕米特! http://www.parmiter.com/vmware/2012/10/RP781

于 2012-11-02T19:34:33.600 回答