Utilisation du provider Terraform Ansible
Mise à jour :
Plutôt que d’opposer Terraform à Ansible, je préfère les utiliser ensemble. Terraform est un outil de provisioning qui permet de décrire l’infrastructure sous forme de code et de la déployer de manière reproductible et automatisée. Ansible, de son côté, est un gestionnaire de configuration qui automatise les tâches répétitives, telles que la gestion des configurations de serveurs, les déploiements d’applications et bien plus encore.
En combinant ces deux outils à travers le provider ansible/ansible pour Terraform, nous pouvons non seulement provisionner les ressources nécessaires, mais aussi les configurer immédiatement après leur création.
Pourquoi utiliser le provider Ansible pour Terraform ?
L’intégration de Terraform et Ansible via le provider ansible/ansible est particulièrement puissante lorsqu’on travaille avec des infrastructures cloud.
Avec Terraform, vous pouvez définir et provisionner vos ressources cloud telles que des instances de calcul, des volumes de stockage et des réseaux privés virtuels (VPC). En utilisant le provider Ansible, vous pouvez créer des inventaires Ansible que vous pouvez ensuite utiliser avec les commandes Ansible.
Les avantages :
- Automatisation complète : Les inventaires sont générés et mis à jour automatiquement, réduisant le risque d’erreurs manuelles et assurant que votre configuration est toujours à jour.
- Scalabilité : Avec des inventaires dynamiques, vous pouvez facilement adapter vos configurations à des environnements de grande taille ou changeants, sans avoir à gérer manuellement les fichiers d’inventaire.
- Flexibilité : Vous pouvez définir des groupes et des variables spécifiques aux hôtes ou groupes d’hôtes, ce qui vous permet de personnaliser la configuration selon les besoins de chaque composant de votre infrastructure.
Utilisation du provider Ansible
L’utilisation du provider ansible/ansible se fait directement via le fichier de configuration Terraform :
Comme d’habitude, il faut initialiser avec la commande terraform init
.
Installation du plugin d’inventaire Ansible Terraform
Pour qu’Ansible puisse utiliser les inventaires générés par Terraform il faut installer la collection cloud.terraform.
Création de l’inventaire Ansible avec Terraform
Pour rappel, un inventaire définit les hôtes sur lesquels Ansible va exécuter ses tâches. Avec Terraform, il est possible de générer dynamiquement des inventaires basés sur les ressources que vous avez provisionnées, ce qui permet une gestion plus flexible et automatisée de vos configurations.
- La ressource
ansible_group
crée un groupe Ansible nommé servers via le paramètre name. - La resource
ansible_host
définit un hôte Ansible, en l’occurrence server1 et l’associe au groupe précédemment créé servers. Elle inclut également des variables spécifiques à cet hôte, telles que l’adresse IP, l’utilisateur SSH et la clé privée SSH utilisée pour l’authentification.
Pour générer l’inventaire il suffit de lancer la commande suivante :
Utilisation des Inventaires dans les Playbooks
Une fois que l’inventaire dynamique est généré par Terraform, vous pouvez l’utiliser dans vos playbooks Ansible pour exécuter des tâches sur les hôtes définis.
Commencez par créer un fichier inventory.yaml avec ce contenu :
On peut rapidement vérifier l’inventaire avec la commande ansible-inventory
:
On peut passer à l’écriture de notre playbook Ansible :
Dans cet exemple, le playbook Ansible cible tous les hôtes dans le groupe servers et exécute les tâches définies.
Tout est prêt, lancez l’exécution du playbook.
Lancement du playbook depuis Terraform ?
Pourquoi je n’utilise pas la ressource ansible_playbook
?
- Parce qu’il ne prend pas en charge les fichiers de configuration
ansible.cfg
locaux. - Parce qu’il ne cible que les machines définies dans les ressources
ansible_host
.
Conclusion
En conclusion, l’intégration d’Ansible avec Terraform offre de puissantes possibilités d’automatisation pour la gestion des infrastructures cloud.
Pour une gestion plus précise et conforme aux standards, il est souvent préférable de gérer l’exécution des playbooks Ansible en dehors de Terraform, permettant ainsi un contrôle total sur la configuration et l’exécution des tâches.