content_atlanticaweb.fr/posts/proxmox-terraform.md

3.2 KiB

date author title slug draft tags categories description
2022-04-08 Alexandre LUCAZEAU Terraform + Proxmox true
proxmox
terraform
lxc
virtualisation
Utiliser Terraform pour provisionner VM et container dans Proxmox

Terraform est un outil connu pour provisionner des machines, des instances etc.. dans des plateformes de cloud.

L'outil, modulable, peut-être utilisé avec votre serveur Proxmox et nous permettre d'avoir à la maison, une véritable infrastructure as code.

L'étape finale sera d'avoir des VM sous Nixos, pour avoir dans un dépôt git des environnement reproductibles à 100%.

Terraform va cloner une image ou un template, pour instancier une nouvelle machine virtuelle, ou un nouveau container, ayant des caractéristiques physiques décrites dans un fichier de configuration.

Il est donc nécessaire d'avoir intégrer cette image dans notre Proxmox. La machine virtuelle peut-être un template Proxmox, ou pas. On ainsi garder une VM éteinte qui servira de modèle, VM que l'on modifiera selon les besoins. Pratique pour se faire, par exemple, un template de VM LAMP. Pour l'exemple ici, nous allons nous simplifier la vie en utilisant une image Cloud-Init Debian. La prochaine fois, on passera au template Nixos.

Création du template dans Proxmox

Pour commencer il faut se connecter en SSH au serveur Proxmox et télécharger, via curl ou wget l'image CloudInit

A partir de cette image, on va créer un template :

qm create 9000 -name centos-8-stream-template -memory 1024 -net0 virtio,bridge=vmbr1 -cores 1 -sockets 1 -cpu cputype=kvm64 -description "Centos 8 Stream Cloud Image" -kvm 1 -numa 1

Ajouter le disque prédemment téléchargé à la VM et le stoker dans le dépôt (chez moi, il se nomme D1) :

qm importdisk 9000 CentOS-Stream-GenericCloud-8-20210210.0.x86_64.qcow2 D1

On rattache le disque à la VM

qm set 9000 -scsihw virtio-scsi-pci -virtio0 local:9000/vm-9000-disk-0.raw qm set 9000 -serial0 socket

restreint le boot au disque cloud-init

qm set 9000 -boot c -bootdisk virtio0 qm set 9000 -agent 1

activation du hotplug

qm set 9000 -hotplug disk,network,usb,memory,cpu

1 vcpu et 1 socket

qm set 9000 -vcpus 1 qm set 9000 -vga qxl

nommage de la VM

qm set 9000 -name centos-8-stream-template

Ajout du lecteur CD pour cloudinit

qm set 9000 -ide2 local:cloudinit

Terraformer

Revenu sur notre poste de travail, nous allons voir comment terraformer des VM basées sur notre nouveau template

Comment ça fonctionne

Terraform travail avec des fichiers locaux. Tous ceux présents dans le répertoire ou l'on se trouve. Cela signifie que les fichiers vont former un tout. On pourrait ainsi imaginer un répertoire par machine, ou par groupe de machines. Bien sur, on assurera le suivi des fichiers via git.

Proxmox possède une API, et Terraform ou plutôt son module, est capable de l'utiliser. Nous allons donc créer un compte utilisateur, capable de se connecter, et d'utiliser un token pour l'authentification.

Les paramètres de connexions, et le module seront donc dans un fichier de configuration, les variables dans un autre, et le troisième fichier contiendra la description de notre infra, dans le language DSL de Terraform