Introduction
Dans l’article précédent, nous avons vu comment gérer notre infrastructure VSphere avec Terraform.
Lorsque nous mettons cela en place sur un serveur VSphere existant, il peut déjà contenir des machines virtuelles, qui ne sont pas gérées par Terraform. On peut donc souhaiter réintégrer ces machines dans Terraform.
Une solution est évidemment de les supprimer pour les recréer avec Terraform, mais on ne souhaite pas nécessairement utiliser une méthode aussi radicale.
Déclaration de la machine
En utilisant le module décrit dans l’article précédent, nous déclarons la machine, en reprenant ses caractéristiques :
module "vm_preexistante" {
source = "./modules/ubuntu20.04"
vm_hostname = "vm_preexistante"
vm_ip = "192.168.0.15"
vm_num_cpus = 4
vm_memory = 4096
vm_datastore = "datastore1"
vm_disks = {
"disk0" = { size = 60 }
}
À ce stade, si on tente d’appliquer le fichier (ou si on demande le plan), Terraform ignorant que la machine existe déjà va vouloir la créer. |
Import de la machine
Heureusement, il existe une commande dédiée pour demander à Terraform de réconcilier la VM déclarée et celle qui existe.
terraform import module.vm_preexistante.vsphere_virtual_machine.ubuntu_server_2004 /datacenter/vm/vm_preexistante
Pour que cette commande fonctionne, quelques points d’attention :
-
le nom
ubuntu_server_2004
doit correspondre exactement à celui de laresource
Terraform déclarée dans le module ; -
le nom
datacenter
est le nom réel du Datacenter VSphere, et non le nom qu’on a donnée à la donnée Terraformvsphere_datacenter
; -
le
/vm
qui suit est une constante obligatoire ; -
le nom
vm_preexistante
qui suit est le nom VSphere de la machine virtuelle existante (éventuellement précédé de son arborescence VSphere).
Un fois la machine importée, on vérifie via terraform plan
que Terraform ne prévoit plus de créer la machine virtuelle mais uniquement de la mettre à jour.
Si le plan nous convient, on l’applique pour finaliser l’opération : la machine est maintenant gérée via Terraform.
Conclusion
On peut ainsi migrer doucement l’ensemble des machines qui existaient dans une gestion centralisée via Terraform… pour plus facilement toutes les détruire en une seule commande.