Gelukkig werd er van de vCenter database regelmatig een backup gemaakt, dus de informatie was beschikbaar. Hoe deze te herstellen was wel een uitdaging. Deze procedure omschrijft de stappen die we hebben uitgevoerd om weer tot de originele configuratie te komen.
Herstellen vCenter database
Localiseer de backup die je eerder maakte en voer een restore uit onder een andere naam dan de originele database. Zo kunnen beide databases naast elkaar draaien.Haal de lijst van resource pools uit de VPX_ENTITY tabel
Voer de volgende query uit om een lijst van resource pools uit de herstelde database te halen:select * from VPX_ENTITY (nolock)
where TYPE_ID = 4
and name != 'Resources'
Controleer de output en exporteer deze lijst vervolgens door middel van een export wizard naar een CSV bestand.Aanmaken resource pools
Het aanmaken van resource pools gaat het eenvoudigst door het eerder gemaakte CSV bestand te importeren in PowerCLI met het Import-CSV CMDlet. Gebruik hiervoor de volgende code:
Import-Csv –Path FileName | foreach {
New-Resourcepool -Location (Get-ResourcePool -Location ( Get-Cluster ClusterName ) -Name Resources) -Name $_.ColumnName
}Ophalen resource pool configuratie
Naast de namen is het ook wenselijk om reserveringen, shares en dergelijke te configureren. Deze waarden zijn niet in aparte kolommen opgeslagen, maar samengevoegd in een XML bericht in de kolom CONFIG_SPEC. Haal deze informatie op met de volgende query:select ID.NAME, RP.CONFIG_SPEC
from VPX_RESOURCE_POOL RP (nolock)
join VPX_ENTITY ID (nolock)
on RP.ID = ID.ID
where ID.TYPE_ID = 4
and ID.NAME != 'Resources'
order by ID.NAME
In mijn situatie was het minder werk om deze informatie handmatig over te nemen in plaats van de XML berichten te parsen. Voor complexere omgevingen is het handiger om dit te automatiseren. Dit zou vanaf SQL 2005 met XQuery moeten kunnen, maar hier heb ik helaas nog niet mee gewerkt. :-(Lijst virtuele machines en resource pools maken
Om te zorgen dat alle virtuele machines weer in hun oorspronkelijke resource pool worden geplaatst moet de relatie tussen VMs en resource pools worden opgehaald uit de database. Gebruik hiervoor de volgende query:select ID2.NAME AS VM_NAME, ID1.NAME AS RP_NAME
from VPX_VM VM (nolock)
join VPX_ENTITY ID1 (nolock)
on ID1.ID = VM.RESOURCE_GROUP_ID
join VPX_ENTITY ID2 (nolock)
on ID2.ID = VM.ID
order by ID2.NAME
Controleer de output en exporteer deze lijst vervolgens door middel van een export wizard naar een CSV bestand.Virtuele machines verplaatsen
Het eerder gemaakte CSV bestand kan ten slotte gebruikt worden om alle virtuele machines in de juiste resource groups te zetten. Gebruik hiervoor de volgende powershell code:
Import-Csv –Path FileName | foreach {
Get-VM -Name $_.ColumnNameVM | Move-VM -Destination (Get-ResourcePool $_.ColumnNameRP) -RunAsync
}
Voor omgevingen met namen die niet-ASCII bevatten is het misschien handiger om niet met VM namen, maar met ID's te werken. Dit omdat de gegevens in de database met een andere codering wordt opgeslagen dan in de vCenter GUI of PowerCLI.
Een ander alternatief is om de urlencode functie van System.Web .NET class te gebruiken. Zie voor meer informatie hierover de volgende link: http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert/escape.mspx