<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>IaC on Valérian Pyckaert</title>
    <link>https://valerian-pyckaert.dev/tags/iac/</link>
    <description>Recent content in IaC on Valérian Pyckaert</description>
    <image>
      <title>Valérian Pyckaert</title>
      <url>https://valerian-pyckaert.dev/images/default-cover.svg</url>
      <link>https://valerian-pyckaert.dev/images/default-cover.svg</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 21 Jun 2026 19:00:00 +0200</lastBuildDate>
    <atom:link href="https://valerian-pyckaert.dev/tags/iac/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Forge Infra - Améliorations et bonnes pratiques</title>
      <link>https://valerian-pyckaert.dev/posts/the-forge-infra-improved/</link>
      <pubDate>Sun, 21 Jun 2026 19:00:00 +0200</pubDate>
      <guid>https://valerian-pyckaert.dev/posts/the-forge-infra-improved/</guid>
      <description>Amélioration du repo Terraform du projet TheForge en mode GitOps</description>
      <content:encoded><![CDATA[<p>J&rsquo;ai dernièrement publié une série d&rsquo;articles <code>TheForge</code> où l&rsquo;objectif était de monter une stack Kubernetes complète en mode GitOps.
Par souci de facilité j&rsquo;ai choisi d&rsquo;aller à l&rsquo;essentiel en évitant de rentrer dans les détails de chaque outil.</p>
<p>J&rsquo;ai aussi volontairement omis certaines bonnes pratiques qui auraient pu rendre la stack plus robuste, plus performante ou plus sécurisée.</p>
<p>A présent, j&rsquo;ai un peu plus de temps, je vais reprendre cette série pour améliorer la stack et corriger les oublis.</p>
<h2 id="un-onboarding-plus-simple">Un onboarding plus simple</h2>
<p>La stack étant un clone d&rsquo;un repo proposé par HashiCorp, il n&rsquo;y a qu&rsquo;une configuration minimale pour que la stack fonctionne (en même temps c&rsquo;est ce qu&rsquo;on lui demande &hellip;).</p>
<p>Ici nous allons adopter quelques bonnes pratiques  pour rendre l&rsquo;onboarding plus simple et plus rapide pour un nouvel arrivant ou pour reprendre la main sur le repo après plusieurs années d&rsquo;abandon.</p>
<h3 id="ajout-dun-makefile-pour-simplifier-les-commandes">Ajout d&rsquo;un Makefile pour simplifier les commandes</h3>
<p>Je suis un peu paresseux et je trouve les commandes terraform assez pénibles à taper, en solo j&rsquo;utilise beaucoup d&rsquo;alias pour me simplifier la vie.
En équipe il est préférable d&rsquo;avoir un moyen uniformisé pour centraliser les commandes et éviter les drifts de configuration, j&rsquo;ai choisi ici d&rsquo;utiliser un <code>Makefile</code>.</p>
<p><strong>Installation</strong></p>
<p><a href="https://gnuwin32.sourceforge.net/packages/make.htm">Page officielle de Make</a></p>
<p>Sinon :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">scoop install main/make <span class="c1">#Windows</span>
</span></span><span class="line"><span class="cl">brew install make <span class="c1">#MacOS</span>
</span></span><span class="line"><span class="cl">make --version
</span></span></code></pre></div><p>Ensuite créez un fichier <code>Makefile</code> à la racine du repo et ajoutez-y les commandes terraform que vous utilisez le plus souvent.</p>
<p><strong>Exemple minimal</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-makefile" data-lang="makefile"><span class="line"><span class="cl"><span class="nv">TFVARS_FILE</span> <span class="o">:=</span> terraform.tfvars
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">.PHONY</span><span class="o">:</span> <span class="n">init</span> <span class="n">validate</span> <span class="n">fmt</span> <span class="n">plan</span> <span class="n">apply</span> <span class="n">destroy</span> <span class="n">output</span> <span class="n">clean</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">install</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">	scoop install terraform
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">init</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">	terraform init
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">validate</span><span class="o">:</span> <span class="n">init</span>
</span></span><span class="line"><span class="cl">	terraform validate
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">plan</span><span class="o">:</span> <span class="n">init</span>
</span></span><span class="line"><span class="cl">	terraform plan -var-file<span class="o">=</span><span class="k">$(</span>TFVARS_FILE<span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">apply</span><span class="o">:</span> <span class="n">init</span>
</span></span><span class="line"><span class="cl">	terraform apply -var-file<span class="o">=</span><span class="k">$(</span>TFVARS_FILE<span class="k">)</span>
</span></span></code></pre></div><p><em>Notez ici la présence de la commande <code>install</code> qui permet d&rsquo;installer terraform sur votre machine.</em></p>
<p><strong>Utilisation</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make install
</span></span><span class="line"><span class="cl">make plan
</span></span><span class="line"><span class="cl">make apply
</span></span></code></pre></div><p>Vous pouvez trouver un exemple complet dans le repo <a href="https://github.com/Bernedotcom2312/theforge-infra/blob/main/Makefile">TheForge</a>
Si vous préférez le <code>yaml</code> vous pouvez aussi utiliser <a href="https://taskfile.dev/#/">Task</a> qui fonctionne de la même manière.</p>
<h3 id="mise-à-jour-du-readme">Mise à jour du README</h3>
<p>C&rsquo;est LE point d&rsquo;entrée pour un nouvel arrivant sur le projet. Il est donc important de le tenir à jour et de le rendre le plus clair possible.
Je me suis focalisé sur les éléments primordiaux :</p>
<ul>
<li>Pre-requis
<ul>
<li>Outils à installer (terraform, kubectl, helm, &hellip;)</li>
<li>Accès aux différents comptes cloud (AWS, GCP, Azure, &hellip;)</li>
</ul>
</li>
<li>Architecture
<ul>
<li>Diagramme d&rsquo;architecture</li>
<li>Description des différents composants et de leurs interactions</li>
</ul>
</li>
<li>Usage
<ul>
<li>Comment installer le nécessaire pour le repo</li>
<li>Comment appliquer les changements</li>
</ul>
</li>
</ul>
<p>La liste est bien entendu exhaustive mais il s&rsquo;agit d&rsquo;un bon début.</p>
<p><img alt="Readme Infra Terraform" loading="lazy" src="/the-forge-infra-readme.png"></p>
<h2 id="une-boucle-de-feedback-plus-rapide">Une boucle de feedback plus rapide</h2>
<p>Une fois que vous avez installer l&rsquo;essentiel et que vous vous êtes familiarisé avec la stack, il est temps de passer à l&rsquo;étape suivante : améliorer la boucle de feedback pour gagner du temps et éviter les erreurs.</p>
<h3 id="pre-commit--le-dernier-garde-fou-avant-la-ci">Pre-commit : le dernier garde fou avant la CI</h3>
<p>J&rsquo;affectionne particulièrement <a href="https://pre-commit.com/">pre-commit</a>, un outil qui permet d&rsquo;exécuter des hooks avant chaque commit et qui est très pratique pour vérifier la qualité du code, le formatage, la sécurité, etc.</p>
<p>Pour l&rsquo;installer je m&rsquo;appuie sur mon Makefile en rajoutant la configuration suivante :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-makefile" data-lang="makefile"><span class="line"><span class="cl"><span class="nf">install</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">	scoop install terraform
</span></span><span class="line"><span class="cl">	pip install pre-commit
</span></span><span class="line"><span class="cl">	pre-commit install
</span></span></code></pre></div><h3 id="mon-choix-doutils-pour-le-pre-commit">Mon choix d&rsquo;outils pour le pre-commit</h3>
<p>J&rsquo;aime beaucoup m&rsquo;appuyer sur <a href="https://github.com/antonbabenko/pre-commit-terraform">pre-commit-terraform</a> qui proposent une série de hooks pré-configurés pour vérifier la qualité du code, le formatage, la sécurité, etc.</p>
<p><strong>Utilisation</strong></p>
<p><em>.precommit-config.yaml</em></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="w">  </span><span class="nt">repo</span><span class="p">:</span><span class="w"> </span><span class="l">https://github.com/antonbabenko/pre-commit-terraform</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">rev</span><span class="p">:</span><span class="w"> </span><span class="l">v1.106.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">hooks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">terraform_fmt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">terraform_validate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">terraform_tflint</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">terraform_checkov</span><span class="w">
</span></span></span></code></pre></div><p>Ici l&rsquo;idée est d&rsquo;optimiser les étapes pour que le développeur puisse avoir un feedback rapide sur son code avant de pousser ses changements vers la CI/CD et d&rsquo;aller plus loin dans le process de développement.
On détecte les erreurs le plus tôt possible pour éviter de perdre du temps et de l&rsquo;énergie à corriger des erreurs qui auraient pu être évitées.</p>
<p>Voici typiquement un scénario GitOps approprié :</p>
<pre class="mermaid">
  flowchart TD
    A[Changement locaux] --&gt;|commit| B[Validation avec pre-commit]
    B --&gt; |push git + PR| C[Revue de code + CI/CD]
    C --&gt;|merge| D[Application des changements sur le cluster]
</pre>

<p><strong>Les hooks</strong></p>
<p>La stratégie peut varier en fonction de l&rsquo;équipe et du projet, mais voici quelques hooks que j&rsquo;utilise personnellement pour mes projets Terraform :</p>
<ul>
<li><code>terraform_fmt</code>: pour formater le code Terraform</li>
<li><code>terraform_validate</code>: pour valider la syntaxe et la structure du code Terraform</li>
<li><code>tflint</code>: pour détecter les erreurs et les problèmes de style dans le code Terraform</li>
<li><code>checkov</code>: pour détecter les problèmes de sécurité dans le code Terraform</li>
</ul>
<p><em>N&rsquo;hésitez pas à consulter la liste des hooks disponibles sur le repo pre-commit-terraform.</em></p>
<h2 id="conclusion">Conclusion</h2>
<p>Dans cet article nous avons fait un pas supplémentaire vers une implémentation state of the art de GitOps dans un repository Terraform.
Dans la prochaine partie nous allons nous intéresser à la CI/CD.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
