Note importante : L'article se conditionne à ce qu'OpenStack soit totalement installé et opérationnel. Si vous souhaitez expérimenter Terraform sans pour autant monter toute une infra physique derrière, vous pouvez vous amuser comme moi sur le Cloud Public OVH. 30€ sont offerts avec le code CLOUD, ce qui est suffisant pour s'amuser un peu. Attention cependant, les IP flottantes, les DNS, les routeurs, et les load-balancer ne sont pas disponibles sur la plateforme...

Terraform est un logiciel édité par HashiCorp, et qui propose de faire de l'IaC (Infrastructure as Code). Pour résumer, Terraform permet de construire une infrastructure à partir de fichiers descripteurs. Cela permet d'automatiser grandement le processus de création d'infrastructure, et, surtout, de travailler collaborativement sur l'infrastructure. Par ailleurs, comme nous allons le voir, Terraform permet une grande souplesse sur le déploiement et la destruction d'environnement à la volée. Terraform peut se télécharger ici

Afin de faciliter le travail des développeurs, Terraform possède plusieurs caractéristiques majeures :

  • Idempotence : Peu importe le nombre de fois qu'on déploiera l'infrastructure, le résultat sera toujours le même (modulo les données variables, par exemple les IP des machines).
  • Connaissance de l'état : Terraform dispose d'un fichier tfstate qui stocke l'état du projet OpenStack/AWS/... . Ainsi, il est toujours au courant du statut de déploiement de l'infrastructure.
  • Rejouabilité : La Connaissance de l'état permet à Terraform ne pas redéployer ce qu'il à déjà déployé : Il n'effectuera que les modifications requises sur l'infrastructure, ce qui réduit le temps de déploiement, et évite des downtimes inutiles.
  • Variabilisation : Les fichiers de Terraform peuvent contenir des variables, qu'il est possible de faire changer selon l'environnement que l'on déploie. On évite donc de redonder du code pour déployer un environnement de dev et de prod par exemple.

Pour fonctionner, Terraform doit connaître les variables qui vont servir à l'exécution : L'adresse de l'API OpenStack, le nom d'utilisateur, le projet, etc. Commençons donc par exporter dans notre bash quelques variables d'environnement...

export OS_AUTH_URL=https://openstack.monsuperserveur.org/ #L'URL de l'API
export OS_PROJECT_ID=super_long_token_du_projet #Le token du projet créé dans OpenStack
export OS_PROJECT_NAME="Le nom du projet" #Le nom du projet dans OpenStack
export OS_USERNAME="admin" #Le nom d'utilisateur d'OpenStack
export OS_PASSWORD="motdepasse" #Le mot de passe d'Openstack
export OS_INTERFACE=public
export OS_REGION_NAME="Ma_Region"
export OS_IDENTITY_API_VERSION=3

Un exemple pour OVH :

export OS_AUTH_URL=https://auth.cloud.ovh.net/
export OS_PROJECT_ID=4c8a2715dac3422a97xxxxxxxxxxxx #Dispo sur https://horizon.cloud.ovh.net/project/api_access/
export OS_PROJECT_NAME="9120000319100000"
export OS_USERNAME="PAAAAAAfRCjU"
export OS_PASSWORD="LULZ"
export OS_INTERFACE=public
export OS_REGION_NAME="BHS5"

Bien évidemment, pour faciliter le partage, il est possible de créer un petit script bash, qui contient ces informations (sauf le mot de passe, la seule donnée sensible...).

Une fois ceci fait, nous devons configurer le projet. Nous allons créer un dossier, nommé "application". Nous allons ensuite y aller via la console (cd application). Nous allons ensuite y créer un fichier, nommé provider.tf, et y écrire ceci :

provider "openstack" {  }

Ainsi, Terraform sait que nous somme sur un projet Openstack. On peut alors initialiser le projet Terraform : terraform init. On va alors voir apparaître un dossier .terraform, dans lequel le logiciel y stockera tout son barda (et notamment le fameux fichier tfstate). Nous pouvons donc commencer à utiliser Terraform. Dans le prochain article, nous aborderons les instances !

Article précédent Article suivant