Il m’est arrivé d’avoir besoin de communiquer certaines informations aux VM depuis un hyperviseur VmWare ESXi comme par exemple le nom du host ESXi. J’ai très longtemps cherché sur internet, dans les forums et les KB VmWare sans rien trouver de satisfaisant. Et un jour, enfin, j’ai trouvé une toute petite publication qui répondait parfaitement à mon besoin.
Malheureusement cela ne fonctionne qu’avec une version ESXi avec licence non gratuite. La méthode utilise l’interface SDK qui est en lecture seule avec une licence gratuite de ESXi (en version 5.5 en tout cas, je n’ai pas encore testé les versions suivantes, on en est à 7.0.0)
Le principe
L’idée est de déclarer un attribut de type guestinfo attaché à la VM qui peut contenir une chaine de caractères. Cette chaine peut être positionnée par l’hyperviseur et lue par la VM et inversement.
- Côté VM il faudra les vmware tools pour lire/écrire cet attribut (ou les open-vm-tools Linux)
- Côté ESXi, il faut installer le script python guestinfo.py qui se charge de faire appel au SDK pour lire/écrire cet attribut.
- Le nom de l’attribut doit commencer par guestinfo. (exemple : guestinfo.x-masociete.host) Je vous conseille d’ajouter un x-quelquechose dans le nom pour être certain qu’aucun attribut officiel portant ce nom ne viendra poser problème dans le futur.
Installation du script sous ESXi
Si vous installez le script python, il sera perdu au prochain boot. J’ai créé un VIB qui permet d’ajouter le script de façon permanente. Il sera sous /opt/guestinfo/bin/guestinfo.py
Télécharger “GuestInfo ESXi” GuestInfo-ESXi-0.1.0.i386.tar.gz – 3,15 KoCommandes sur l’hyperviseur ESXi
Écrire l’attribut
Cette opération est le seule à réclamer une licence payante.
~ # /opt/guestinfo/bin/guestinfo.py --vmname=centos-test --set_info=guestinfo.x-sample.host --value=MaValeur
Lire l’attribut
~ # /opt/guestinfo/bin/guestinfo.py --vmname=centos-test --get_info=guestinfo.x-sample.host
MaValeur
Commandes côté VM
Écrire l’attribut
[root@centos-test ~]# vmtoolsd --cmd="info-set guestinfo.x-sample.host MaValeur"
Lire l’attribut
[root@centos-test ~]# vmtoolsd --cmd="info-get guestinfo.x-sample.host"
MaValeur
Tel quel, en cas de shutdown de la VM, l’attribut sera perdu. Pour le conserver il faudra ajouter une ligne dans le fichier de définition de la VM portant le nom de l’attribut. Il sera mis à jour lors d’opérations d’écriture.
Sources
Le script original de guestinfo.py est disponible sur le site Code de VMWare. Il est écrit pour python 2.x et je l’ai adapté pour qu’il soit compatible avec python 3.x
Les VMWare Tools sont indispensables mais vous pouvez utiliser l’alternative open-vm-tools ce qui est conseillé sous Linux s’ils sont disponibles pour votre distribution.