Terraform : gérer ses zones DNS Gandi

Voici la marche à suivre pour gérer vos zones DNS Gandi avec Terraform. Je pars du principe que votre zone est existante, ce qui implique l’importation de l’ensemble des ressources dans Terraform. Ce n’est pas strictement obligatoire, mais seule l’importation garantit la correspondance exacte de votre code à l’existant.

Installation du provider Gandi

# 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 précisé par l’auteur du provider, cela ne marche qu’avec la nouvelle infrastructure LiveDNS de Gandi; il convient donc de migrer vos zones et également créer votre clé API.

Projet Terraform

Débutons par la création d’un project Terraform basique :

# mkdir ~/Projects/terraform
# cd ~/Projects/terraform
# touch main.tf providers.tf variables.tf outputs.tf terraform.tfvars

Fichier provider.tf :

provider "gandi" {
    key = "${var.gandi_key}"
}

Fichier variable.tf :

variable "gandi_key" {}

Fichier main.tf :

resource "gandi_zone" "hbis_fr" {
  name = "hbis.fr"
}

resource "gandi_domainattachment" "hbis_fr" {
    domain = "hbis.fr"
    zone = "${gandi_zone.hbis_fr.id}"
}

resource "gandi_zonerecord" "root" {
    zone = "${gandi_zone.hbis_fr.id}"
    name = "@"
    type = "A"
    ttl = 3600
    values = [
        "51.15.171.130"
    ]
}
resource "gandi_zonerecord" "www" {
    zone = "${gandi_zone.hbis_fr.id}"
    name = "www"
    type = "A"
    ttl = 3600
    values = [
        "51.15.171.130"
    ]
}

Je ne m’étends pas sur le code des ressources, seule une variable Terraform sera utilisée en CLI pour fournir la clé API.

Le projet est à initialiser :

$ terraform init

Avant de débuter l’importation de la zone DNS, l’étape essentielle est de récupérer son identifiant. Pour ce faire :

$ 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. Lancez l’importation :

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

Terraform devrait confirmer l’importation de la ressource dans son fichier d’état. Vérification :

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

La ressource d’association zone DNS au domaine est également à importer:

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

La zone est à présent reconnue et la création de nouveau records par Terraform est possible. Reste donc à importer les records existants :

$ 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

La commande import nécessite le nom de la ressource et son identifiant interne. Dans le cas des records, le format est : <UUID>/<NAME>/<TYPE>.

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

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

Vous pouvez à présent utiliser Terraform pour créer et gérer votre zone DNS.

Python : serveur web ad hoc

$ python3 -m http.server 9000

docker-maven-plugin : version 0.2.0

Une petite mise à jour de mon plugin Maven pour générer les images Docker de mes projets Java. Le plugin est disponible sur le dépot central Maven.

Projet : https://github.com/bhuisgen/docker-maven-plugin

Debian : forcer l’utilisation d’IPv4 pour apt

# echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99forceipv4

Amazon EC2 : configuration routage asymétrique

# vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
   post-up ip route add default via 172.16.100.1 dev eth0 tab 1
   post-up ip rule add from 172.16.100.99 tab 1
   pre-down ip rule del from 172.16.100.99 tab 1
   pre-down ip route del default via 172.16.100.1 dev eth0 tab 1

auto eth1
iface eth1 inet dhcp
   post-up ip route add default via 172.16.111.1 dev eth1 tab 2
   post-up ip rule add from 172.16.111.169 tab 2
   pre-down ip rule del from 172.16.111.169 tab 2
   pre-down ip route del default via 172.16.111.1 dev eth1 tab 2

Git : nettoyer les branches locales déjà mergées et supprimées sur le serveur distant

# git branch -r | awk '{print $1}' | \
  egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | \
  awk '{print $1}' | xargs git branch -d

Git : supprimer un fichier sensible d’un dépôt

# git filter-branch --force \
   --index-filter 'git rm --cached --ignore-unmatch my/path/to/file.txt' \
   --prune-empty --tag-name-filter cat -- --all

Debian : activer l’IPv6 sur une instance EC2

# vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
   post-up sleep 2
iface eth0 inet6 dhcp

RaspberryPI : installation de Kodi 17.1

# echo 'deb http://pipplware.pplware.pt/pipplware/dists/jessie/main/binary /' | sudo tee --append /etc/apt/sources.list.d/pipplware_jessie.list
# wget -O - http://pipplware.pplware.pt/pipplware/key.asc | apt-key add -
# apt update
# apt install kodi

zabbix-docker : version 0.2.1

Zabbix-docker est un agent de monitoring Docker pour Zabbix, permettant de récupérer l’ensemble des métriques des containers Docker pour un host voire un cluster (aggrégation des métriques côté serveur Zabbix). Les métriques actuellement supportées sont les suivantes :

  • statut des containers (dont le health check de Docker 1.12)
  • statistiques des containers (RAM, CPU, interfaces réseau et périphériques de stockage)
  • processus en exécution dans les containers
  • évenèments des containers

La version 0.2 apporte en particulier l’exécution par l’API Docker de commandes distantes dans les containers monitorés. Ainsi, en ajoutant vos scripts de collecte des métriques trapper à vos images Docker, les métriques applicatives peuvent être détectées (parsing de la sortie console) et envoyées au serveur Zabbix.

Haut de page