mise à jour de VMware ESXi en ligne de commande

L’autre jour, j’ai du mettre à jour mon ESXi. Pas moyen de trouver le bon menu dans le clickodrome qu’est Vsphere. En plus, pour utiliser ce clickodrome il me faut absolument un Windows, du coup, je dois démarrer une machine virtuelle avec windows: beuark!

Voici donc quelques notes rapides sur la mise à jour d’un hyperviseur ESXi en ligne de commande.

Prérequis

  • Avoir activé sur l’hyperviseur: ssh et le shell ESXi.
  • Avoir uploadé sur l’hyperviseur l’archive de la mise à jour à installer, ou connaître l’URL qui permettra à l’hyperviseur de télécharger puis d’installer l’archive.

Étape 1: éteindre les VM

On récupère la liste des VM et leur ID comme ça:

~ # vim-cmd vmsvc/getallvms
Vmid    Name                   File                     Guest OS        Version   Annotation
...
 2      maVM       [datastore1] maVM/maVM.vmx           otherLinux64Guest   vmx-XX
...

On les coupe comme ça:

~ # vim-cmd vmsvc/power.shutdown Vmid

Étape 2: on passe l’hyperviseur en mode maintenance

Avant de lancer une mise à jour, il faut passer l’hyperviseur en mode maintenance. Chose qui ne peut bien sûr être faite qu’une fois toutes les VM éteintes.

Ça se passe comme ça:

~ # vim-cmd hostsvc/maintenance_mode_enter

Étape 3: on installe la mise à jour

Mettons que la mise à jour ait été stockée sur l’hyperviseur dans /vmfs/volumes/datastore1/esxiUpdates.

La mise à jour s’installe comme ça:

~ # esxcli software vib install -d "file:///vmfs/volumes/datastore1/esxiUpdates/maMiseÀJour.zip"

Éventuellement, il faudra rebooter l’hyperviseur avec la commande reboot.

Étape 4: on remet tout le monde en service

On commence par quitter le monde maintenance:

~ # vim-cmd hostsvc/maintenance_mode_exit

Ensuite, on redémarre toutes les VM, une par une (et bien sûr, on vérifie que tout le monde est bien reparti comme il faut):

~ # vim-cmd vmsvc/power.on Vmid

Autres commandes utiles

Avant de lancer la mise à jour (et après), on peut utiliser les commandes suivantes pour connaître la version exacte de ESXi que l’on utilise:

~ # vim-cmd hostsvc/hostsummary
...
        config = (vim.host.Summary.ConfigSummary) {
                dynamicType = <unset>,
                name = "monHostName",
                port = 902,
                sslThumbprint = <unset>,
                product = (vim.AboutInfo) {
                        dynamicType = <unset>,
                        name = "VMware ESXi",
                        fullName = "VMware ESXi X.Y.Z build-#######",
                        vendor = "VMware, Inc.",
                        version = "X.Y.Z",
                        build = "#######",
                        localeVersion = "INTL",
                        localeBuild = "000",
                        osType = "vmnix-x86",
                        productLineId = "embeddedEsx",
                        apiType = "HostAgent",
                        apiVersion = "X.Y",
                        instanceUuid = <unset>,
                        licenseProductName = "VMware ESX Server",
                        licenseProductVersion = "X.Y",
                },
...

ou, plus lisible et plus simple:

~ # uname -v
#1 SMP Release build-####### Nov 28 2014 02:43:56

Après une mise à jour de l’hyperviseur, et avant de redémarrer les VMs, on peut aussi les mettre à jour (au sens ESXi pas au sens de l’OS qu’on y fait tourner):

~ # vim-cmd vmsvc/update Vmid

Ensuite, quand on utilise vmsvc/getallvms, on doit avoir un numéro de version différent dans l’avant-dernière colonne (version).