Infrastructure avec Terraform et Ansible 25 min de lecture

Ansible : configurer l'infrastructure

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.