Ajouter un site en quelques ligne de code

variables.tf : Fichier source unique de vérité

variable "wordpress_sites" {
  description = "Liste des sites WordPress à déployer"
  type = list(object({
    name   = string
    domain = string
  }))
  default = [
    {
      name   = "site1"
      domain = "devop-project.jhennebo.fr"
    },
    {
      name   = "site2"
      domain = "blog.jhennebo.fr"
    },
    { 
      name   = "site3"
      domain = "boutique.jhennebo.fr"     j’ajoute ces 4 lignes et je crée un 3eme site
    }
  ]
}

Boucle for each dans mon fichier.dns.tf

%{ for site in var.wordpress_sites }

  - name: "${site.name}"

    domain: "${site.domain}"

    db_name: "db_${site.name}"

%{ endfor }

Terraform provisionne automatiquement l’enregistrement DNS sur AWS Route 53.

Via un bloc local_file, Terraform génère dynamiquement en arrière-plan le fichier YAML requis par mon rôle Ansible.

resource "local_file" "ansible_vars" {

  filename = "${path.module}/../ansible/roles/wordpress/vars/main.yml"

  content  = <<EOT

# Généré automatiquement par Terraform - NE PAS MODIFIER À LA MAIN

wordpress_sites:

%{ for site in var.wordpress_sites }

  - name: "${site.name}"

    domain: "${site.domain}"

    db_name: "db_${site.name}"

%{ endfor }

Ce fichier est traité de manière éphémère dans le pipeline GitLab CI via un mécanisme d’artifacts, garantissant qu’aucune donnée de configuration générée n’est stockée inutilement sur le dépôt Git (respect des bonnes pratiques du .gitignore).

Ansible prend automatiquement le relais pour déployer le nouveau conteneur WordPress sur le cluster K3s, configurer Traefik pour le routage, et lever un certificat TLS valide.

Résultat : L’ajout d’un site web complet, sécurisé en HTTPS et raccordé à la base de données RDS se résume aujourd’hui à 2-3 lignes de code ajoutée, sans aucune action humaine sur les serveurs.« 

Extrait Job apply

artifacts:
    paths:
      #  On demande à GitLab de sauvegarder le fichier qu'il vient de générer automatiquement 
      - ansible/roles/wordpress/vars/main.yml
Retour en haut