Logo

Que recherchez-vous ?

Ajouter une configuration commune à plusieurs sites avec Terraform

Configuration d'un site

Ajouter une configuration commune à plusieurs sites avec Terraform

Cet article présente comment appliquer une configuration commune à un ensemble de sites en utilisant Terraform.

Dernière mise à jour : 13 Jan, 2026

Il est courant de vouloir appliquer à plusieurs sites une même configuration ou vouloir effectuer une modification commune à un ensemble de sites depuis un seul endroit afin d'éviter d'avoir à modifier manuellement chaque site un par un, d'autant plus si ces changements doivent être effectués régulièrement.

Dans cet article nous présenterons deux exemples en se basant sur différents attributs d'une ressource ogo_shield_site. La méthode présentée ici pourra être étendue pour n'importe quel attribut d'une ressource Terraform.

Le scénario est donc le suivant :

  1. Déclarer une variable décrivant l'objet que l'on souhaite appliquer à un ensemble de site et lui attribuer une valeur par défaut

  2. Ajouter cet objet à la configuration des sites qui doivent partager la même configuration

Utilisation d'une variable pour définir l'UID du cluster

Dans cet exemple, nous allons définir de manière globale l'UID d'un cluster que nous souhaitons utiliser sur chaque site, nous déclarons une variable cluster_uid_euw1 de type string que nous affecterons à l'attribut cluster_uid de chacun des sites. Dans l'exemple ci-dessous, l'UID du cluster est le 802448cf-e2f9-40eb-b0d8-2983e018a0f4 :

# Define variable with default cluster UID to used in sites definition
variable "cluster_uid_euw1" {
  description = "Default Cluster ID where sites will be provisioned"
  default = "802448cf-e2f9-40eb-b0d8-2983e018a0f4"
}

resource "ogo_shield_site" "foo_example_com" {
  domain_name = "foo.example.com"
  cluster_uid = var.cluster_uid_euw1
  origin_server = "172.18.1.10"
}

resource "ogo_shield_site" "bar_example_com" {
  domain_name = "bar.example.com"
  cluster_uid = var.cluster_uid_euw1
  origin_server = "172.18.1.11"
}

A noter que l'UID utilisé ici est un UID fictif. Les UID de cluster peuvent être récupérés depuis la datasource ogo_shield_clusters.

Si les sites doivent être migrés d'un cluster à un autre, il suffira juste de modifier la valeur de la variable cluster_uid_euw1 par l'UID du nouveau cluster et relancer un déploiement Terraform.

Attention cependant, la modification de certains attributs, comme le cluster_uid, peuvent entraîner la recréation d'un site.

Définir une même liste d'IP en exception sur plusieurs sites

Dans l'exemple suivant nous voulons mettre en exception sur plusieurs sites une liste d'IP afin qu'elles ne soient pas analysées par le brain.

Nous avons donc déclaré une variable common_ips_exception dans lequel nous définissons le prototype de notre attribut ip_exceptions (comment et ip de type string) avec pour valeur la liste des IP en exception que nous souhaitons appliquer à nos sites dans la suite de la configuration :

# List of common IPs exception to apply to a set of sites
variable "common_ips_exception" {
  type    = list(object({comment = string, ip = string}))
  default = [
    {
      comment = "Alice Home IPv4"
      ip      = "131.220.78.219/32"
    },
    {
      comment = "Bob Home IPv4"
      ip      = "131.220.78.220/32"
    },
    {
      comment = "John Home IPv6"
      ip      = "fded:b552:6f7e:fc6f::/64"
    },
  ]
}

resource "ogo_shield_site" "foo_example_com" {
  domain_name   = "foo.example.com"
  cluster_uid   = var.cluster_uid
  origin_server = "172.18.1.10"
  ip_exceptions = distinct(concat(var.common_ips_exception,
  [
    {
      comment = "Alice Home IPv4"
      ip      = "131.220.78.219/32"
    },
    {
      comment = "Office IPv6"
      ip      = "fded:b552:6f7e:ad5e::/64"
    },
  ]))
}

resource "ogo_shield_site" "bar_example_com" {
  domain_name   = "bar.example.com"
  cluster_uid   = var.cluster_uid
  origin_server = "172.18.1.11"
  ip_exceptions = var.common_ips_exception
}

Comme le site foo.example.com dispose déjà d'une liste d'IP en exception que nous ne souhaitons pas écraser mais compléter, nous concaténons à l'aide de la fonction Terraform concat() notre nouvelle liste à celle existante et nous retirons les éventuels doublons grâce à la fonction Terraform distinct().

Dans le cas du site bar.example.com, si une liste d'IP en exception existe déjà, elle sera remplacée par celle définit dans notre variable common_ips_exception.

Cet article vous a-t-il aidé ?
Précédent

Automatiser la gestion de ses sites avec Terraform

Suivant