Nedávno se mi stalo, že jsem musel znovu přimapovat NFS mount, který se z pole publikoval nyní pod novým jménem.
Tím, že se původní NFS share odpojil mi ale ve vCenter serveru zůstaly některé VM ve stavu Orphaned.
Co je to Orphaned stav? Je to stav VM, kdy vCenter server věděl o tom, že by tato VM měla být na hostu registrovaná, ale host o nich neměl žádné potuchy. Host mohl odregistrovat VM z důvodu nedostupnosti Datastore po restartu, nebo někdo odregistroval VM přes SSH, nebo Host Clienta.
U mne to byla ta první varianta. Otázkou bylo, jak obnovit spojení na tyto VM, abych nepřišel o jejich umístění v Resource Poolech, vApps apod.
Nakonec se mi to podařilo udělat přes API volání vCenter serveru. Využil jsem k tomu PowerShell / PowerCLI.
Nejprve odpojit a připojit NFS Datastore z ESX hostu. Toto jsem udělal přes SSH a esxcfg-nas:
# List NFS Shares esxcfg-nas -l VM_archive is /vol/vol_NFS_archive from 192.168.1.10 mounted unavailable # remove NFS mount esxcfg-nas -d VM_archive # mount back esxcfg-nas -a -o 192.168.1.10 -s /vol/vol_NFS_archive -v 3 VM_archive
Tím, že jsou VM ve stavu Orphaned, tak host o nich neví a umožní tudíž odpojit NFS mount
Musíme ale VM znovu nechat načíst a k tomu použijeme PowerCLI.
Když je VM ve stavu Orphaned, tak je její OverallStatus „gray“. Pak už jen vytáhnout původní adresu VMX souboru, kterou má vCenter uloženou v LayoutEx.File[0] a použít metodu reloadVirtualMachineFromPath()
Get-VM | ?{$_.ExtensionData.OverallStatus -eq "gray"} | % { $vmActual = $_; $vmActual.ExtensionData.reloadVirtualMachineFromPath($vmActual.ExtensionData.LayoutEx.File[0].Name)}
Přes ExtensionData jednotlivých objektů v PowerCLI můžete volat přímo API metody, které jsou pro tyto objekty dostupné.