Aller au contenu principal

Sortie d'OpenTofu 1.6

· 10 minutes de lecture
Stéphane ROBERT
Consultant DevOps

La sortie de la première version d'OpenTofu, la 1.6.0, marque un jalon important dans le paysage des outils de gestion d'infrastructure en tant que code (IaC). Avec sa compatibilité avec Terraform 1.6, OpenTofu offre une porte de sortie pour ceux qui cherchent une alternative open-source robuste et fiable. Avec son intégration au sein de la Linux Foundation, OpenTofu se positionne de suite comme un acteur majeur, bénéficiant d'un support communautaire important et d'une base solide pour les développements futurs.

L'Histoire d'OpenTofu

Le parcours d'OpenTofu est illustre parfaitement l'évolution rapide et les réactions de la communauté open-source face aux changements de l'écosystème logiciel. Le déclencheur initial de ce projet a été la décision d'HashiCorp, en août 2023, de modifier la licence de plusieurs de ses projets open-source, y compris Terraform, en adoptant la licence source-available BUSL. Cette décision, bien que compréhensible dans un contexte commercial, a soulevé des inquiétudes au sein de la communauté quant à l'avenir de l'accès et de la contribution à ces outils.

En réponse, une équipe de développeurs, soutenue par une communauté de passionnée, a lancé le projet OpenTofu. L'objectif était clair : maintenir un fork de Terraform qui reste fidèle à l'esprit de l'open-source. Leur engagement a porté ses fruits, car OpenTofu a rapidement été accepté au sein de la Linux Foundation. Cette intégration a non seulement légitimé OpenTofu en tant que projet open-source sérieux, mais a également assuré sa pérennité et son développement continu.

Fonctionnalités d'OpenTofu 1.6.0

Travailler sur un fork d'un projet existant est loin d'être une tâche aisée. L'équipe d'OpenTofu a dû relever de nombreux défis, notamment la mise en place d'une infrastructure solide et la garantie d'une expérience utilisateur de qualité, comparable à celle de Terraform. Leur travail acharné a abouti à la sortie de la première version stable d'OpenTofu, la 1.6.0, qui a introduit déjà une nouvelle fonctionnalité, ainsi que plusieurs améliorations.

L'arrivée d'OpenTofu 1.6.0 apporte son lot d'améliorations, lui permettant de se placer comme une alternative viable à Terraform. Cette version se distingue par ses caractéristiques spécifiques, conçues pour faciliter la gestion d'infrastructure et améliorer l'expérience utilisateur.

L'un des atouts majeurs d'OpenTofu 1.6.0 est sa compatibilité totale avec Terraform 1.6. Cette caractéristique facilite grandement la transition pour les utilisateurs existants de Terraform. La migration de Terraform vers OpenTofu est simplifiée, avec une documentation complète disponible pour guider les utilisateurs à travers le processus.

Nouvelle Fonctionnalité

OpenTofu 1.6.0 introduit tofu test, une fonctionnalité innovante permettant aux utilisateurs de tester leurs configurations d'infrastructure de manière plus efficace. Cette fonctionnalité vient simplifier la gestion des tests d'infrastructure, étendant les champs du possible à OpenTofu.

Les Améliorations Diverses

En plus de cette nouvelle fonctionnalité, cette version apporte de nombreuses petites améliorations. Ces améliorations sont conçues pour affiner l'expérience utilisateur, augmenter la stabilité et optimiser les performances.

Backend d'État S3 Amélioré : Avec de nouvelles méthodes d'authentification, tout en restant compatible avec les solutions de stockage compatibles S3.

Nouveau Registre de Providers et de Modules : Simplification du processus de publication par une simple pull request.

L'équipe travaille déjà sur la version 1.7.0 d'OpenTofu avec des fonctionnalités prometteuses, comme le chiffrement des fichiers d'état, répondant ainsi aux besoins croissants de sécurité et d'efficacité dans la gestion d'infrastructure.

Installation d'OpenTofu

Installer OpenTofu est simple et ce, pour une variété de systèmes d'exploitation. Je vais vous guider à travers les étapes pour quelques-uns des systèmes les plus courants, assurant ainsi que vous puissiez commencer à utiliser OpenTofu rapidement, quel que soit votre environnement de travail.

Installation sur Linux

Pour les utilisateurs de Linux, OpenTofu offre des packages spécifiques pour différentes distributions. Pa exemple pour Debian et ses dérivées :

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | sudo gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg >/dev/null
sudo chmod a+r /etc/apt/keyrings/opentofu.gpg

echo \
  "deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main
deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | \
  sudo tee /etc/apt/sources.list.d/opentofu.list > /dev/null


sudo apt-get update
sudo apt-get install -y tofu

Pour les distributions dérivé de RHEL, l'installation se fait via le gestionnaire de paquets YUM :

cat >/etc/yum.repos.d/opentofu.repo <<EOF
[opentofu]
name=opentofu
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/\$basearch
repo_gpgcheck=0
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[opentofu-source]
name=opentofu-source
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/SRPMS
repo_gpgcheck=0
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF


sudo yum install -y tofu

Pour Alpine Linux :

echo '@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories
apk add opentofu@testing

Vous pouvez aussi l'installer avec asdf-vm avec les commandes suivantes :

asdf plugin add opentofu
asdf install opentofu latest
asdf global opentofu latest

Installation sur macOS

Les utilisateurs de macOS peuvent installer OpenTofu via Homebrew, un gestionnaire de paquets populaire pour macOS :

brew install opentofu

Installation via Snapcraft

Pour une installation multiplateforme, OpenTofu est également disponible via Snapcraft, permettant une installation facile sur n'importe quel système prenant en charge Snap :

snap install --classic opentofu

Installation à Partir des Sources

Pour ceux qui préfèrent une approche plus personnalisée ou qui ont besoin de la toute dernière version, OpenTofu peut être compilé et installé à partir des sources. Cela nécessite un environnement de développement avec Go installé :

git clone git@github.com:opentofu/opentofu.git
cd opentofu
go build -ldflags "-w -s -X 'github.com/opentofu/opentofu/version.dev=no'" -o bin/ ./cmd/tofu

Vérification de l'installation

Une fois installée, vous pouvez vérifier qu'OpenTofu est correctement installé avec la commande suivante :

Usage: tofu [global options] <subcommand> [args]

The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.

Main commands:
  init          Prepare your working directory for other commands
  validate      Check whether the configuration is valid
  plan          Show changes required by the current configuration
  apply         Create or update infrastructure
  destroy       Destroy previously-created infrastructure

All other commands:
  console       Try OpenTofu expressions at an interactive command prompt
  fmt           Reformat your configuration in the standard style

OpenTofu Test

La version 1.6.0 d'OpenTofu introduit une nouvelle fonctionnalité : tofu test. Cette fonctionnalité améliore la manière dont les administrateurs systèmes et les professionnels DevOps peuvent tester et valider leurs configurations d'infrastructure.

Un exemple simple :

run "test" {
  assert {
    condition     = file(local_file.test.filename) == "Hello world!"
    error_message = "Incorrect content in ${local_file.test.filename}."
  }
}

L'écriture de tests d'OpenTofu se fait de la même manière en utilisant des blocs de code hcl :

  • Bloc run : Contient un cas de test unique qui exécute tofu apply ou tofu plan et évalue ensuite tous les blocs assert.
  • Bloc assert : Définit des assertions qui vérifient si votre code a correctement créé l'infrastructure.
  • Bloc module : Permet de charger un module auxiliaire pour des tests plus élaborés.
  • Liste expect_failures : Liste des ressources qui devraient échouer à provisionner dans le test en cours.
# First, set the variable here:
variables {
  name = "OpenTofu"
}

run "basic" {
  assert {
    condition     = output.greeting == "Hello OpenTofu!"
    error_message = "Incorrect greeting: ${output.greeting}"
  }
}

run "override" {
  # Override it for this test case only here:
  variables {
    name = "OpenTofu user"
  }
  assert {
    condition     = output.greeting == "Hello OpenTofu user!"
    error_message = "Incorrect greeting: ${output.greeting}"
  }
}

Utilisation de tofu test.

  • Commande : tofu test [options].
  • Fonctionnement : Exécute tous les fichiers *.tftest.hcl dans le répertoire courant ou dans un répertoire nommé tests.

Options de tofu test.

  • -test-directory=path : Définit le répertoire où se trouve les fichiers de tests.
  • -filter=testfile : Spécifie un fichier de test individuel à exécuter.
  • -var 'foo=bar' : Définit une variable d'entrée du module racine.
  • -var-file=filename : Définit plusieurs variables à partir du fichier spécifié.
  • -json : Modifie le format de sortie en JSON.
  • -no-color : Désactive la sortie colorée.
  • -verbose : Imprime le plan ou l'état pour chaque bloc de test exécuté.

Structure de Répertoire pour tofu test.

OpenTofu supporte deux structures de répertoire pour les tests : plate ou imbriquée.

  • Structure Plate : Les fichiers *.tftest.hcl sont placés directement à côté des fichiers *.tf.
  • Structure Imbriquée : Les fichiers *.tftest.hcl sont placés dans un répertoire séparé tests.

Tester des Modules

Pour tester des modules, utilisez l'une des structures ci-dessus pour chaque module. Exécutez tofu test -test-directory=./path/to/module pour tester le module concerné.

Migration de Terraform vers OpenTofu

Le passage de Terraform à OpenTofu 1.6.0 est un processus qui, bien que simple et direct, nécessite une attention particulière pour assurer une transition en douceur et sécurisée. Voici un guide étape par étape pour migrer de Terraform vers OpenTofu, basé sur la documentation officielle d'OpenTofu :

Étape 0 : Préparer un plan de récupération d'urgence

Avant de commencer la migration, il est important de disposer d'un plan de récupération d'urgence à jour et testé. Même si OpenTofu est très similaire à Terraform, la migration est un changement non négligeable qui affecte votre infrastructure.

Étape 1 : Appliquer tous les changements avec Terraform

Assurez-vous que toutes les modifications en attente sont appliquées avec terraform apply. Exécutez terraform plan pour confirmer qu'aucun changement supplémentaire n'est prévu.

Étape 2 : Installer OpenTofu

Suivez les instructions d'installation d'OpenTofu pour votre système d'exploitation. Vérifiez ensuite que vous pouvez exécuter avec succès la commande tofu --version.

Étape 3 : Sauvegarder votre fichier d'état

Avant d'utiliser la commande tofu sur votre code Terraform, assurez-vous de sauvegarder votre fichier d'état. Si vous utilisez un fichier d'état local, faites simplement une copie de votre fichier terraform.tfstate.

Étape 4 : Initialiser OpenTofu

Exécutez tofu init dans le répertoire contenant votre code Terraform. OpenTofu téléchargera les providers et modules référencés dans votre configuration.

Étape 5 : Inspecter le plan

Une fois OpenTofu initialisé, exécutez tofu plan et assurez-vous qu'il n'y a pas de changements en attente, comme à l'étape 1. Si des changements inattendus apparaissent, revenez à Terraform pour résoudre les problèmes.

Étape 6 : Tester un petit changement

Avant d'utiliser OpenTofu pour des changements plus importants, testez-le avec un changement mineur et non critique en utilisant tofu apply.

En cas de problèmes : Revenir à Terraform et signaler les problèmes

Si vous rencontrez des problèmes lors de la migration, suivez ces étapes pour revenir à Terraform :

Créez une autre sauvegarde de votre fichier d'état. Exécutez terraform init. Exécutez terraform plan et vérifiez qu'aucun changement inattendu n'est prévu. Testez le retour avec un petit changement non critique. Si vous rencontrez un bug, veuillez le signaler sur GitHub.

Conclusion

Information importante : Ce projet dispose du support de Partenaires Technologiques Importants : Des entreprises telles que CloudFlare, BuildKite, GitLab et Oracle soutiennent le projet.

Avec sa compatibilité avec Terraform, son engagement envers l'open-source, et ses nouvelles fonctionnalités telles que tofu test en font une option viable à qui cherche une alternative à Terraform.

Mais rien de mieux que le tester en condition réelle pour vérifier les promesses annoncées par l'équipe d'OpenTofu. C'est ce que je vais faire dès maintenant et je publierai mes conclusions définitives dans les prochaines semaines.

Plus d'infos