Cet outil, développé par VMWare lui-même est maintenant utilisé par de nombreux projets majeurs, et même si la dernière version semble toujours beta pour le moment (v0.22 à l’heure où ces lignes sont écrites), je pense que le projet est assez mature et peut-être utilisé en production sans problème. Pour le récupérer, direction le github du projet qui donne accès à des binaires prêts à l’emploi (ici v0.22.1). Il vous permettra de gagner du temps, et surtout d’automatiser facilement certaines tâches de maintenance.
Installation et configuration
# Téléchargement de la version 0.22.1
curl https://github.com/vmware/govmomi/releases/download/v0.22.1/govc_linux_amd64.gz | gunzip > /usr/bin/govc
Le programme fournit un vaste choix d’arguments pour définir les conditions d’accès à l’API (par exemple son URL, l’utilisateur/mot de passe à utiliser, etc…) mais je vous conseille bien sûr d’utiliser des variables d’environnement pour gérer plus efficacement vos clusters, surtout si vous êtes amenés à vous connecter à plusieurs APIs. Au lieu de les définir à la volée, il vaut mieux les placer dans un fichier pour réutilisation lors d’une autre session. Voici un sample de fichier à sourcer.
# govc.env
export GOVC_DATACENTER=<Nom du datacenter par défaut au sens VMWare du terme>
export GOVC_USERNAME=<Utilisateur vmware>
export GOVC_PASSWORD=<Mot de passe>
export GOVC_URL=<IP ou hostname du vsphere>
export GOVC_INSECURE=1 # Ignorer les problèmes de certificat, utile en réseau local
export GOVC_DATASTORE=<Datastore par défaut>
# Si besoin d'utiliser un proxy réseau
# export HTTP_PROXY=http://172.17.1.1:3128
# export HTTPS_PROXY=http://172.17.1.1:3128
Enfin, comme pour tout fichier contenant des variables d’environnement, il suffit de le sourcer dans un terminal
source govc.env
Au lancement de chaque commande, des options peuvent être modifiées à la volée pour surcharger les variables d’environnement, par exemple :
govc datastore.ls -dc=Datacenter2 -ds=Datastore1 -debug=true
À noter que si vous utilisez la commande debug (le “=true” est optionnel, s’agissant d’un flag Go), un dossier caché .govmomi/debug sera créé avec des logs vous permettant de tracer votre problème.
Usage
Je vais vous exposer ici quelques commandes simples puis quelques examples d’applications concrètes. Tout d’abord, il faut comprendre qu’au sein d’un datacenter, sont regroupés les objets d’un même type, sous vm
, network
, host
et datastore
. Ainsi, comme vous allez le deviner très vite, il existe deux méthodes pour lister les hosts, soit par la commande govc ls host
ou govc find /host
. Mais explorons tout ça sans perdre plus de temps.
Lister les objets d’un DC
govc ls
# Le résultat donne :
# /DC/vm
# /DC/network
# /DC/host
# /DC/datastore
govc ls vm/dossier-vm/vm-1
govc ls host
Lister tous les objets du vcenter. Lister les vm avec “prod” dans le nom. Enfin, lister les hosts avec 16 cpu.
govc find /
govc find vm -type m -name *prod*
govc find . -type h -hardware.cpuInfo.numCpuCores 16
Lister les informations des datastore (notamment l’usage disque), explorer le datastore spécifié en envvar, créer un dossier, y envoyer un fichier local, puis un fichier en stdin.
govc datastore.info
govc datastore.ls dossier-1/
govc datastore.mkdir dossier-isos/
govc datastore.upload image.iso dossier-isos/image.iso
curl https://example.com/iso/image.iso | govc datastore.upload - dossier-isos/image.iso
Afficher les informations étendues d’une VM, la snapshotter, la rebooter puis ouvrir une console (nécessite vmrc)
# À noter qu'il n'y a ni le DC, ni le prefix "vm" dans le path retourné par la commande govc ls, il est induit
vm=Prod/Machine_virtuelle_1
govc vm.info -e $vm
govc snapshot.create $vm snapshot-$(date +%F)
govc vm.power -r $vm
xdg-open $(govc vm.console $vm)
Afficher les controlleurs et disques attachés à une VM, démonter un de ceux-là, en créer un nouveau sur le datastore, puis l’attacher à la VM. Enfin, attacher un nouvel ISO.
govc device.info -vm <VM>
# Keep permet de ne pas supprimer le disque au déttachement ! disk_ref correspond à l'ID selon la VM spécifiée, par exemple "disk-1000-3"
govc device.remove -keep -vm <VM> <disk_ref>
govc datastore.disk.create -size 15G <disk_name>
govc vm.disk.attach -vm <VM> -disk <path/to/disk_name.vmdk>
# dev est le nom de device du cdrom, par exemple cdrom-3000
govc device.cdrom.insert -vm <VM> -device <dev> <path/to/file.iso>
Récupérer sur quel host tourne une VM donnée pour l’exemple par son UUID. Lister les informations et ressources disponibles sur l’host et également ses interfaces/IPs
host=$(govc vm.info -vm.uuid=4233b143-7171-e260-deaa-52921b064dfb | awk '/Host/ {print $2}')
govc host.info $host
govc host.esxcli -host=$host network ip interface ipv4 get
Liste des commandes
Si vous voulez juste vous faire une idée des possibilités de l’outil sans le télécharger, voici une liste des commandes disponibles en v0.22
Usage of govc:
about
about.cert
cluster.add
cluster.change
cluster.create
cluster.group.change
cluster.group.create
cluster.group.ls
cluster.group.remove
cluster.override.change
cluster.override.info
cluster.override.remove
cluster.rule.change
cluster.rule.create
cluster.rule.info
cluster.rule.ls
cluster.rule.remove
datacenter.create
datacenter.info
datastore.cluster.change
datastore.cluster.info
datastore.cp
datastore.create
datastore.disk.create
datastore.disk.inflate
datastore.disk.info
datastore.disk.shrink
datastore.download
datastore.info
datastore.ls
datastore.maintenance.enter
datastore.maintenance.exit
datastore.mkdir
datastore.mv
datastore.remove
datastore.rm
datastore.tail
datastore.upload
datastore.vsan.dom.ls
datastore.vsan.dom.rm
device.boot
device.cdrom.add
device.cdrom.eject
device.cdrom.insert
device.connect
device.disconnect
device.floppy.add
device.floppy.eject
device.floppy.insert
device.info
device.ls
device.remove
device.scsi.add
device.serial.add
device.serial.connect
device.serial.disconnect
device.usb.add
disk.create
disk.ls
disk.register
disk.rm
disk.snapshot.create
disk.snapshot.ls
disk.snapshot.rm
disk.tags.attach
disk.tags.detach
dvs.add
dvs.change
dvs.create
dvs.portgroup.add
dvs.portgroup.change
dvs.portgroup.info
env
events
export.ovf
extension.info
extension.register
extension.setcert
extension.unregister
fields.add
fields.info
fields.ls
fields.rename
fields.rm
fields.set
find
firewall.ruleset.find
folder.create
folder.info
guest.chmod
guest.chown
guest.df
guest.download
guest.getenv
guest.kill
guest.ls
guest.mkdir
guest.mktemp
guest.mv
guest.ps
guest.rm
guest.rmdir
guest.run
guest.start
guest.touch
guest.upload
host.account.create
host.account.remove
host.account.update
host.add
host.autostart.add
host.autostart.configure
host.autostart.info
host.autostart.remove
host.cert.csr
host.cert.import
host.cert.info
host.date.change
host.date.info
host.disconnect
host.esxcli
host.info
host.maintenance.enter
host.maintenance.exit
host.option.ls
host.option.set
host.portgroup.add
host.portgroup.change
host.portgroup.info
host.portgroup.remove
host.reconnect
host.remove
host.service
host.service.ls
host.shutdown
host.storage.info
host.storage.mark
host.storage.partition
host.vnic.change
host.vnic.info
host.vnic.service
host.vswitch.add
host.vswitch.info
host.vswitch.remove
import.ova
import.ovf
import.spec
import.vmdk
library.clone
library.create
library.deploy
library.export
library.import
library.info
library.ls
library.rm
library.session.ls
library.session.rm
library.sync
license.add
license.assign
license.assigned.ls
license.decode
license.label.set
license.ls
license.remove
logs
logs.download
logs.ls
ls
metric.change
metric.info
metric.interval.change
metric.interval.info
metric.ls
metric.reset
metric.sample
object.collect
object.destroy
object.method
object.mv
object.reload
object.rename
object.save
option.ls
option.set
permissions.ls
permissions.remove
permissions.set
pool.change
pool.create
pool.destroy
pool.info
role.create
role.ls
role.remove
role.update
role.usage
session.login
session.logout
session.ls
session.rm
snapshot.create
snapshot.remove
snapshot.revert
snapshot.tree
sso.group.create
sso.group.ls
sso.group.rm
sso.group.update
sso.service.ls
sso.user.create
sso.user.id
sso.user.ls
sso.user.rm
sso.user.update
tags.attach
tags.attached.ls
tags.category.create
tags.category.info
tags.category.ls
tags.category.rm
tags.category.update
tags.create
tags.detach
tags.info
tags.ls
tags.rm
tags.update
task.cancel
tasks
vapp.destroy
vapp.power
version
vm.change
vm.clone
vm.console
vm.create
vm.customize
vm.destroy
vm.disk.attach
vm.disk.change
vm.disk.create
vm.guest.tools
vm.info
vm.ip
vm.keystrokes
vm.markastemplate
vm.markasvm
vm.migrate
vm.network.add
vm.network.change
vm.option.info
vm.power
vm.question
vm.rdm.attach
vm.rdm.ls
vm.register
vm.unregister
vm.upgrade
vm.vnc
Voilà, je pense que vous avez une bonne idée de ce qu’on peut faire avec cet outil, même si nous avons abordé moins de 5% des possibilités. L’aide en ligne (j’entends par-là en lançant la commande voulu avec le flag –help) est très précise et de qualité, ce qui en fait une cli très agréable à utiliser et indispensable dans la boite à outil de tout administrateur devant travailler en milieu virtualisé.