<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>terraform Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/fr/blog/tag/terraform/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/fr/blog/tag/terraform/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Tue, 03 Nov 2026 14:00:39 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>terraform Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/fr/blog/tag/terraform/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>De la Console à Terraform : importer votre infrastructure Clever Cloud existante en Infrastructure as Code (IaC)</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/11/03/terraform-import-infrastructure-as-code/</link>
		
		<dc:creator><![CDATA[Rémi Collignon-Ducret]]></dc:creator>
		<pubDate>Tue, 03 Nov 2026 13:59:03 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[terraform]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=25949</guid>

					<description><![CDATA[<p><img width="2400" height="1065" src="https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.11.03 Clever Cloud Bannière Blog Import Terraform FR" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr.png 2400w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1368x607.png 1368w" sizes="(max-width: 2400px) 100vw, 2400px" /></p><!-- wp:paragraph -->
<p>C'est précisément le moment où l'Infrastructure as Code (l’IaC, le fait de définir ses ressources sous forme de fichiers que l’on peut versionner et qui font office d'autorité) devient une évidence, et où l'on découvre que Terraform ne sait rien de ce qui existe déjà.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Jusqu'ici, rattraper ce retard coûtait cher : une commande <code>terraform import</code> par ressource, un bloc HCL à écrire à la main pour chacune, attribut par attribut, et un <code>plan</code> qui propose de tout détruire à la moindre ligne oubliée. Quarante ressources, une journée perdue. Clever Tools 5.3 et la version 3.0 de <a href="https://www.clever.cloud/fr/product/terraform/">notre provider Terraform</a> ramènent l'opération à trois commandes, <code>clever features</code>, <code>clever terraform generate</code> et <code>terraform plan</code>. Voici comment les enchaîner, et surtout ce qu'il faut vérifier avant d'appliquer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce dont vous avez besoin</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Trois outils suffisent : Terraform 1.5 ou plus récent (ou <a href="https://www.clever.cloud/fr/blog/engineering-fr/2026/03/25/opentofu-le-fork-open-source-de-terraform/">OpenTofu</a> 1.6, le fork de Terraform, ou plus récent, qui implémente les fameux blocs d'import (import blocks)), Clever Tools 5.3 et le provider Clever Cloud en version 3.0. La commande qui nous intéresse est encore en bêta, il faut donc l'activer explicitement :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>npm install -g clever-tools@latest
clever login
clever features enable terraform</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un mot sur notre provider</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Open source dès ses débuts, publié sur les registries Terraform et OpenTofu, il couvre aujourd'hui l'essentiel de la plateforme : les runtimes, les bases de données et les add-ons managés, le <a href="https://www.clever.cloud/fr/product/stockage-objet-cellar/">stockage objet</a> et les FS Buckets, les drains de logs, les <a href="https://www.clever.cloud/fr/product/network-groups/">Network Groups</a>, les <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">clusters Kubernetes</a> et jusqu'aux consumers OAuth. Au-delà du provisionnement, il sait déployer votre code depuis un dépôt Git et épingler un commit, lier une application à ses add-ons comme le fait <code>clever service link-addon</code>, lire l'adresse du load balancer pour vos entrées DNS ou parcourir les sauvegardes d'une base. Depuis la version 3.0, il accepte un token d'API pour s'intégrer à une CI, et avec Terraform 1.14 et plus, ses actions redémarrent une application, exécutent une requête SQL sur un PostgreSQL ou envoient des fichiers dans un FS Bucket sans sortir d'un <code>terraform apply</code>. 48 ressources, deux data sources, trois actions : de quoi décrire une organisation entière, et pas seulement l'importer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 1 : déclarer le provider Terraform Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans un répertoire vide, un fichier <code>provider.tf</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform {
  required_providers {
    clevercloud = {
      source  = "CleverCloud/clevercloud"
      version = "~&gt; 3.0"
    }
  }
}
 
provider "clevercloud" {}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Le bloc provider reste vide : après un <code>clever login</code>, le provider réutilise les identifiants du profil actif de Clever Tools. Il ne lui manque que l'organisation à cibler, passée par une variable d'environnement (un identifiant <code>user_…</code> fonctionne aussi pour un espace personnel) :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>export CC_ORGANISATION="orga_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
terraform init</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 2 : générer les blocs import avec clever terraform generate</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>C'est ici qu'intervient la nouveauté de Clever Tools 5.3. La commande <code>clever terraform</code> generate parcourt une organisation et écrit, pour chaque application et chaque add-on, le bloc <code>import</code> que Terraform attend :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>clever terraform generate --org orga_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &gt; imports.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Le fichier obtenu ressemble à ceci :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code># mon-api
import {
  to = clevercloud_nodejs.mon-api
  id = "app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
 
# ma-base
import {
  to = clevercloud_postgresql.ma-base
  id = "postgresql_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Chaque application est rattachée à la ressource de son runtime (<code>clevercloud_nodejs</code>, <code>clevercloud_php</code>, <code>clevercloud_docker</code>, <code>clevercloud_java_maven</code>…), chaque add-on à la sienne (<code>clevercloud_postgresql</code>, <code>clevercloud_redis</code>, <code>clevercloud_cellar</code>…).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La commande fait aussi le tri à votre place. Un Keycloak, un Matomo, un Metabase ou un Otoroshi provisionnent leur propre application et leurs propres bases ; un Elasticsearch vient avec son Kibana. Ces ressources apparaissent dans votre organisation comme les autres, mais elles appartiennent à l'add-on qui les gère : les importer reviendrait à les confier à Terraform, qui se mettrait à les modifier en parallèle. <code>clever terraform generate</code> les ignore et le signale sur la sortie d'erreur, comme il signale les quelques runtimes qui n'ont pas encore d'équivalent dans le provider. Rien n'est écarté en silence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les noms Terraform sont dérivés de ceux de vos ressources : passés en minuscules, débarrassés des caractères spéciaux, préfixés d’un _ s’ils commencent par un chiffre. Deux ressources de même type et de même nom, deux applications « demo » par exemple, ne peuvent pas cohabiter dans une configuration : la seconde reçoit un suffixe tiré de son identifiant (<code>demo-11ced66e</code>), et la sortie d’erreur le signale (« Name collision on nodejs.demo: suffixing with 11ced66e »). Ces noms ne sont que des étiquettes dans votre code : renommez-les à votre convenance dans <code>imports.tf</code> avant l’étape 3, Terraform générera la configuration sous le nouveau nom.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour une adoption progressive, vous pouvez limiter la génération à une seule application, ou aux ressources portant un tag :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>clever terraform generate --app mon-api &gt; imports.tf
clever terraform generate --tag env:staging &gt; imports.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 3 : générer la configuration HCL avec terraform plan</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Depuis sa version 1.5, Terraform sait rédiger lui-même la configuration des ressources déclarées dans des blocs <code>import</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform plan -generate-config-out=generated.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Terraform lit chaque ressource sur la plateforme, en écrit le bloc HCL dans <code>generated.tf</code> (le fichier ne doit pas exister au préalable) et affiche le plan correspondant, sans rien écrire dans le state. Le fichier contient les vraies valeurs : nom, région, nombre d'instances, flavors, plan de l'add-on, dépendances.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce point mérite une précision. Sur une application, <code>min_instance_count</code>, <code>max_instance_count</code>, <code>smallest_flavor</code> et <code>biggest_flavor</code> sont obligatoires, comme plan sur un add-on, et le provider ne les déduira jamais tout seul. Ces attributs déterminent ce que la ressource coûte : nous refusons qu'une configuration reste muette à leur sujet et adopte, sans le dire, ce que la plateforme fait tourner. C'est aussi la raison de préférer les blocs import à la commande <code>terraform import</code>, qui écrit directement dans le state et vous laisse rédiger la configuration complète, sous peine d'un <code>Missing required argument</code> au <code>plan</code> suivant.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Secrets et variables d’environnement : le piège de l’import Terraform</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>C'est l'étape où il faut ralentir. Terraform ne recopie jamais dans une configuration générée une valeur que le provider déclare sensible, et les variables d'environnement d'une application en font partie. Le fichier généré contient donc, pour chaque application :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>resource "clevercloud_nodejs" "mon-api" {
  name               = "mon-api"
  region             = "par"
  min_instance_count = 1
  max_instance_count = 2
  smallest_flavor    = "XS"
  biggest_flavor     = "M"
  environment        = null # sensitive
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p><strong>Appliquer ce fichier tel quel supprimerait toutes les variables d'environnement de l'application.</strong> Le provider offre une variable d'environnement pour contourner ce comportement le temps de la génération :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>BYPASS_SENSITIVE_IMPORTS=true terraform plan -generate-config-out=generated.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Les attributs sensibles sont alors écrits comme les autres, et <code>environment</code> contient toutes vos variables, en clair. Et pas seulement dans le fichier : tant que la variable est définie, la sortie de <code>terraform plan</code> affiche elle aussi ces valeurs en clair. Lancez cette étape depuis votre poste, jamais dans un pipeline de CI dont les logs sont conservés.  C'est exactement ce que nous voulions, et c'est aussi ce qui demande de la vigilance : clés d'API, mots de passe de bases de données externes, tokens de services tiers, tout ce que vous aviez confié à <code>clever env set</code> se retrouve dans un fichier <code>.tf</code> que vous vous apprêtez à versionner.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avant le premier commit, passez ces variables en revue. Les valeurs de configuration ordinaires (<code>NODE_ENV</code>, un port, une URL publique) peuvent rester dans le code. Les secrets doivent en sortir, vers l'outil que votre équipe utilise déjà : HashiCorp Vault ou OpenBao, les variables protégées de votre CI, un fichier chiffré avec SOPS, ou au minimum des variables Terraform marquées <code>sensitive</code> et fournies au moment de l'exécution :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>variable "stripe_api_key" {
  type      = string
  sensitive = true
}
 
resource "clevercloud_nodejs" "mon-api" {
  # ...
  environment = {
    NODE_ENV       = "production"
    STRIPE_API_KEY = var.stripe_api_key
  }
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Ce remplacement devient visible au <code>plan</code> suivant : Terraform annonce une mise à jour d'environnement, alors que la valeur n’a pas changé. Il enregistre seulement dans le state que cette valeur est désormais sensible. Le provider, lui, compare les valeurs et non leur statut : identiques, elles ne déclenchent aucun redémarrage de l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Retirez <code>BYPASS_SENSITIVE_IMPORTS</code> dès que <code>generated.tf</code> est écrit : la configuration reste valide sans elle, et le provider affiche l’avertissement « Sensitive attributes are not redacted » à chaque commande tant que la variable est définie. Quant au state Terraform, il contient toujours ces valeurs, quel que soit votre choix : son stockage mérite la même attention que les secrets eux-mêmes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 4 : vérifier le plan, puis appliquer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une fois <code>generated.tf</code> relu et nettoyé, un <code>terraform plan</code> sans la variable de contournement doit annoncer autant d'imports que de ressources, et aucune autre modification que les <code>environment</code> que vous venez de déclarer secret :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform plan
# Plan: 2 to import, 0 to add, 1 to change, 0 to destroy.
# ~ environment = (sensitive value) valeur inchangée, statut sensible enregistré
terraform apply</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Tout autre changement signale qu’un attribut de la configuration diverge de ce que la plateforme fait tourner : lisez-le avant de confirmer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L’<code>apply</code> inscrit alors les ressources dans le state et, pour les secrets passés en variables, y note leur statut sensible ; il ne touche à rien sur la plateforme. Un dernier <code>terraform plan</code> doit répondre « No changes » : votre infrastructure est désormais décrite dans du code, et les blocs <code>import</code> peuvent être supprimés.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le déploiement du code reste votre décision</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Un import ne remplit jamais le bloc <code>deployment</code> d'une application. Le provider ne peut pas deviner si vous souhaitez que Terraform gère aussi vos déploiements, et l'ajout de ce bloc déclenche un déploiement au premier <code>apply</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Trois options s'offrent à vous. Ne rien ajouter : Terraform gère la configuration, vous continuez à déployer avec <code>git push</code> ou <code>clever deploy</code>, et un changement de variable redémarre l'application comme aujourd'hui. Déclarer <code>commit = "github_hook"</code> si l'application est liée à un dépôt GitHub : les déploiements restent entre les mains de GitHub, le provider ne pousse jamais de code. Ou confier le déploiement à Terraform avec <code>repository</code> et, si vous le souhaitez, un <code>commit</code> précis. Dans ce dernier cas, un token d'API (<code>clever tokens create</code>) ne suffit pas, car il ne peut pas pousser sur Git : le provider a besoin des identifiants OAuth du profil Clever Tools.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Après l'import</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><code>generated.tf</code> est un point de départ, pas une configuration finie. Quelques gestes le rendent durable : découper le fichier par service ou par environnement, remplacer les identifiants en dur du champ <code>dependencies</code> par des références (<code>clevercloud_postgresql.ma-base.id</code>), extraire en variables ce qui diffère entre staging et production. Et puisque la commande est en bêta, vos retours sont les bienvenus sur le <a href="https://github.com/CleverCloud/clever-tools/issues">dépôt GitHub de Clever Tools</a> : c'est ainsi qu'elle sortira du mode expérimental.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Reste la question du state, que vous confiez aujourd'hui à un bucket S3 ou à un backend tiers. Nous n'en dirons pas plus pour l'instant, sinon qu'il pourrait bientôt ne plus avoir à quitter Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">L'import modifie-t-il mes applications ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Les blocs <code>import</code> n’écrivent que dans le state. La seule mise à jour attendue porte sur <code>environment</code> lorsque vous avez remplacé un secret par une variable <code>sensitive</code> : la valeur est identique et le provider ne redémarre pas l’application. Le seul risque réel est d'appliquer une configuration où <code>environment</code> vaut <code>null</code> : c'est tout l'objet de la section sur les secrets.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Puis-je n'importer qu'une partie de mon organisation ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui, avec <code>--app</code> pour une application ou <code>--tag</code> pour les ressources portant un tag. Rien n'oblige à tout migrer en une fois.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Pourquoi certaines ressources manquent-elles dans imports.tf ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Soit elles sont gérées par un add-on (l'application d'un Keycloak, le Kibana d'un Elasticsearch) et Terraform ne doit pas les prendre en charge, soit leur runtime n'a pas encore de ressource dans le provider. Dans les deux cas, la commande l'indique sur la sortie d'erreur.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Cela fonctionne-t-il avec OpenTofu, le fork de Terraform ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. OpenTofu implémente les blocs <code>import</code> et l'option <code>-generate-config-out</code> depuis sa version 1.6, et notre provider est disponible sur son registry.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il conserver les blocs import ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Une fois les ressources dans le state, ils ne servent plus et peuvent être supprimés.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>Clever Tools 5.3 est open source sur</em> <a href="https://github.com/CleverCloud/clever-tools"><em>GitHub</em></a><em>, disponible sur</em> <a href="https://www.npmjs.com/package/clever-tools"><em>npm</em></a> <em>et dans nos dépôts de paquets. Le provider Clever Cloud est publié sur le</em> <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest"><em>Terraform Registry</em></a><em>, son code est sur</em> <a href="https://github.com/CleverCloud/terraform-provider-clevercloud"><em>GitHub</em></a><em>, et la documentation complète est disponible sur</em> <a href="https://www.clever.cloud/developers/doc/tools/terraform/"><em>www.clever.cloud/developers</em></a><em>.</em></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2400" height="1065" src="https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.11.03 Clever Cloud Bannière Blog Import Terraform FR" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr.png 2400w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/11/2026-11-03-clever-cloud-banniere-blog-import-terraform-fr-1368x607.png 1368w" sizes="(max-width: 2400px) 100vw, 2400px" /></p><!-- wp:paragraph -->
<p>C'est précisément le moment où l'Infrastructure as Code (l’IaC, le fait de définir ses ressources sous forme de fichiers que l’on peut versionner et qui font office d'autorité) devient une évidence, et où l'on découvre que Terraform ne sait rien de ce qui existe déjà.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Jusqu'ici, rattraper ce retard coûtait cher : une commande <code>terraform import</code> par ressource, un bloc HCL à écrire à la main pour chacune, attribut par attribut, et un <code>plan</code> qui propose de tout détruire à la moindre ligne oubliée. Quarante ressources, une journée perdue. Clever Tools 5.3 et la version 3.0 de <a href="https://www.clever.cloud/fr/product/terraform/">notre provider Terraform</a> ramènent l'opération à trois commandes, <code>clever features</code>, <code>clever terraform generate</code> et <code>terraform plan</code>. Voici comment les enchaîner, et surtout ce qu'il faut vérifier avant d'appliquer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce dont vous avez besoin</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Trois outils suffisent : Terraform 1.5 ou plus récent (ou <a href="https://www.clever.cloud/fr/blog/engineering-fr/2026/03/25/opentofu-le-fork-open-source-de-terraform/">OpenTofu</a> 1.6, le fork de Terraform, ou plus récent, qui implémente les fameux blocs d'import (import blocks)), Clever Tools 5.3 et le provider Clever Cloud en version 3.0. La commande qui nous intéresse est encore en bêta, il faut donc l'activer explicitement :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>npm install -g clever-tools@latest
clever login
clever features enable terraform</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un mot sur notre provider</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Open source dès ses débuts, publié sur les registries Terraform et OpenTofu, il couvre aujourd'hui l'essentiel de la plateforme : les runtimes, les bases de données et les add-ons managés, le <a href="https://www.clever.cloud/fr/product/stockage-objet-cellar/">stockage objet</a> et les FS Buckets, les drains de logs, les <a href="https://www.clever.cloud/fr/product/network-groups/">Network Groups</a>, les <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">clusters Kubernetes</a> et jusqu'aux consumers OAuth. Au-delà du provisionnement, il sait déployer votre code depuis un dépôt Git et épingler un commit, lier une application à ses add-ons comme le fait <code>clever service link-addon</code>, lire l'adresse du load balancer pour vos entrées DNS ou parcourir les sauvegardes d'une base. Depuis la version 3.0, il accepte un token d'API pour s'intégrer à une CI, et avec Terraform 1.14 et plus, ses actions redémarrent une application, exécutent une requête SQL sur un PostgreSQL ou envoient des fichiers dans un FS Bucket sans sortir d'un <code>terraform apply</code>. 48 ressources, deux data sources, trois actions : de quoi décrire une organisation entière, et pas seulement l'importer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 1 : déclarer le provider Terraform Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans un répertoire vide, un fichier <code>provider.tf</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform {
  required_providers {
    clevercloud = {
      source  = "CleverCloud/clevercloud"
      version = "~&gt; 3.0"
    }
  }
}
 
provider "clevercloud" {}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Le bloc provider reste vide : après un <code>clever login</code>, le provider réutilise les identifiants du profil actif de Clever Tools. Il ne lui manque que l'organisation à cibler, passée par une variable d'environnement (un identifiant <code>user_…</code> fonctionne aussi pour un espace personnel) :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>export CC_ORGANISATION="orga_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
terraform init</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 2 : générer les blocs import avec clever terraform generate</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>C'est ici qu'intervient la nouveauté de Clever Tools 5.3. La commande <code>clever terraform</code> generate parcourt une organisation et écrit, pour chaque application et chaque add-on, le bloc <code>import</code> que Terraform attend :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>clever terraform generate --org orga_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &gt; imports.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Le fichier obtenu ressemble à ceci :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code># mon-api
import {
  to = clevercloud_nodejs.mon-api
  id = "app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
 
# ma-base
import {
  to = clevercloud_postgresql.ma-base
  id = "postgresql_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Chaque application est rattachée à la ressource de son runtime (<code>clevercloud_nodejs</code>, <code>clevercloud_php</code>, <code>clevercloud_docker</code>, <code>clevercloud_java_maven</code>…), chaque add-on à la sienne (<code>clevercloud_postgresql</code>, <code>clevercloud_redis</code>, <code>clevercloud_cellar</code>…).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La commande fait aussi le tri à votre place. Un Keycloak, un Matomo, un Metabase ou un Otoroshi provisionnent leur propre application et leurs propres bases ; un Elasticsearch vient avec son Kibana. Ces ressources apparaissent dans votre organisation comme les autres, mais elles appartiennent à l'add-on qui les gère : les importer reviendrait à les confier à Terraform, qui se mettrait à les modifier en parallèle. <code>clever terraform generate</code> les ignore et le signale sur la sortie d'erreur, comme il signale les quelques runtimes qui n'ont pas encore d'équivalent dans le provider. Rien n'est écarté en silence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les noms Terraform sont dérivés de ceux de vos ressources : passés en minuscules, débarrassés des caractères spéciaux, préfixés d’un _ s’ils commencent par un chiffre. Deux ressources de même type et de même nom, deux applications « demo » par exemple, ne peuvent pas cohabiter dans une configuration : la seconde reçoit un suffixe tiré de son identifiant (<code>demo-11ced66e</code>), et la sortie d’erreur le signale (« Name collision on nodejs.demo: suffixing with 11ced66e »). Ces noms ne sont que des étiquettes dans votre code : renommez-les à votre convenance dans <code>imports.tf</code> avant l’étape 3, Terraform générera la configuration sous le nouveau nom.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour une adoption progressive, vous pouvez limiter la génération à une seule application, ou aux ressources portant un tag :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>clever terraform generate --app mon-api &gt; imports.tf
clever terraform generate --tag env:staging &gt; imports.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 3 : générer la configuration HCL avec terraform plan</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Depuis sa version 1.5, Terraform sait rédiger lui-même la configuration des ressources déclarées dans des blocs <code>import</code> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform plan -generate-config-out=generated.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Terraform lit chaque ressource sur la plateforme, en écrit le bloc HCL dans <code>generated.tf</code> (le fichier ne doit pas exister au préalable) et affiche le plan correspondant, sans rien écrire dans le state. Le fichier contient les vraies valeurs : nom, région, nombre d'instances, flavors, plan de l'add-on, dépendances.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce point mérite une précision. Sur une application, <code>min_instance_count</code>, <code>max_instance_count</code>, <code>smallest_flavor</code> et <code>biggest_flavor</code> sont obligatoires, comme plan sur un add-on, et le provider ne les déduira jamais tout seul. Ces attributs déterminent ce que la ressource coûte : nous refusons qu'une configuration reste muette à leur sujet et adopte, sans le dire, ce que la plateforme fait tourner. C'est aussi la raison de préférer les blocs import à la commande <code>terraform import</code>, qui écrit directement dans le state et vous laisse rédiger la configuration complète, sous peine d'un <code>Missing required argument</code> au <code>plan</code> suivant.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Secrets et variables d’environnement : le piège de l’import Terraform</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>C'est l'étape où il faut ralentir. Terraform ne recopie jamais dans une configuration générée une valeur que le provider déclare sensible, et les variables d'environnement d'une application en font partie. Le fichier généré contient donc, pour chaque application :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>resource "clevercloud_nodejs" "mon-api" {
  name               = "mon-api"
  region             = "par"
  min_instance_count = 1
  max_instance_count = 2
  smallest_flavor    = "XS"
  biggest_flavor     = "M"
  environment        = null # sensitive
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p><strong>Appliquer ce fichier tel quel supprimerait toutes les variables d'environnement de l'application.</strong> Le provider offre une variable d'environnement pour contourner ce comportement le temps de la génération :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>BYPASS_SENSITIVE_IMPORTS=true terraform plan -generate-config-out=generated.tf</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Les attributs sensibles sont alors écrits comme les autres, et <code>environment</code> contient toutes vos variables, en clair. Et pas seulement dans le fichier : tant que la variable est définie, la sortie de <code>terraform plan</code> affiche elle aussi ces valeurs en clair. Lancez cette étape depuis votre poste, jamais dans un pipeline de CI dont les logs sont conservés.  C'est exactement ce que nous voulions, et c'est aussi ce qui demande de la vigilance : clés d'API, mots de passe de bases de données externes, tokens de services tiers, tout ce que vous aviez confié à <code>clever env set</code> se retrouve dans un fichier <code>.tf</code> que vous vous apprêtez à versionner.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avant le premier commit, passez ces variables en revue. Les valeurs de configuration ordinaires (<code>NODE_ENV</code>, un port, une URL publique) peuvent rester dans le code. Les secrets doivent en sortir, vers l'outil que votre équipe utilise déjà : HashiCorp Vault ou OpenBao, les variables protégées de votre CI, un fichier chiffré avec SOPS, ou au minimum des variables Terraform marquées <code>sensitive</code> et fournies au moment de l'exécution :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>variable "stripe_api_key" {
  type      = string
  sensitive = true
}
 
resource "clevercloud_nodejs" "mon-api" {
  # ...
  environment = {
    NODE_ENV       = "production"
    STRIPE_API_KEY = var.stripe_api_key
  }
}</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Ce remplacement devient visible au <code>plan</code> suivant : Terraform annonce une mise à jour d'environnement, alors que la valeur n’a pas changé. Il enregistre seulement dans le state que cette valeur est désormais sensible. Le provider, lui, compare les valeurs et non leur statut : identiques, elles ne déclenchent aucun redémarrage de l’application.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Retirez <code>BYPASS_SENSITIVE_IMPORTS</code> dès que <code>generated.tf</code> est écrit : la configuration reste valide sans elle, et le provider affiche l’avertissement « Sensitive attributes are not redacted » à chaque commande tant que la variable est définie. Quant au state Terraform, il contient toujours ces valeurs, quel que soit votre choix : son stockage mérite la même attention que les secrets eux-mêmes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Étape 4 : vérifier le plan, puis appliquer</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une fois <code>generated.tf</code> relu et nettoyé, un <code>terraform plan</code> sans la variable de contournement doit annoncer autant d'imports que de ressources, et aucune autre modification que les <code>environment</code> que vous venez de déclarer secret :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  ">
  <pre style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "><code>terraform plan
# Plan: 2 to import, 0 to add, 1 to change, 0 to destroy.
# ~ environment = (sensitive value) valeur inchangée, statut sensible enregistré
terraform apply</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Tout autre changement signale qu’un attribut de la configuration diverge de ce que la plateforme fait tourner : lisez-le avant de confirmer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L’<code>apply</code> inscrit alors les ressources dans le state et, pour les secrets passés en variables, y note leur statut sensible ; il ne touche à rien sur la plateforme. Un dernier <code>terraform plan</code> doit répondre « No changes » : votre infrastructure est désormais décrite dans du code, et les blocs <code>import</code> peuvent être supprimés.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le déploiement du code reste votre décision</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Un import ne remplit jamais le bloc <code>deployment</code> d'une application. Le provider ne peut pas deviner si vous souhaitez que Terraform gère aussi vos déploiements, et l'ajout de ce bloc déclenche un déploiement au premier <code>apply</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Trois options s'offrent à vous. Ne rien ajouter : Terraform gère la configuration, vous continuez à déployer avec <code>git push</code> ou <code>clever deploy</code>, et un changement de variable redémarre l'application comme aujourd'hui. Déclarer <code>commit = "github_hook"</code> si l'application est liée à un dépôt GitHub : les déploiements restent entre les mains de GitHub, le provider ne pousse jamais de code. Ou confier le déploiement à Terraform avec <code>repository</code> et, si vous le souhaitez, un <code>commit</code> précis. Dans ce dernier cas, un token d'API (<code>clever tokens create</code>) ne suffit pas, car il ne peut pas pousser sur Git : le provider a besoin des identifiants OAuth du profil Clever Tools.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Après l'import</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><code>generated.tf</code> est un point de départ, pas une configuration finie. Quelques gestes le rendent durable : découper le fichier par service ou par environnement, remplacer les identifiants en dur du champ <code>dependencies</code> par des références (<code>clevercloud_postgresql.ma-base.id</code>), extraire en variables ce qui diffère entre staging et production. Et puisque la commande est en bêta, vos retours sont les bienvenus sur le <a href="https://github.com/CleverCloud/clever-tools/issues">dépôt GitHub de Clever Tools</a> : c'est ainsi qu'elle sortira du mode expérimental.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Reste la question du state, que vous confiez aujourd'hui à un bucket S3 ou à un backend tiers. Nous n'en dirons pas plus pour l'instant, sinon qu'il pourrait bientôt ne plus avoir à quitter Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">L'import modifie-t-il mes applications ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Les blocs <code>import</code> n’écrivent que dans le state. La seule mise à jour attendue porte sur <code>environment</code> lorsque vous avez remplacé un secret par une variable <code>sensitive</code> : la valeur est identique et le provider ne redémarre pas l’application. Le seul risque réel est d'appliquer une configuration où <code>environment</code> vaut <code>null</code> : c'est tout l'objet de la section sur les secrets.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Puis-je n'importer qu'une partie de mon organisation ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui, avec <code>--app</code> pour une application ou <code>--tag</code> pour les ressources portant un tag. Rien n'oblige à tout migrer en une fois.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Pourquoi certaines ressources manquent-elles dans imports.tf ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Soit elles sont gérées par un add-on (l'application d'un Keycloak, le Kibana d'un Elasticsearch) et Terraform ne doit pas les prendre en charge, soit leur runtime n'a pas encore de ressource dans le provider. Dans les deux cas, la commande l'indique sur la sortie d'erreur.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Cela fonctionne-t-il avec OpenTofu, le fork de Terraform ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. OpenTofu implémente les blocs <code>import</code> et l'option <code>-generate-config-out</code> depuis sa version 1.6, et notre provider est disponible sur son registry.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il conserver les blocs import ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Une fois les ressources dans le state, ils ne servent plus et peuvent être supprimés.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>Clever Tools 5.3 est open source sur</em> <a href="https://github.com/CleverCloud/clever-tools"><em>GitHub</em></a><em>, disponible sur</em> <a href="https://www.npmjs.com/package/clever-tools"><em>npm</em></a> <em>et dans nos dépôts de paquets. Le provider Clever Cloud est publié sur le</em> <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest"><em>Terraform Registry</em></a><em>, son code est sur</em> <a href="https://github.com/CleverCloud/terraform-provider-clevercloud"><em>GitHub</em></a><em>, et la documentation complète est disponible sur</em> <a href="https://www.clever.cloud/developers/doc/tools/terraform/"><em>www.clever.cloud/developers</em></a><em>.</em></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpenTofu : le fork open source de Terraform — et pourquoi Clever Cloud le supporte nativement</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/03/25/opentofu-le-fork-open-source-de-terraform/</link>
		
		<dc:creator><![CDATA[Carine Guillemet]]></dc:creator>
		<pubDate>Wed, 25 Mar 2026 09:44:05 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[opentofu]]></category>
		<category><![CDATA[terraform]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=23935</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng 3" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3-768x341.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>La BSL n'est pas une licence open source au sens de l'Open Source Initiative : elle restreint les usages commerciaux jugés concurrents des offres HashiCorp. Du jour au lendemain, des milliers d'organisations qui avaient structuré leur infrastructure autour de Terraform se sont retrouvées dans une zone d'incertitude juridique inconfortable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La réponse n'a pas tardé. Moins d'un mois après l'annonce, un manifeste réclamant le retour à une licence open source avait réuni 33 000 étoiles sur GitHub et le soutien de près de 140 entreprises. HashiCorp n'a pas bougé. Le fork a été publié en septembre 2023, intégré à la Linux Foundation, et renommé OpenTofu. Depuis janvier 2024, il est en production stable. Depuis avril 2025, il fait partie du Cloud Native Computing Foundation (CNCF).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Notre provider <a href="https://www.clever.cloud/product/terraform/" type="link" id="https://www.clever.cloud/product/terraform/">Terraform</a> est entièrement compatible avec OpenTofu. Aucune modification de vos configurations n'est nécessaire pour l'utiliser.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Qu'est-ce qu'OpenTofu ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>OpenTofu est un outil d'infrastructure as code (IaC) open source, fork du dernier Terraform sous licence MPL 2.0 (version 1.5.x), distribué sous cette même licence Mozilla Public License 2.0. Il permet de décrire, provisionner et gérer des infrastructures cloud via des fichiers de configuration déclaratifs écrits en Hashicorp Configuration Language.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il est développé sous la gouvernance de la Linux Foundation, avec un Technical Steering Committee composé de représentants de plusieurs organisations — Gruntwork, Spacelift, Harness, Env0, Scalr — afin qu'aucune entreprise ne puisse en contrôler seule la direction. C'est précisément ce modèle de gouvernance qui a convaincu beaucoup d'équipes de franchir le pas : la garantie que l'outil restera vraiment open source, quelle que soit l'évolution commerciale de ses contributeurs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En pratique, OpenTofu fonctionne avec les mêmes fichiers .tf, les mêmes providers, les mêmes modules et le même workflow CLI que Terraform — init, plan, apply, destroy. Pour la grande majorité des équipes, migrer se résume à remplacer le binaire.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Quelle différence concrète avec Terraform ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La différence principale est la licence, et tout ce qu'elle implique sur le long terme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Terraform est aujourd'hui distribué sous BSL, qui restreint les usages commerciaux pouvant être considérés comme concurrents de HashiCorp — une notion délibérément floue, et que HashiCorp (désormais filiale d'IBM) peut interpréter différemment à l'avenir. OpenTofu est distribué sous MPL 2.0, une vraie licence open source sans restriction commerciale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au-delà de la licence, les deux projets ont commencé à diverger techniquement depuis le fork. Les différences les plus notables à ce jour :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<ul>
  <li><strong>Chiffrement du state :</strong> OpenTofu supporte nativement le chiffrement côté client des fichiers d'état, une fonctionnalité longtemps réclamée par la communauté et que Terraform n'a toujours pas implémentée.</li>
  <li><strong>Gouvernance :</strong> OpenTofu est piloté par un comité technique multi-organisations au sein de la Linux Foundation. Terraform est sous contrôle d'IBM via HashiCorp, avec une feuille de route dictée par des priorités commerciales.</li>
  <li><strong>Compatibilité :</strong> OpenTofu maintient la compatibilité syntaxique et fonctionnelle avec Terraform. Providers, modules et configurations existants fonctionnent sans modification pour la quasi-totalité des cas d'usage.</li>
  <li><strong>Extension <code>.tofu</code> :</strong> OpenTofu supporte cette extension en complément de <code>.tf</code>, ce qui permet aux auteurs de modules de fournir des variantes spécifiques à OpenTofu tout en restant compatibles avec Terraform.</li>
  <li><strong>Actions Terraform :</strong> HashiCorp a récemment introduit les "actions" dans Terraform, une fonctionnalité permettant de déclencher des comportements personnalisés lors du cycle de vie des ressources. OpenTofu ne la supporte pas encore — c'est le revers inhérent à tout fork : les nouvelles fonctionnalités propriétaires de Terraform ne sont pas automatiquement disponibles, et leur implémentation dans OpenTofu dépend des priorités du comité technique.</li>
</ul>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Pourquoi des équipes migrent vers OpenTofu</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Trois raisons reviennent systématiquement.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Le risque juridique.</strong> La BSL interdit l'usage de Terraform dans des produits pouvant entrer en concurrence avec les offres HashiCorp. Pour les équipes qui construisent des plateformes internes, des produits cloud ou des <a href="https://www.clever.cloud/fr/blog/entreprise/2025/03/19/services-manages-de-quoi-sagit-il/">services managés</a>, cette incertitude est un risque opérationnel réel — d'autant que la définition de "compétitif" appartient à HashiCorp, et peut évoluer. À cela s'ajoute une réalité moins visible mais tout aussi structurante : dans le registry Terraform, les providers open source ne bénéficient d'aucune mise en avant particulière. Obtenir un badge "officiel" nécessite de négocier directement avec HashiCorp — et de payer. Dans le registry OpenTofu, tous les providers sont traités à égalité, quelle que soit la taille ou les moyens de leurs mainteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>L'autonomie stratégique sur l'outillage.</strong> Votre infrastructure as code est le socle de tout le reste. En dépendre d'un outil contrôlé par une entreprise américaine soumise au Cloud Act, c'est introduire une dépendance supplémentaire que beaucoup d'organisations préfèrent éviter. OpenTofu, sous gouvernance Linux Foundation / CNCF, offre une continuité indépendante de tout acteur commercial.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Les fonctionnalités que Terraform ne livre pas.</strong> Le chiffrement natif des fichiers d'état est l'exemple le plus cité : réclamé pendant des années, implémenté en quelques mois par OpenTofu. C'est aussi un signal sur la vitesse à laquelle une gouvernance communautaire peut répondre à des besoins réels, par rapport à une roadmap pilotée par des intérêts commerciaux.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Migrer de Terraform vers OpenTofu</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour la grande majorité des équipes, la migration est une opération de quelques minutes. Il suffit de s'assurer que le state est propre, d'installer OpenTofu, et de remplacer terraform par tofu dans ses commandes.</p>
<!-- /wp:paragraph -->

<!-- wp:group {"layout":{"type":"constrained"},"hideFromFeed":true} -->
<div class="wp-block-group"><!-- wp:paragraph -->
<p><code># Vérifier que votre state est propre avant de migrer</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>terraform plan</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code># → "No changes. Your infrastructure matches the configuration."</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Installer OpenTofu sur macOS</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>brew install opentofu</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Installer OpenTofu sur Linux</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh | sh</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Reprendre son workflow normalement</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu apply</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>OpenTofu sur Clever Cloud : rien à changer</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Notre provider officiel (CleverCloud/clevercloud, actuellement en version 1.10) fonctionne de façon identique avec Terraform et OpenTofu. La source du provider, la syntaxe HCL et l'ensemble des ressources disponibles sont exactement les mêmes. Un exemple minimal pour déployer une application Node.js avec sa base PostgreSQL :</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>terraform {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;required_providers {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;clevercloud = {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp; = "CleverCloud/clevercloud"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version = "~&gt; 1.10"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>provider "clevercloud" {organisation}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_node" "app" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; &nbsp; &nbsp; = "mon-app-node"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region &nbsp; &nbsp; = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;min_flavor = "XS"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;max_flavor = "M"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_postgresql" "db" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; = "ma-base-postgres"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;plan &nbsp; = "dev"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>tofu apply</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La combinaison OpenTofu + Clever Cloud constitue une stack IaC entièrement souveraine : outillage open source sous gouvernance Linux Foundation / CNCF, infrastructure hébergée dans nos propres datacenters en France, hors de portée du Cloud Act américain. C'est le choix que font de plus en plus d'équipes qui veulent garder la main sur l'ensemble de leur chaîne d'outillage, pas seulement sur leurs données.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>Le provider Clever Cloud est disponible sur le </em><a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest"><em>Terraform Registry</em></a><em> et entièrement open source sur </em><a href="https://github.com/CleverCloud/terraform-provider-clevercloud"><em>GitHub</em></a><em>. </em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">FAQ </h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>OpenTofu est-il compatible avec mes configurations Terraform existantes ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour la quasi-totalité des cas d'usage, oui. OpenTofu maintient la compatibilité syntaxique et fonctionnelle avec Terraform. Fichiers .tf, providers et modules existants fonctionnent sans modification. Il est recommandé de tester dans un environnement non-production avant de basculer des workloads critiques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>OpenTofu est-il prêt pour la production ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Oui. La première version stable d'OpenTofu a été publiée en janvier 2024. Le projet a depuis dépassé 10 millions de téléchargements et est utilisé en production par des organisations de toutes tailles, y compris des entreprises du Fortune 500. Son intégration au CNCF en avril 2025 a renforcé sa crédibilité pour les environnements enterprise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Quelle est l'alternative open source à Terraform ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>OpenTofu est la principale alternative open source à Terraform. Distribué sous MPL 2.0, maintenu par la Linux Foundation et membre du CNCF, il est la continuité directe de Terraform dans son état open source d'origine.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Le provider Terraform Clever Cloud est-il compatible avec OpenTofu ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Oui, sans aucune modification de configuration. Notre provider officiel (CleverCloud/clevercloud) fonctionne identiquement avec Terraform et OpenTofu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Comment fonctionne OpenTofu ?</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>De façon identique à Terraform : vous décrivez l'état cible de votre infrastructure en HCL, OpenTofu calcule les changements nécessaires (<code>tofu plan</code>) et les applique (<code>tofu apply</code>). Il gère les dépendances entre ressources, le state et le cycle de vie complet de chaque ressource. C'est aussi là que le rachat de HashiCorp par IBM introduit une incertitude supplémentaire : certains projets gravitant autour de Terraform, comme CDK for Terraform, pourraient être déprioritisés ou abandonnés en fonction des arbitrages commerciaux d'IBM. Avec OpenTofu, la feuille de route est publique, discutée en RFC ouverte, et ne dépend d'aucune décision prise en coulisses par un acteur unique.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 18 clever cloud banniere blog paas secteur public eng 3" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3.png 800w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-18-clever-cloud-banniere-blog-paas-secteur-public-eng-3-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>La BSL n'est pas une licence open source au sens de l'Open Source Initiative : elle restreint les usages commerciaux jugés concurrents des offres HashiCorp. Du jour au lendemain, des milliers d'organisations qui avaient structuré leur infrastructure autour de Terraform se sont retrouvées dans une zone d'incertitude juridique inconfortable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La réponse n'a pas tardé. Moins d'un mois après l'annonce, un manifeste réclamant le retour à une licence open source avait réuni 33 000 étoiles sur GitHub et le soutien de près de 140 entreprises. HashiCorp n'a pas bougé. Le fork a été publié en septembre 2023, intégré à la Linux Foundation, et renommé OpenTofu. Depuis janvier 2024, il est en production stable. Depuis avril 2025, il fait partie du Cloud Native Computing Foundation (CNCF).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Notre provider <a href="https://www.clever.cloud/product/terraform/" type="link" id="https://www.clever.cloud/product/terraform/">Terraform</a> est entièrement compatible avec OpenTofu. Aucune modification de vos configurations n'est nécessaire pour l'utiliser.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Qu'est-ce qu'OpenTofu ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>OpenTofu est un outil d'infrastructure as code (IaC) open source, fork du dernier Terraform sous licence MPL 2.0 (version 1.5.x), distribué sous cette même licence Mozilla Public License 2.0. Il permet de décrire, provisionner et gérer des infrastructures cloud via des fichiers de configuration déclaratifs écrits en Hashicorp Configuration Language.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il est développé sous la gouvernance de la Linux Foundation, avec un Technical Steering Committee composé de représentants de plusieurs organisations — Gruntwork, Spacelift, Harness, Env0, Scalr — afin qu'aucune entreprise ne puisse en contrôler seule la direction. C'est précisément ce modèle de gouvernance qui a convaincu beaucoup d'équipes de franchir le pas : la garantie que l'outil restera vraiment open source, quelle que soit l'évolution commerciale de ses contributeurs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En pratique, OpenTofu fonctionne avec les mêmes fichiers .tf, les mêmes providers, les mêmes modules et le même workflow CLI que Terraform — init, plan, apply, destroy. Pour la grande majorité des équipes, migrer se résume à remplacer le binaire.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Quelle différence concrète avec Terraform ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La différence principale est la licence, et tout ce qu'elle implique sur le long terme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Terraform est aujourd'hui distribué sous BSL, qui restreint les usages commerciaux pouvant être considérés comme concurrents de HashiCorp — une notion délibérément floue, et que HashiCorp (désormais filiale d'IBM) peut interpréter différemment à l'avenir. OpenTofu est distribué sous MPL 2.0, une vraie licence open source sans restriction commerciale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au-delà de la licence, les deux projets ont commencé à diverger techniquement depuis le fork. Les différences les plus notables à ce jour :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<ul>
  <li><strong>Chiffrement du state :</strong> OpenTofu supporte nativement le chiffrement côté client des fichiers d'état, une fonctionnalité longtemps réclamée par la communauté et que Terraform n'a toujours pas implémentée.</li>
  <li><strong>Gouvernance :</strong> OpenTofu est piloté par un comité technique multi-organisations au sein de la Linux Foundation. Terraform est sous contrôle d'IBM via HashiCorp, avec une feuille de route dictée par des priorités commerciales.</li>
  <li><strong>Compatibilité :</strong> OpenTofu maintient la compatibilité syntaxique et fonctionnelle avec Terraform. Providers, modules et configurations existants fonctionnent sans modification pour la quasi-totalité des cas d'usage.</li>
  <li><strong>Extension <code>.tofu</code> :</strong> OpenTofu supporte cette extension en complément de <code>.tf</code>, ce qui permet aux auteurs de modules de fournir des variantes spécifiques à OpenTofu tout en restant compatibles avec Terraform.</li>
  <li><strong>Actions Terraform :</strong> HashiCorp a récemment introduit les "actions" dans Terraform, une fonctionnalité permettant de déclencher des comportements personnalisés lors du cycle de vie des ressources. OpenTofu ne la supporte pas encore — c'est le revers inhérent à tout fork : les nouvelles fonctionnalités propriétaires de Terraform ne sont pas automatiquement disponibles, et leur implémentation dans OpenTofu dépend des priorités du comité technique.</li>
</ul>
<!-- /wp:html -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Pourquoi des équipes migrent vers OpenTofu</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Trois raisons reviennent systématiquement.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Le risque juridique.</strong> La BSL interdit l'usage de Terraform dans des produits pouvant entrer en concurrence avec les offres HashiCorp. Pour les équipes qui construisent des plateformes internes, des produits cloud ou des <a href="https://www.clever.cloud/fr/blog/entreprise/2025/03/19/services-manages-de-quoi-sagit-il/">services managés</a>, cette incertitude est un risque opérationnel réel — d'autant que la définition de "compétitif" appartient à HashiCorp, et peut évoluer. À cela s'ajoute une réalité moins visible mais tout aussi structurante : dans le registry Terraform, les providers open source ne bénéficient d'aucune mise en avant particulière. Obtenir un badge "officiel" nécessite de négocier directement avec HashiCorp — et de payer. Dans le registry OpenTofu, tous les providers sont traités à égalité, quelle que soit la taille ou les moyens de leurs mainteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>L'autonomie stratégique sur l'outillage.</strong> Votre infrastructure as code est le socle de tout le reste. En dépendre d'un outil contrôlé par une entreprise américaine soumise au Cloud Act, c'est introduire une dépendance supplémentaire que beaucoup d'organisations préfèrent éviter. OpenTofu, sous gouvernance Linux Foundation / CNCF, offre une continuité indépendante de tout acteur commercial.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Les fonctionnalités que Terraform ne livre pas.</strong> Le chiffrement natif des fichiers d'état est l'exemple le plus cité : réclamé pendant des années, implémenté en quelques mois par OpenTofu. C'est aussi un signal sur la vitesse à laquelle une gouvernance communautaire peut répondre à des besoins réels, par rapport à une roadmap pilotée par des intérêts commerciaux.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Migrer de Terraform vers OpenTofu</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour la grande majorité des équipes, la migration est une opération de quelques minutes. Il suffit de s'assurer que le state est propre, d'installer OpenTofu, et de remplacer terraform par tofu dans ses commandes.</p>
<!-- /wp:paragraph -->

<!-- wp:group {"layout":{"type":"constrained"},"hideFromFeed":true} -->
<div class="wp-block-group"><!-- wp:paragraph -->
<p><code># Vérifier que votre state est propre avant de migrer</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>terraform plan</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code># → "No changes. Your infrastructure matches the configuration."</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Installer OpenTofu sur macOS</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>brew install opentofu</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Installer OpenTofu sur Linux</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh | sh</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p># Reprendre son workflow normalement</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu apply</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>OpenTofu sur Clever Cloud : rien à changer</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Notre provider officiel (CleverCloud/clevercloud, actuellement en version 1.10) fonctionne de façon identique avec Terraform et OpenTofu. La source du provider, la syntaxe HCL et l'ensemble des ressources disponibles sont exactement les mêmes. Un exemple minimal pour déployer une application Node.js avec sa base PostgreSQL :</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>terraform {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;required_providers {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;clevercloud = {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp; = "CleverCloud/clevercloud"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version = "~&gt; 1.10"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>provider "clevercloud" {organisation}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_node" "app" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; &nbsp; &nbsp; = "mon-app-node"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region &nbsp; &nbsp; = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;min_flavor = "XS"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;max_flavor = "M"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>resource "clevercloud_postgresql" "db" {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;name &nbsp; = "ma-base-postgres"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;region = "par"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;plan &nbsp; = "dev"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>}</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu init</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>tofu plan</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>tofu apply</code></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La combinaison OpenTofu + Clever Cloud constitue une stack IaC entièrement souveraine : outillage open source sous gouvernance Linux Foundation / CNCF, infrastructure hébergée dans nos propres datacenters en France, hors de portée du Cloud Act américain. C'est le choix que font de plus en plus d'équipes qui veulent garder la main sur l'ensemble de leur chaîne d'outillage, pas seulement sur leurs données.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>Le provider Clever Cloud est disponible sur le </em><a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest"><em>Terraform Registry</em></a><em> et entièrement open source sur </em><a href="https://github.com/CleverCloud/terraform-provider-clevercloud"><em>GitHub</em></a><em>. </em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">FAQ </h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>OpenTofu est-il compatible avec mes configurations Terraform existantes ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour la quasi-totalité des cas d'usage, oui. OpenTofu maintient la compatibilité syntaxique et fonctionnelle avec Terraform. Fichiers .tf, providers et modules existants fonctionnent sans modification. Il est recommandé de tester dans un environnement non-production avant de basculer des workloads critiques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>OpenTofu est-il prêt pour la production ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Oui. La première version stable d'OpenTofu a été publiée en janvier 2024. Le projet a depuis dépassé 10 millions de téléchargements et est utilisé en production par des organisations de toutes tailles, y compris des entreprises du Fortune 500. Son intégration au CNCF en avril 2025 a renforcé sa crédibilité pour les environnements enterprise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Quelle est l'alternative open source à Terraform ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>OpenTofu est la principale alternative open source à Terraform. Distribué sous MPL 2.0, maintenu par la Linux Foundation et membre du CNCF, il est la continuité directe de Terraform dans son état open source d'origine.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Le provider Terraform Clever Cloud est-il compatible avec OpenTofu ?</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Oui, sans aucune modification de configuration. Notre provider officiel (CleverCloud/clevercloud) fonctionne identiquement avec Terraform et OpenTofu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Comment fonctionne OpenTofu ?</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>De façon identique à Terraform : vous décrivez l'état cible de votre infrastructure en HCL, OpenTofu calcule les changements nécessaires (<code>tofu plan</code>) et les applique (<code>tofu apply</code>). Il gère les dépendances entre ressources, le state et le cycle de vie complet de chaque ressource. C'est aussi là que le rachat de HashiCorp par IBM introduit une incertitude supplémentaire : certains projets gravitant autour de Terraform, comme CDK for Terraform, pourraient être déprioritisés ou abandonnés en fonction des arbitrages commerciaux d'IBM. Avec OpenTofu, la feuille de route est publique, discutée en RFC ouverte, et ne dépend d'aucune décision prise en coulisses par un acteur unique.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
