我想將VM的主機名(它是一個安裝了開放虛擬機工具的debian squeeze系統)自動設置爲我在vSphere Client中設置並查看的虛擬機名稱。 。將虛擬機的主機名自動設置爲debian作爲虛擬機的名稱
我試圖
~# vmtoolsd --cmd "info-get guestinfo.name" 2> /etc/hostname
,但該命令返回 「沒有價值發現」
我想將VM的主機名(它是一個安裝了開放虛擬機工具的debian squeeze系統)自動設置爲我在vSphere Client中設置並查看的虛擬機名稱。 。將虛擬機的主機名自動設置爲debian作爲虛擬機的名稱
我試圖
~# vmtoolsd --cmd "info-get guestinfo.name" 2> /etc/hostname
,但該命令返回 「沒有價值發現」
發現這個在其他網站上。似乎必須先設置值才能查詢它們。
在某些情況下,您想要從VM的操作系統內確定VM的vCenter diaply名稱。
如果從系統預配模板克隆多個虛擬桌面以啓用將計算機名稱設置爲與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工具和下面的命令:
vmtoolsd.exe –cmd 「info-get guestinfo.hostname」
這當然可以,被添加到腳本來設置對多臺計算機此屬性。
Credit寄給Richard Parmiter! http://www.parmiter.com/vmware/2012/10/RP781
我使用VMware的pyVmomi模塊在我的Linux客戶操作系統上通過Python腳本執行此操作。
首先,我通過讀取系統文件/sys/devices/virtual/dmi/id/product_uuid
來檢索系統UUID。然後,我根據pyvmomi-community-samples site的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
)進行重命名。
+1,但我發現在VMware Workstation上,這隻有在UUID全小寫時纔有效。我提交了一個修改來解決問題。謝謝! – mpontillo
爲我工作。 - 爲此非常感謝!! Thas正是我正在尋找的東西,本地在Python上與Linux。 – esha