Vous intégrez une équipe DevOps.
Actuellement :
Problèmes :
Objectif :
Automatiser :
Vérifier :
Versionner ses outils :
Fichier : terminal
mkdir iac-demo cd iac-demo mkdir terraform ansible
Structure :
iac-demo/
├── terraform/
│ └── main.tf
└── ansible/
├── inventory.ini
└── playbook.yml
Créer un conteneur NGINX
Fichier : terraform/main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
}
}
}
provider "docker" {}
resource "docker_container" "nginx" {
image = "nginx:latest"
name = "mon_nginx"
ports {
internal = 80
external = 8090
}
}
Fichier : terminal
cd terraform terraform init terraform apply
Validation :
Fichier : terminal
terraform state list
Le state Terraform contient l’état réel des ressources gérées (IDs, propriétés, dépendances).
Terraform s’en sert pour savoir ce qui existe déjà, calculer les changements à appliquer et éviter de recréer inutilement des ressources.
Fichier : ansible/inventory.ini
localhost ansible_connection=local
Fichier : ansible/playbook.yml
- hosts: localhost
connection: local
tasks:
- name: créer une page web temporaire
copy:
dest: /tmp/index.html
content: |
<h1>IaC avec Ansible</h1>
- name: copier la page dans le conteneur nginx
command: docker cp /tmp/index.html mon_nginx:/usr/share/nginx/html/index.html
Fichier : terminal
cd ../ansible ansible-playbook -i inventory.ini playbook.yml
Validation :
Modifier le nom du conteneur dans Terraform :
Fichier : terraform/main.tf
name = "mon_nginx_v2"
Relancer :
terraform apply
Puis rejouer Ansible :
ansible-playbook -i inventory.ini playbook.yml
Corriger le playbook pour utiliser le bon nom de conteneur.
Pour éviter ce problème, il faut :
Objectif :
Modifier votre configuration :
Appliquer les changements.
Terraform modifie la ressource si le changement est compatible avec une mise à jour. Sinon, la ressource est recréée.
Ce comportement dépend du type de ressource et des contraintes du provider Docker.
Créer un second conteneur :
Questions :
Créer un troisième conteneur :
Observer votre code :
L’augmentation du nombre de conteneurs rend le code difficile à lire et à maintenir :
La duplication de code est le principal problème de cette configuration.
Elle peut être évitée en utilisant des variables, des boucles (for_each) ou des modules Terraform.