{"id":700,"date":"2025-03-12T23:00:52","date_gmt":"2025-03-12T22:00:52","guid":{"rendered":"https:\/\/www.slash-mnt.com\/?p=700"},"modified":"2026-07-26T19:11:41","modified_gmt":"2026-07-26T17:11:41","slug":"terraform-opentofu-mont-fait-perdre-du-temps","status":"publish","type":"post","link":"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/","title":{"rendered":"Terraform\/OpenTofu m&#8217;ont fait perdre du temps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Disclaimer<\/strong> : Terraform\/OpenTofu me font plus gagner de temps que l&#8217;inverse !<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#Pre-ambule\" >Pr\u00e9-ambule<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#Le_debut_des_problemes\" >Le d\u00e9but des probl\u00e8mes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#Un_debut_de_solution\" >Un d\u00e9but de solution<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#La_suite\" >La suite ?<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Pre-ambule\"><\/span>Pr\u00e9-ambule<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je suis utilisateur d&#8217;OpenTofu depuis l&#8217;annonce du changement de licence appliqu\u00e9e \u00e0 l&#8217;utilisation de Terraform. Cependant, ce qui est trait\u00e9 dans cet article impacte bien les deux solutions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour rappel, les r\u00e9centes lev\u00e9es de bouclier depuis l&#8217;application de la nouvelle licence d&#8217;utilisation de Terraform proviennent essentiellement de l&#8217;incertitude et du maintien de son flou des conditions applicables mais aussi sur le risque de voir \u00e0 nouveau la licence changer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HashiCorp, l&#8217;\u00e9diteur de Terraform, a adopt\u00e9 la Business Source License (BSL\/BUSL) courant 2023 (<a href=\"https:\/\/www.hashicorp.com\/en\/blog\/hashicorp-adopts-business-source-license\" data-type=\"link\" data-id=\"https:\/\/www.hashicorp.com\/en\/blog\/hashicorp-adopts-business-source-license\" target=\"_blank\" rel=\"noreferrer noopener\">HashiCorp adopts Business Source License, Aug 10 2023, Armon Dadgar<\/a>), laissant derri\u00e8re eux la <a href=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/\" data-type=\"link\" data-id=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/\">Mozilla Public License v2.0<\/a> (MPL 2.0). Cette license porte donc dans ces conditions un flou quant \u00e0 votre possible utilisation concurrentielle de Terraform vis-\u00e0-vis des services offerts par HashiCorp (notamment Terraform Cloud).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En tant qu&#8217;intervenant externe, SLASH MNT pourrait par exemple \u00eatre vu comme concurrent direct \u00e0 HashiCorp car nous pouvons fournir un service factur\u00e9 sur, par exemple, la mise en place de l&#8217;automatisation d&#8217;une infrastructure tout en utilisant l&#8217;outil Terraform.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tous ces \u00e9v\u00e9nements ayant attir\u00e9s l&#8217;attention des plus grands groupes, il fallu peu de temps pour qu&#8217;OpenTofu soit fork du projet Terraform \u00e0 sa derni\u00e8re version livr\u00e9es sous MPL 2.0. Aujourd&#8217;hui OpenTofu est soutenu par la Linux Foundation, organisme \u00e0 but non-lucratif dont l&#8217;objectif est de promouvoir l&#8217;utilisation d&#8217;outils et services &#8220;vendor-neutral&#8221; (\u00e9viter le verrouillage du march\u00e9).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sachant cela, pour \u00e9viter toutes m\u00e9saventures et d\u00e9sagr\u00e9ments \u00e0 nos clients, nous proposons de prime abord l&#8217;utilisation d&#8217;OpenTofu qui, quant \u00e0 lui, est propos\u00e9 sous licence <a href=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/\" data-type=\"link\" data-id=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/\">Mozilla Public License 2.0<\/a>. Comme l&#8217;\u00e9tait autrefois Terraform !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_debut_des_problemes\"><\/span>Le d\u00e9but des probl\u00e8mes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>N.B.<\/strong> : j&#8217;ai un gros passif de d\u00e9veloppeur soucieux de la maintenabilit\u00e9 de mon code, passant par la factorisation par exemple.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma probl\u00e9matique du jour : <strong>concevoir et d\u00e9velopper une infrastructure g\u00e9n\u00e9rique, capable de se lancer sur de multiples cloud providers<\/strong>. Pour transparence, l&#8217;infrastructure-as-code a \u00e9t\u00e9 imagin\u00e9e et d\u00e9velopp\u00e9e d&#8217;abord pour OVHcloud. Un second cas d&#8217;usage s&#8217;est pr\u00e9sent\u00e9 mais chez Open Telekom Cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux cloud providers utilisent Openstack pour fournir leur infrastructure : un point commun qui peut faire toute la diff\u00e9rence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OVH a pris le parti de d\u00e9velopper son provider Terraform sur tous les aspects en surcouche ou suppl\u00e9mentaires \u00e0 Openstack, et donc de laisser le provider Openstack faire le reste. L&#8217;avantage est donc qu&#8217;il y a une adh\u00e9rence minimale \u00e0 OVH.<br>En ce qui concerne Open Telekom Cloud (OTC), c&#8217;est&#8230; diff\u00e9rent ! Nous nous rendons compte qu&#8217;OTC a plut\u00f4t cherch\u00e9 \u00e0 cr\u00e9er son provider Terraform <strong>par dessus<\/strong> celui d&#8217;Openstack. Personnellement, c&#8217;est un choix qui me d\u00e9plait, et ce \u00e0 plusieurs \u00e9gards, mais il y a peut-\u00eatre une impl\u00e9mentation diff\u00e9rente que celle d&#8217;Openstack ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Par rapport \u00e0 mon besoin, ceci am\u00e8ne un frein notable : l&#8217;infrastructure-as-code de mon infrastructure g\u00e9n\u00e9rique doit d\u00e9finir deux impl\u00e9mentations bien disctinctes, engendrant un arbre de d\u00e9pendances divergeant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OVH :\n<ul class=\"wp-block-list\">\n<li>Provider OVH<\/li>\n\n\n\n<li>Provider Openstack<\/li>\n\n\n\n<li>Provider AWS (pour tous les aspects S3 \/ Object Storage)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Open Telekom Cloud :\n<ul class=\"wp-block-list\">\n<li>Provider Open Telekom Cloud<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Comme dit plus t\u00f4t, en tant qu&#8217;ing\u00e9nieur qui cherche \u00e0 factoriser ses productions, voil\u00e0 ce que je pouvais imaginer faire :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"847\" height=\"551\" src=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan.png\" alt=\"Sch\u00e9ma d'un plan Terraform g\u00e9n\u00e9rique se ramifiant vers les modules OVH (OVHcloud, Openstack, AWS) et OTC (Open Telekom Cloud)\" class=\"wp-image-707\" srcset=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan.png 847w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-300x195.png 300w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-768x500.png 768w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-18x12.png 18w\" sizes=\"(max-width: 847px) 100vw, 847px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;id\u00e9e est qu&#8217;en fonction du Cloud Provider d\u00e9fini (et configur\u00e9), Terraform\/OpenTofu viendrait piocher les modules dont il a besoin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Malheureusement cette approche vient \u00e0 l&#8217;encontre du design m\u00eame de l&#8217;outil Terraform\/OpenTofu. Terraform\/OpenTofu cr\u00e9e un plan d&#8217;ex\u00e9cution d\u00e9crivant l&#8217;infrastructure qu&#8217;il va cr\u00e9er, mettre \u00e0 jour ou d\u00e9truire en fonction de l&#8217;infrastructure existante et de votre configuration. Pour y parvenir, il g\u00e9n\u00e8re un graphe de d\u00e9pendance de toutes les ressources qui doivent \u00eatre cr\u00e9\u00e9es ou modifi\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour l&#8217;ensemble du code Terraform\/OpenTofu qui suit, prenons pour acquis la d\u00e9finition suivante des providers :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">p_opentelekomcloud.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>provider \"opentelekomcloud\" {\n  access_key  = var.providers.opentelekomcloud.access_key\n  secret_key  = var.providers.opentelekomcloud.secret_key\n  tenant_name = var.providers.opentelekomcloud.tenant_name\n  domain_name = var.providers.opentelekomcloud.domain_name\n  auth_url    = var.providers.opentelekomcloud.auth_url\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">provider<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;opentelekomcloud&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  access_key<\/span><span style=\"color: #FFAB70\">  <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">opentelekomcloud<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">access_key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  secret_key<\/span><span style=\"color: #FFAB70\">  <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">opentelekomcloud<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">secret_key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  tenant_name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">opentelekomcloud<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">tenant_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  domain_name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">opentelekomcloud<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">domain_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  auth_url<\/span><span style=\"color: #FFAB70\">    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">opentelekomcloud<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">auth_url<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">p_ovh.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>provider \"aws\" {\n  region     = var.providers.ovh.awsregion\n  access_key = var.providers.ovh.aws.access_key\n  secret_key = var.providers.ovh.aws.\n\n  skip_credentials_validation = true\n  skip_requesting_account_id = true\n\n  # The regions are probably unknown to AWS hence skipping is needed.\n  skip_region_validation = true\n\n  endpoints {\n    s3 = var.providers.ovh.s3_endpoint\n  }\n}\n\nprovider \"ovh\" {\n  endpoint           = var.providers.ovh.endpoint\n  application_key    = var.providers.ovh.application_key\n  application_secret = var.providers.ovh.application_secret\n  consumer_key       = var.providers.ovh.consumer_key\n}\n\nprovider \"openstack\" {\n  auth_url     = var.providers.ovh.openstack.auth_url\n  region       = var.providers.ovh.openstack.region\n  tenant_name  = var.providers.ovh.openstack.tenant_name\n  user_name    = var.providers.ovh.openstack.user_name\n  password     = var.providers.ovh.openstack.password\n  delayed_auth = true\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">provider<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;aws&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  region<\/span><span style=\"color: #FFAB70\">     <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">awsregion<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  access_key<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">aws<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">access_key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  secret_key<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">aws<\/span><span style=\"color: #F97583\">.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  skip_credentials_validation<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #79B8FF\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  skip_requesting_account_id<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #79B8FF\">true<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #6A737D\"># The regions are probably unknown to AWS hence skipping is needed.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  skip_region_validation<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #79B8FF\">true<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><span style=\"color: #B392F0\">endpoints<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    s3<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">s3_endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">provider<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;ovh&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  endpoint<\/span><span style=\"color: #FFAB70\">           <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  application_key<\/span><span style=\"color: #FFAB70\">    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">application_key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  application_secret<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">application_secret<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  consumer_key<\/span><span style=\"color: #FFAB70\">       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">consumer_key<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">provider<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;openstack&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  auth_url<\/span><span style=\"color: #FFAB70\">     <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">openstack<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">auth_url<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  region<\/span><span style=\"color: #FFAB70\">       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">openstack<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">region<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  tenant_name<\/span><span style=\"color: #FFAB70\">  <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">openstack<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">tenant_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  user_name<\/span><span style=\"color: #FFAB70\">    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">openstack<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">user_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  password<\/span><span style=\"color: #FFAB70\">     <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">providers<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">openstack<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">password<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  delayed_auth<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #79B8FF\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, imaginons le plan suivant, o\u00f9 l&#8217;on souhaite g\u00e9rer un cluster Kubernetes manag\u00e9 o\u00f9 l&#8217;on d\u00e9l\u00e8gue la logique d&#8217;impl\u00e9mentation de ce que serait un &#8220;managed_kubernetes&#8221; selon le provider s\u00e9lectionn\u00e9 :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">r_infrastructure.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>module \"managed_kubernetes\" {\n  source = \".\/modules\/${var.provider}\/managed-kubernetes\"\n  \n  name = \"my-cluster\"\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/modules\/<\/span><span style=\"color: #F97583\">${<\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">provider<\/span><span style=\"color: #F97583\">}<\/span><span style=\"color: #9ECBFF\">\/managed-kubernetes&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;my-cluster&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous utilisez cette syntaxe, Terraform\/OpenTofu va tr\u00e8s rapidement vous indiquer qu&#8217;il n&#8217;est pas capable d&#8217;utiliser de variable dans son mot cl\u00e9s <code>source<\/code> !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Alors comment faire ?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seconde tentative avec l&#8217;ajout d&#8217;un module interm\u00e9diare dont l&#8217;int\u00e9r\u00eat est d&#8217;utiliser les ressources ad\u00e9quates, en fonction du provider<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"470\" src=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1-1024x470.png\" alt=\"Sch\u00e9ma similaire avec une \u00e9tape interm\u00e9diaire de d\u00e9tection du Cloud Provider et un module d'interface avant la ramification vers les modules OVH et OTC\" class=\"wp-image-709\" srcset=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1-1024x470.png 1024w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1-300x138.png 300w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1-768x353.png 768w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1-18x8.png 18w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-1.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">r_infrastructure.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>module \"managed_kubernetes\" {\n  source = \".\/modules\/managed-kubernetes\"\n  provider = var.provider # let's say `ovh` or `otc`\n  \n  name = \"my-cluster\"\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/modules\/managed-kubernetes&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  provider<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">provider <\/span><span style=\"color: #6A737D\"># let&#39;s say `ovh` or `otc`<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;my-cluster&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">modules\/managed-kubernetes\/main.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>variable \"name\" {\n  type = string\n  description = \"The cluster name.\"\n}\n\nvariable \"provider\" {\n  type = string\n  description = \"The Public Cloud provider name (`ovh` or `otc`).\"\n}\n\nmodule \"otc_managed_kubernetes\" {\n  source = \".\/otc\"\n  count  = var.provider == \"otc\" ? 1 : 0 # Nous ne voulons pas appeler le module si le provider choisi est \"ovh\"\n\n  name = var.name\n}\n\nmodule \"ovh_managed_kubernetes\" {\n  source = \".\/ovh\"\n  count  = var.provider == \"ovh\" ? 1 : 0 # Nous ne voulons pas appeler le module si le provider choisi est \"otc\"\n\n  name = var.name\n}\n\nlocals {\n  delegated_module = var.provider == \"ovh\" ? module.ovh_managed_kubernetes : module.otc_managed_kubernetes\n}\n\noutput \"cluster_id\" {\n  value = local.delegated_module&#91;0&#93;.cluster_id\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">variable<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;name&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  type<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  description<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;The cluster name.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">variable<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;provider&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  type<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  description<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;The Public Cloud provider name (`ovh` or `otc`).&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;otc_managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/otc&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  count<\/span><span style=\"color: #FFAB70\">  <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">provider <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;otc&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">?<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #6A737D\"># Nous ne voulons pas appeler le module si le provider choisi est &quot;ovh&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;ovh_managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/ovh&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  count<\/span><span style=\"color: #FFAB70\">  <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">provider <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;ovh&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">?<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\"> : <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #6A737D\"># Nous ne voulons pas appeler le module si le provider choisi est &quot;otc&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">locals<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  delegated_module<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">provider <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;ovh&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">?<\/span><span style=\"color: #E1E4E8\"> module<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">ovh_managed_kubernetes : module<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">otc_managed_kubernetes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">output<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;cluster_id&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  value<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">local<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">delegated_module&#91;<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">&#93;<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">cluster_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">modules\/managed-kubernetes\/otc\/main.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>variable \"name\" {\n  type = string\n  description = \"The cluster name.\"\n}\n\nresource \"opentelekomcloud_cce_cluster_v3\" \"cluster\" {\n  name = var.name\n}\n\noutput \"cluster_id\" {\n  value = opentelekomcloud_cce_cluster_v3.cluster.cluster_id\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">variable<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;name&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  type<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  description<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;The cluster name.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">resource<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;opentelekomcloud_cce_cluster_v3&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;cluster&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">output<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;cluster_id&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  value<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">opentelekomcloud_cce_cluster_v3<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">cluster<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">cluster_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">modules\/managed-kubernetes\/ovh\/main.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>variable \"name\" {\n  type = string\n  description = \"The cluster name.\"\n}\n\nresource \"ovh_cloud_project_kube\" \"cluster\" {\n  name = var.name\n}\n\noutput \"cluster_id\" {\n  value = ovh_cloud_project_kube.cluster.cluster_id\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">variable<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;name&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  type<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  description<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;The cluster name.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">resource<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;ovh_cloud_project_kube&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;cluster&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">var<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">output<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;cluster_id&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  value<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #E1E4E8\">ovh_cloud_project_kube<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">cluster<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">cluster_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9j\u00e0, nous constatons la &#8220;laideur&#8221; de l&#8217;impl\u00e9mentation, de part ces conditions et index \u00e0 utiliser. Mais au del\u00e0 de \u00e7a, pour revenir sur le paragraphe o\u00f9 nous d\u00e9crivons le fonctionnement de Terraform\/OpenTofu, la cr\u00e9ation d&#8217;un graphe de d\u00e9pendance dans ce contexte l\u00e0 ajoutera \u00e0 la fois le module <code>.\/modules\/managed-kubernetes\/otc<\/code> <strong>ET<\/strong> <code>.\/modules\/managed-kubernetes\/ovh<\/code> m\u00eame si l&#8217;un des deux n&#8217;est pas r\u00e9ellement utilis\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est la ligne de code <code>var.provider == \"ovh\" ? module.ovh_managed_kubernetes : module.otc_managed_kubernetes<\/code> qui en est la cause !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela implique que Terraform\/OpenTofu demandera des informations de connexions des deux providers bien que nous soyons dans un cas o\u00f9 seul un des deux est r\u00e9ellement appel\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Un_debut_de_solution\"><\/span>Un d\u00e9but de solution<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1018\" height=\"505\" src=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-2.png\" alt=\"Sch\u00e9ma d'un plan Terraform partag\u00e9 s\u00e9par\u00e9 en deux plans distincts (OVH et OTC), chacun menant \u00e0 ses propres modules\" class=\"wp-image-710\" srcset=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-2.png 1018w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-2-300x149.png 300w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-2-768x381.png 768w, https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/My-tf-plan-2-18x9.png 18w\" sizes=\"(max-width: 1018px) 100vw, 1018px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nous constatons \u00e0 tout cela qu&#8217;il est n\u00e9cessaire de s\u00e9parer a minima les plans selon le provider.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenTofu v1.9.0 vient ici nous aider un peu car cette derni\u00e8re version apporte <a href=\"https:\/\/opentofu.org\/docs\/intro\/whats-new\/#the-exclude-flag\" data-type=\"link\" data-id=\"https:\/\/opentofu.org\/docs\/intro\/whats-new\/#the-exclude-flag\">la fonctionnalit\u00e9 d&#8217;exclusions de ressources<\/a>. Sans cela, il faudrait totalement s\u00e9parer les plans dans deux dossiers distincts (car Terraform\/OpenTofu lit tous les fichiers .tf du dossier cibl\u00e9) jusqu&#8217;\u00e0 m\u00eame devoir s\u00e9parer, par exemple, en deux repositories diff\u00e9rents.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">r_ovh.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>module \"ovh_managed_kubernetes\" {\n  source = \".\/modules\/ovh\/managed-kubernetes\"\n  \n  name = \"my-cluster\"\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;ovh_managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/modules\/ovh\/managed-kubernetes&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;my-cluster&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">r_otc.tf<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>module \"otc_managed_kubernetes\" {\n  source = \".\/modules\/otc\/managed-kubernetes\"\n  \n  name = \"my-cluster\"\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">module<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">&quot;otc_managed_kubernetes&quot;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  source<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;.\/modules\/otc\/managed-kubernetes&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  name<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #9ECBFF\">&quot;my-cluster&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">HCL<\/span><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Puis, via le CLI, appeler :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#e1e4e833\" stroke=\"#e1e4e84d\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#e1e4e833\" stroke=\"#e1e4e84d\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#e1e4e833\" stroke=\"#e1e4e84d\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>$ tofu plan -exclude module.otc_managed_kubernetes<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">tofu<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">plan<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-exclude<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">module.otc_managed_kubernetes<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#24292e;color:#d3d7dd;font-size:12px;line-height:1;position:relative\">Bash<\/span><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"La_suite\"><\/span>La suite ?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tout \u00e7a nous am\u00e8ne \u00e0 une conclusion plut\u00f4t n\u00e9gative car je n&#8217;ai pas r\u00e9ussi \u00e0 atteindre l&#8217;objectif d\u00e9sir\u00e9. La maintenabilit\u00e9 est r\u00e9duite et la factorisation quasi nulle. Il s&#8217;agit l\u00e0 d&#8217;une limitation de Terraform\/OpenTofu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma tentative d\u2019adaption Terraform\/OpenTofu en structurant les modules pour s\u00e9lectionner dynamiquement les ressources en fonction du provider a \u00e9t\u00e9 vaine. Comme dit plus t\u00f4t, la nature m\u00eame du fonctionnement de Terraform\/OpenTofu, qui g\u00e9n\u00e8re un graphe de d\u00e9pendance global, a pos\u00e9 probl\u00e8me : m\u00eame si un provider n\u2019\u00e9tait pas utilis\u00e9, ses ressources \u00e9taient tout de m\u00eame prises en compte, rendant la factorisation difficile et impactant la maintenabilit\u00e9 du code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La rigidit\u00e9 du mod\u00e8le de d\u00e9pendances de Terraform\/OpenTofu emp\u00eache une s\u00e9paration efficace des configurations sans compromettre la maintenabilit\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenTofu v1.9.0 apporte une am\u00e9lioration avec la gestion des exclusions, mais ne r\u00e9sout pas enti\u00e8rement le probl\u00e8me. Cette exp\u00e9rience souligne la n\u00e9cessit\u00e9 d\u2019une \u00e9volution des outils d\u2019infrastructure-as-code vers une plus grande flexibilit\u00e9 pour mieux r\u00e9pondre aux enjeux du multi-cloud.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l&#8217;inverse ! Pr\u00e9-ambule Je suis utilisateur d&#8217;OpenTofu depuis l&#8217;annonce du changement de licence appliqu\u00e9e \u00e0 l&#8217;utilisation de Terraform. Cependant, ce qui est trait\u00e9 dans cet article impacte bien les deux solutions. Pour rappel, les r\u00e9centes lev\u00e9es de bouclier depuis l&#8217;application de la nouvelle licence d&#8217;utilisation&hellip;&nbsp;<a href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">Terraform\/OpenTofu m&#8217;ont fait perdre du temps<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":704,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[24],"tags":[18,26,25],"class_list":["post-700","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infra-as-code","tag-automatisation","tag-opentofu","tag-terraform"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Terraform\/OpenTofu m&#039;ont fait perdre du temps - \/mnt<\/title>\n<meta name=\"description\" content=\"Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l&#039;inverse ! Pr\u00e9-ambule Je suis utilisateur d&#039;OpenTofu depuis l&#039;annonce du changement de\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform\/OpenTofu m&#039;ont fait perdre du temps - \/mnt\" \/>\n<meta property=\"og:description\" content=\"Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l&#039;inverse ! Pr\u00e9-ambule Je suis utilisateur d&#039;OpenTofu depuis l&#039;annonce du changement de\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/\" \/>\n<meta property=\"og:site_name\" content=\"\/mnt\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-12T22:00:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-26T17:11:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Paul Rey\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Rey\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/\"},\"author\":{\"name\":\"Paul Rey\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/#\\\/schema\\\/person\\\/c1ab9da41528662641aeeaeae843ce24\"},\"headline\":\"Terraform\\\/OpenTofu m&#8217;ont fait perdre du temps\",\"datePublished\":\"2025-03-12T22:00:52+00:00\",\"dateModified\":\"2026-07-26T17:11:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/\"},\"wordCount\":1222,\"image\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.slash-mnt.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg\",\"keywords\":[\"Automatisation\",\"opentofu\",\"terraform\"],\"articleSection\":[\"infra-as-code\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/\",\"url\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/\",\"name\":\"Terraform\\\/OpenTofu m'ont fait perdre du temps - \\\/mnt\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.slash-mnt.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg\",\"datePublished\":\"2025-03-12T22:00:52+00:00\",\"dateModified\":\"2026-07-26T17:11:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/#\\\/schema\\\/person\\\/c1ab9da41528662641aeeaeae843ce24\"},\"description\":\"Disclaimer : Terraform\\\/OpenTofu me font plus gagner de temps que l'inverse ! Pr\u00e9-ambule Je suis utilisateur d'OpenTofu depuis l'annonce du changement de\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.slash-mnt.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.slash-mnt.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"Automatisation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/2025\\\/terraform-opentofu-mont-fait-perdre-du-temps\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.slash-mnt.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform\\\/OpenTofu m&rsquo;ont fait perdre du temps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/#website\",\"url\":\"https:\\\/\\\/www.slash-mnt.com\\\/\",\"name\":\"\\\/mnt\",\"description\":\"Your hiking guide to the Cloud\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.slash-mnt.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.slash-mnt.com\\\/#\\\/schema\\\/person\\\/c1ab9da41528662641aeeaeae843ce24\",\"name\":\"Paul Rey\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g\",\"caption\":\"Paul Rey\"},\"sameAs\":[\"https:\\\/\\\/www.slash-mnt.com\"],\"url\":\"https:\\\/\\\/www.slash-mnt.com\\\/en\\\/author\\\/prey\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Terraform\/OpenTofu m'ont fait perdre du temps - \/mnt","description":"Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l'inverse ! Pr\u00e9-ambule Je suis utilisateur d'OpenTofu depuis l'annonce du changement de","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/","og_locale":"en_GB","og_type":"article","og_title":"Terraform\/OpenTofu m'ont fait perdre du temps - \/mnt","og_description":"Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l'inverse ! Pr\u00e9-ambule Je suis utilisateur d'OpenTofu depuis l'annonce du changement de","og_url":"https:\/\/www.slash-mnt.com\/en\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/","og_site_name":"\/mnt","article_published_time":"2025-03-12T22:00:52+00:00","article_modified_time":"2026-07-26T17:11:41+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg","type":"image\/jpeg"}],"author":"Paul Rey","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Paul Rey","Estimated reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#article","isPartOf":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/"},"author":{"name":"Paul Rey","@id":"https:\/\/www.slash-mnt.com\/#\/schema\/person\/c1ab9da41528662641aeeaeae843ce24"},"headline":"Terraform\/OpenTofu m&#8217;ont fait perdre du temps","datePublished":"2025-03-12T22:00:52+00:00","dateModified":"2026-07-26T17:11:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/"},"wordCount":1222,"image":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg","keywords":["Automatisation","opentofu","terraform"],"articleSection":["infra-as-code"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/","url":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/","name":"Terraform\/OpenTofu m'ont fait perdre du temps - \/mnt","isPartOf":{"@id":"https:\/\/www.slash-mnt.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#primaryimage"},"image":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#primaryimage"},"thumbnailUrl":"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg","datePublished":"2025-03-12T22:00:52+00:00","dateModified":"2026-07-26T17:11:41+00:00","author":{"@id":"https:\/\/www.slash-mnt.com\/#\/schema\/person\/c1ab9da41528662641aeeaeae843ce24"},"description":"Disclaimer : Terraform\/OpenTofu me font plus gagner de temps que l'inverse ! Pr\u00e9-ambule Je suis utilisateur d'OpenTofu depuis l'annonce du changement de","breadcrumb":{"@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#primaryimage","url":"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg","contentUrl":"https:\/\/www.slash-mnt.com\/wp-content\/uploads\/2025\/03\/sryther_lautomatisation_et_lindustrialisation_dinfrastructure_666f4d4d-6822-4b24-8b1a-1a25e04d0200_1.jpg","width":1024,"height":1024,"caption":"Automatisation"},{"@type":"BreadcrumbList","@id":"https:\/\/www.slash-mnt.com\/2025\/terraform-opentofu-mont-fait-perdre-du-temps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.slash-mnt.com\/"},{"@type":"ListItem","position":2,"name":"Terraform\/OpenTofu m&rsquo;ont fait perdre du temps"}]},{"@type":"WebSite","@id":"https:\/\/www.slash-mnt.com\/#website","url":"https:\/\/www.slash-mnt.com\/","name":"\/mnt","description":"Your hiking guide to the Cloud","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.slash-mnt.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.slash-mnt.com\/#\/schema\/person\/c1ab9da41528662641aeeaeae843ce24","name":"Paul Rey","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8c4538cce7bce2418ec97551a4f349f8b7ca674bd1c466a0e3101e8c778ded60?s=96&d=mm&r=g","caption":"Paul Rey"},"sameAs":["https:\/\/www.slash-mnt.com"],"url":"https:\/\/www.slash-mnt.com\/en\/author\/prey\/"}]}},"_links":{"self":[{"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/posts\/700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/comments?post=700"}],"version-history":[{"count":11,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/posts\/700\/revisions"}],"predecessor-version":[{"id":809,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/posts\/700\/revisions\/809"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/media\/704"}],"wp:attachment":[{"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/media?parent=700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/categories?post=700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.slash-mnt.com\/en\/wp-json\/wp\/v2\/tags?post=700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}