Provisionner des VM avec Terraform
Mise à jour :
En tant que consultant DevOps, j’ai besoin de disposer d’outils puissants et flexibles pour configurer des environnements de veille technologique. Pour cela, j’utilise Terraform, un outil d’automatisation d’infrastructure as code, qui se distingue par sa capacité à gérer le cycle de vie complet des instances : de la création jusqu’à la destruction.
Pré-requis
Avant de plonger dans l’intégration spécifique de Terraform avec Proxmox, il est essentiel de posséder une compréhension solide de la création de configurations Terraform. Terraform utilise un langage de configuration déclaratif pour définir l’infrastructure souhaitée. Cela implique la connaissance des bases de Terraform, y compris la syntaxe, les modules, les providers et les états.
Si vous êtes nouveau dans l’univers de Terraform ou souhaitez rafraîchir vos connaissances, je vous recommande vivement de consulter le guide d’introduction suivant : Introduction à Terraform. Ce guide couvre les concepts fondamentaux et fournit une base solide pour comprendre comment Terraform peut être utilisé pour automatiser la gestion de l’infrastructure.
Configuration de proxmox
L’adoption du principe de moindre privilège est essentielle pour renforcer la sécurité de votre infrastructure. Cela implique de créer un utilisateur et un rôle spécifique dans Proxmox, qui sera utilisé par Terraform. Cette approche garantit que Terraform n’aura que les permissions nécessaires pour effectuer ses tâches, sans accès excessif pouvant compromettre la sécurité du système. Voici comment procéder en ligne de commande :
Création d’un Rôle
L’adoption du principe de moindre privilège est essentielle pour renforcer la sécurité de votre homelab. Cela implique de créer un utilisateur et un rôle spécifique dans Proxmox, qui sera utilisé par Terraform. Cette approche garantit que Terraform n’aura que les permissions nécessaires pour effectuer ses tâches, sans accès excessif pouvant compromettre la sécurité du système. Voici comment procéder en ligne de commande :
Connectez-vous à votre serveur Proxmox via SSH ou accédez à son terminal si vous y avez un accès physique.
Proxmox permet de créer des rôles personnalisés avec des permissions
spécifiques. Utilisez la commande suivante, en vous connectant en ssh
auparavant, pour créer un nouveau rôle (par exemple, TerraformRole
) avec des
permissions adaptées à Terraform :
Cette commande crée un rôle TerraformRole
avec des privilèges adaptés pour
gérer les machines virtuelles.
Création d’un Utilisateur
Créez un utilisateur spécifique pour Terraform. Par exemple, pour créer un
utilisateur terraform-prov
dans le domaine @pve
avec un mot de passe,
utilisez :
Après avoir créé l’utilisateur, attribuez-lui le rôle créé précédemment. Vous pouvez le faire pour l’ensemble du datacenter :
Cette commande assigne le rôle TerraformRole
à terraform-prov@pve
pour
toutes les ressources du datacenter.
Test de Connexion
Testez la connexion avec le nouvel utilisateur pour vous assurer que tout fonctionne comme prévu. Vous pouvez le faire en vous connectant à l’interface web de Proxmox avec les identifiants du nouvel utilisateur ou en testant une action simple via Terraform.
Génération d’un token
Pour une intégration sécurisée et efficace entre Terraform et Proxmox, l’utilisation d’un token API est recommandée. Cela permet à Terraform de se connecter et d’interagir avec Proxmox sans nécessiter des informations d’identification utilisateur classiques. Voici la procédure pour créer un token API dans Proxmox et le configurer dans Terraform.
Création du template
Configuration SSH
Le provider Proxmox BPG demande à ce que l’on puisse se connecter au cluster proxmox en SSH avec l’agent.
Ecriture du Code Terrafom
Bon, coté configuration tout est prêt passons au code.
Configuration du Provider Proxmox
Le cœur de l’intégration entre Terraform et Proxmox réside dans la configuration du provider Proxmox. Ce provider permet à Terraform de communiquer et de gérer les ressources sur votre serveur Proxmox.
Commencez par créer un fichier nommé main.tf
. Dans ce fichier, ajoutez les
deux blocs de configuration pour le provider Proxmox BPG. Voici un exemple :
Créez un fichier variables.tf
:
Pour éviter de mettre les informations de connexion dans un fichier, nous allons définir une variable d’environnement :
Ouvrez un terminal dans le répertoire contenant votre fichier main.tf
et
exécutez terraform init
. Cette commande initialise le projet Terraform et
télécharge le provider Proxmox.
Validation de la Configuration
Une fois le provider configuré, il est important de valider que Terraform peut communiquer correctement avec votre serveur Proxmox :
Utilisez la commande terraform plan
pour planifier une action simple. Cette
étape ne modifiera rien, mais vous permettra de vérifier que Terraform peut
interagir avec Proxmox sans erreurs.
Examinez les sorties de la commande. Si tout est configuré correctement, Terraform devrait pouvoir se connecter à Proxmox et afficher le plan d’exécution sans erreurs.
Vous êtes maintenant prêt à utiliser Terraform pour automatiser la gestion de votre infrastructure Proxmox.
Création de ressources Proxmox
Après avoir configuré Terraform et Proxmox pour une intégration sécurisée, le prochain pas consiste à automatiser la création et la gestion de machines virtuelles (VMs). Terraform permet de définir des VMs dans Proxmox de manière déclarative, rendant ce processus à la fois fiable et reproductible.
Nous allons utiliser le template que nous avons créé précédement.
Définition d’une Ressource VM dans Terraform
Dans votre fichier main.tf
ajoutez ces lignes
Quelques explications :
La première section définit une source de données Terraform (data
) pour
rechercher une VM dans Proxmox qui correspond à certaines balises (tags
).
Cette VM sera utilisée comme template pour cloner de nouvelles VMs.
Les deux ressources suivantes proxmox_virtual_environment_file
créent des
fichiers de configuration Cloud-Init dans Proxmox, qui seront utilisés pour
configurer la VM lors de son premier démarrage.
La dernière ressource définit la VM à créer :
Dans votre fichier variables.tf
ajoutez ceci :
Il faut aussi créer les fichiers de templates. Créez un dossier cloud-init
dans
lequel vous placez ces deux fichiers :
-
user_data
: -
meta-data
: vide
Validation de la Configuration
Comme auparavant, utilisez la commande terraform plan
pour vérifier que le
code source ne contient pas d’erreurs.
Création de la VM
Dans votre terminal, exécutez terraform plan
pour voir les changements que
Terraform s’apprête à effectuer. Cette étape vous permet de vérifier la
configuration avant son application.
Malgré le message d’erreur la VM fonctionne. On peut se connecter avec l’adresse IP fournit par l’agent :
On fait le ménage
Rien de plus simple :
Conclusion
À travers ce guide, nous avons exploré comment provisionner des VM avec Terraform sur un cluster Proxmox. Cela vous offre une flexibilité et une puissance considérables pour gérer des machines virtuelles et des conteneurs.
Cela n’a pas été si simple. En effet, il n’existe pas de provider officiel, mais deux maintenus par la communauté. Celui qui est le plus documenté n’est plus mis à jour.
Je tiens à remercier toutes les personnes qui m’ont aidé :
Nous pouvons passer à la suite avec l’utilisation de l’inventaire dynamique Ansible avec Proxmox. Ansible est un outil puissant pour l’automatisation de la configuration et la gestion de l’infrastructure et l’inventaire dynamique est un moyen efficace de gérer les ressources virtualisées dans notre cluster Proxmox de manière flexible et scalable.