Ghetto VUM

Pour une raison aussi néfaste que mystérieuse et que même notre cher confrère vmdude n’a pu expliquer, nous avons “perdu” un VUM (VMware Update Manager). Plus rien, nada, que dalle, même pas de backup. Evidemment, nous ne nous en sommes rendu compte que quelques jours avant une grosse campagne de patch. Y voyant là un signe divin, nous avons pris la décision de ne pas réinstaller le composant et d’essayer de patcher cet environnement, sans VUM mais de façon totalement automatisé (~90 ESXi quand même). Et figurez vous que ça s’est très bien passé !

La recette est assez simple : Image Builder pour générer l’Offline Bundle + Get-EsxCli pour l’update + Reboot. Du PowerCLI de bout en bout donc on est bon.

Dans notre cas, il fallait mettre à jour des serveurs HP et DELL de sorte que le résultat soit le même qu’avec la customized ESXi image fourni par les éditeurs. Malheureusement il est impossible d’utiliser une iso pour générer un Offline Bundle (indispensable à esxcli) et si vous vous demandez comment VUM y parvient, allez fouiller dans le répertoire /UPGRADE d’une iso d’ESXi et vous comprendrez… Pas le choix, il a fallut se taper les Bundle à la main !

La toute première étape c’est évidement le choix de la version d’ESXi à atteindre (ESXi 5.0 Complete Update 3) et de faire un clone de l’Image Profile afin de pouvoir le customizer en y ajoutant des packages :

Add-EsxSoftwareDepot https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
New-EsxImageProfile -CloneProfile ESXi-5.0.0-20131002001-standard -Name "VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014" -Vendor "Hypervisor.fr"

Si vous voulez voir la liste des build disponibles, l’idéal c’est un petit GridView :

Au passage, on peut apercevoir le process Image Factory Server (if-server.exe) qui fait office de moulinette :

HP propose depuis longtemps un vibsdepot (aka HP Online Depot) qui facilite grandement la tâche. Vous n’avez qu’à choisir le répertoire qui correspond à la date de l’iso (Feb2014 dans notre cas) et ajouter le dépôt (index.xml et index-drv.xml) à votre liste :

Add-EsxSoftwareDepot http://vibsdepot.hp.com/hpq/feb2014/index.xml, http://vibsdepot.hp.com/hpq/feb2014/index-drv.xml

Il faut ensuite ajouter les packages (un minimum filtrés pour éviter les insultes toutes rouge de powershell) au profil custom et l’exporter au format Bundle (.zip) :

Get-EsxSoftwarePackage|?{$_.SourceUrls -match "vibsdepot.hp.com/hpq/feb2014" -and !($_.Depends -match 'vmkapi_2_[1-9]')}|Add-EsxSoftwarePackage -ImageProfile "VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014"
Export-EsxImageProfile -ImageProfile "VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014" -ExportToBundle -FilePath "C:\Temp\VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014.zip"

Si vous voulez consulter la liste des package avant de les ajouter, encore un petit GridView :

Du coté de DELL c’est radicalement différent puisque leur dépôt ne contient que les vib “iDRAC Service Module” et “OpenManage”. Heureusement, en fouillant un peu nous avons pu trouver un pdf qui recense toutes les modifications apportées à l’iso originale de VMware pour parvenir à la version customizé made in DELL. S’en suit un travail de fourmi pour retrouver tous les offline bundle associés, les télécharger et les ajouter au profil custom.

Une fois que le bundle est prêt, un petit coup de Get-EsxCli pour le distribuer sur le même principe qu’ESXCLI mais a l’échelle d’un cluster :

Get-Cluster toto|Get-VMHost|%{($_|Get-EsxCli).software.profile.update($false, "/vmfs/volumes/datastore/HP/VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014.zip", $true, $null, $true, $null, $null, "VMware-ESXi-5.0.0-Update3-1311175-HP-5.44.21-Feb2014", $null)}

Il vous faudra évidement personnaliser le nom du cluster, le chemin du bundle ainsi que le nom du profil mais surtout changer la variable de dry run $true (celui juste après le path dans le oneliner) en $false pour effectuer la mise a jour. Ce oneliner ne fait que vérifier que la mise a jour est possible et vous permet de contrôler le process :

Pour plus d’informations, nous vous recommandons vivement de consulter la série de post “ImageBuilder Deep Dive” d’Andreas Peetz.

La touche finale c’est un oneliner qui reboot le cluster en séquentiel (DRS auto obligatoire et les ESX doivent avoir au moins 1 jour d’uptime) :

Get-Cluster toto|Get-VMHost|Get-View|?{$_.Runtime.BootTime -lt (Get-Date).adddays(-1) -and $_.Runtime.ConnectionState -eq "connected" -and !$_.Runtime.InMaintenanceMode}|%{$_.EnterMaintenanceMode("60",0);while (!(get-view -viewtype hostsystem -filter @{"name"=$_.name}).Runtime.InMaintenanceMode){sleep 15};$_.RebootHost(0);while ((get-view -viewtype hostsystem -filter @{"name"=$_.name}).Runtime.ConnectionState -eq "connected"){sleep 15};while ((get-view -viewtype hostsystem -filter @{"name"=$_.name}).Runtime.ConnectionState -eq "notResponding"){sleep 30};$_.ExitMaintenanceMode("60");while ((get-view -viewtype hostsystem -filter @{"name"=$_.name}).Runtime.InMaintenanceMode){sleep 15}}

Tags: , , ,

3 Responses to “Ghetto VUM”

  1. Un VUM qui disparait comme ça … Ça sent l’enlèvement alien ou un kidnapping du MI6

  2. Get-Cluster toto, ça me rappel toto1, toto2, toto3 :)

  3. $toto c’est ma variable fétiche :D

Leave a Reply