Home Tags Anciens articles Mon CV

Terraform : configurer un provider LXD

Ces derniers temps, je m’intéresse de plus en plus au concept d’infrastructure as code, comme vous avez pu le ressentir dans mes articles. C’est donc tout naturellement que je commence à aborder Terraform. Il va me servir à construire l’infrastructure, tandis qu’Ansible me permettra de la piloter.

Terraform peut exploiter de nombreux providers, dont une liste se trouve ici pour les providers officiels, c’est à dire développés et maintenus par Hashicorp et ici pour ceux qui le sont pas. On appelle ces derniers les community providers.

Mon premier provider est tout naturellement LXD, qui fait partie des community providers. Il faut donc l’installer autrement que via terraform.

En premier lieu, il faut télécharger la dernière version du provider depuis le repository :

$ wget https://github.com/sl1pm4t/terraform-provider-lxd/releases/download/v1.2.0/terraform-provider-lxd_v1.2.0_linux_amd64.zip
...

Et l’installer dans le dossier correspondant:

$ mkdir ~/.terraform.d/plugins
$ unzip terraform-provider-lxd_v1.2.0_linux_amd64.zip
Archive:  terraform-provider-lxd_v1.2.0_linux_amd64.zip
  inflating: terraform-provider-lxd_v1.2.0_x4  
$ mv terraform-provider-lxd_v1.2.0_x4 ~/.terraform.d/plugins/terraform-provider-lxd

Dans mon projet Ansible, je créé un sous-dossier tf à la racine et y dépose un fichier main.tf dans lequel je vais configurer mon provider.

provider "lxd" {
  generate_client_certificates  = true
  accept_remote_certificate    = true

  lxd_remote {
      name      = "vjun"
      scheme    = "https"
      address   = "54.69.2.259" # Oui, c'est une fausse IP :-)
      password  = "uv29ct6w998bbvt6abm6"
  }
}

Les deux premiers paramètres sont indiqués afin que les certificats utilisés pour joindre l’API LXD du porte-conteneur soient acceptés. Ensuite vient la configuration du porte-conteneur en soit, c’est à dire:

  • name : le nom que l’on va donner à ce host
  • scheme : le protocole utilisé pour appeler son API
  • address : l’ip du porte-conteneur où l’API LXD doit répondre
  • password : le secret LXD

Evidemment, il est possible d’en paramétrer autant que voulu en réutilisant le bloc lxd_remote, tant que leurs noms sont différents.

Nous pouvons ensuite vérifier que le tout communique :

$ terraform init

Initializing the backend...

Initializing provider plugins...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

No changes. Infrastructure is up-to-date.

This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.

Good to go ! Il ne reste plus qu’à rédiger le code pour créer nos conteneurs avec le nom et l’architecture voulue.

Prochain article sur le sujet : utiliser un provider LXD ;-)