Terraform cree, Ansible configure
Apres que Terraform a cree les serveurs, Ansible les configure : installe les paquets, deploie les fichiers de configuration, demarre les services.
Inventaire dynamique
# inventory.yml - Inventaire des serveurs
all:
children:
k8s_nodes:
hosts:
node1:
ansible_host: 10.0.1.10
node2:
ansible_host: 10.0.1.11
node3:
ansible_host: 10.0.1.12
vars:
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/devops-key.pem
Playbook : configurer les nœuds Kubernetes
# setup-cluster.yml
---
- name: Configurer les noeuds Kubernetes
hosts: k8s_nodes
become: true
vars:
monitoring_namespace: monitoring
keycloak_namespace: auth
tasks:
# ── Paquets de base ──
- name: Installer les paquets essentiels
apt:
name:
- curl
- apt-transport-https
- ca-certificates
- gnupg
state: present
update_cache: true
# ── Docker ──
- name: Installer Docker
apt:
name: docker-ce
state: present
- name: Ajouter l'utilisateur au groupe docker
user:
name: "{{ ansible_user }}"
groups: docker
append: true
# ── Outils de monitoring ──
- name: Deployer le namespace monitoring
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "{{ monitoring_namespace }}"
# ── Helm charts pour monitoring ──
- name: Installer Prometheus via Helm
kubernetes.core.helm:
name: prometheus
chart_ref: prometheus-community/kube-prometheus-stack
release_namespace: "{{ monitoring_namespace }}"
create_namespace: true
values:
grafana:
adminPassword: "{{ grafana_password }}"
# ── Keycloak ──
- name: Deployer Keycloak via Helm
kubernetes.core.helm:
name: keycloak
chart_ref: bitnami/keycloak
release_namespace: "{{ keycloak_namespace }}"
create_namespace: true
values:
auth:
adminUser: admin
adminPassword: "{{ keycloak_admin_password }}"
Le duo Terraform + Ansible en action
# Workflow complet :
# 1. Terraform cree l'infrastructure
cd terraform/
terraform apply -auto-approve
# 2. Recuperer les outputs de Terraform
export CLUSTER_ENDPOINT=$(terraform output -raw cluster_endpoint)
# 3. Ansible configure tout
cd ../ansible/
ansible-playbook -i inventory.yml setup-cluster.yml \
-e "cluster_endpoint=$CLUSTER_ENDPOINT"
Idempotence : Ansible et Terraform sont idempotents : vous pouvez les relancer plusieurs fois, ils ne modifient que ce qui a change. C'est une propriete fondamentale de l'IaC.