Gestion des zones DNS Gandi avec Terraform

Boris HUISGEN
Boris HUISGEN
Gestion des zones DNS Gandi avec Terraform

La gestion des zones DNS Gandi avec Terraform est possible grâce à un module open-source.

Installation du provider

$ go get github.com/tiramiseb/terraform-provider-gandi
$ cd $GOPATH/go/src/github.com/tiramiseb/terraform-provider-gandi
$ go build -o terraform-provider-gandi

Comme indiqué dans la documentation du module, seules sont supportées les zones LiveDNS de la nouvelle infrastructure DNS. Il convient donc de migrer vos anciennes zones le cas échéant. Une clé API est également à générer pour permettre les modifications distantes depuis Terraform.

Projet Terraform

Débutons par la création du projet Terraform :

$ mkdir ~/Projects/terraform-gandi-dns
$ cd ~/Projects/terraform-gandi-dns
$ touch main.tf providers.tf variables.tf outputs.tf terraform.tfvars

Fichier provider.tf :

1provider "gandi" {
2  key = "${var.gandi_key}"
3}

Fichier variable.tf :

1variable "gandi_key" {}

Fichier main.tf :

 1resource "gandi_zone" "hbis_fr" {
 2  name = "hbis.fr"
 3}
 4
 5resource "gandi_domainattachment" "hbis_fr" {
 6  domain = "hbis.fr"
 7  zone = "${gandi_zone.hbis_fr.id}"
 8}
 9
10resource "gandi_zonerecord" "root" {
11  zone = "${gandi_zone.hbis_fr.id}"
12  name = "@"
13  type = "A"
14  ttl = 3600
15  values = [
16    "51.15.171.130"
17  ]
18}
19
20resource "gandi_zonerecord" "www" {
21  zone = "${gandi_zone.hbis_fr.id}"
22  name = "www"
23  type = "A"
24  ttl = 3600
25  values = [
26    "51.15.171.130"
27  ]
28}

En plus du code des ressources, une variable Terraform sera utilisée pour fournir la clé API.

Importation de la zone DNS

Le projet est à initialiser :

$ terraform init

Avant de débuter l’importation, l’étape essentielle est de récupérer l’identifiant de la zone en utilisant l’API Gandi:

$ curl -s -H "Content-Type: application/json" -H "X-Api-Key: ******" https://dns.api.gandi.net/api/v5/zones|jq -r
[
  {
    "retry": 3600,
    "uuid": "72e4069e-eeef-11e7-8db5-00163e6dc886",
    "zone_href": "https://dns.api.gandi.net/api/v5/zones/72e4069e-eeef-11e7-8db5-00163e6dc886",
    "minimum": 10800,
    "domains_href": "https://dns.api.gandi.net/api/v5/zones/72e4069e-eeef-11e7-8db5-00163e6dc886/domains",
    "refresh": 10800,
    "zone_records_href": "https://dns.api.gandi.net/api/v5/zones/72e4069e-eeef-11e7-8db5-00163e6dc886/records",
    "expire": 604800,
    "sharing_id": "4aace8e0-b393-11e7-bcf1-00163ec388ae",
    "serial": 1514825087,
    "email": "hostmaster.gandi.net.",
    "primary_ns": "ns1.gandi.net",
    "name": "hbis.fr"
  }
]

La valeur UUID est l’identifiant à récupérer pour lancer l’importation de la ressource gandi_zone:

$ terraform import -var 'gandi_key=******' gandi_zone.hbis_fr 72e4069e-eeef-11e7-8db5-00163e6dc886

Terraform devrait avoir confirmer l’importation de la ressource dans son fichier d’état, ce qui peut-être vérifié :

$ terraform show
gandi_zone.hbis_fr:
id = 72e4069e-eeef-11e7-8db5-00163e6dc886
name = hbis.fr

La ressource gandi_domainattachment est également à importer:

$ terraform import -var 'gandi_key=******' gandi_domainattachment.hbis_fr hbis.fr

Si des alias DNS sont déjà existants, ils seront également à importer. L’identifiant interne des ressources gandi_zonerecord a le format : <UUID>/<NAME>/<TYPE>

$ terraform import -var 'gandi_key=******' gandi_zonerecord.root 72e4069e-eeef-11e7-8db5-00163e6dc886/@/A
$ terraform import -var 'gandi_key=******' gandi_zonerecord.blog 72e4069e-eeef-11e7-8db5-00163e6dc886/www/A

Vérification du plan

Le fichier d’état étant peuplé de toutes les ressources nécessaires, vérifiez que le plan ne requiert aucune modification :

$ terraform plan -var 'gandi_key=******'

Vous pouvez à présent gérer votre zone et ses enregistrements depuis votre projet Terraform.

Boris HUISGEN
Boris HUISGEN
Auteur du blog
  • #terraform
  • #gandi
  • #dns