我想将VM的主机名(它是安装了open-vm-tools的debian squeeze系统)自动设置为我在vSphere Client中设置和查看的VM名称。
我试过
~# vmtoolsd --cmd "info-get guestinfo.name" 2> /etc/hostname
但该命令返回“No value found”
答案 0 :(得分:7)
我使用VMware的pyVmomi模块在我的Linux客户机操作系统上使用Python脚本完成了这项工作。
首先,我通过读取/sys/devices/virtual/dmi/id/product_uuid
处的系统文件来检索系统UUID。然后,我根据find_by_uuid.py中的pyvmomi-community-samples site示例,通过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
)来执行重命名。
答案 1 :(得分:4)
在另一个网站上找到了这个。似乎您必须先设置值才能查询它们。
在某些情况下,您可能希望从VM的操作系统中确定VM的vCenter diaply名称。
如果从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”
当然,这可以添加到脚本中,以针对多台计算机设置此属性。
归功于Richard Parmiter! http://www.parmiter.com/vmware/2012/10/RP781