<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Automation on Tom Meurs</title>
    <link>https://tommeurs.nl/en/tags/automation/</link>
    <description>Recent content in Automation on Tom Meurs</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© Tom Meurs</copyright>
    <lastBuildDate>Sat, 30 May 2026 19:45:00 +0100</lastBuildDate>
    <atom:link href="https://tommeurs.nl/en/tags/automation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Infrastructure as Code for People Who Need to Understand</title>
      <link>https://tommeurs.nl/en/posts/infrastructure-as-code-control/</link>
      <pubDate>Sat, 30 May 2026 19:45:00 +0100</pubDate>
      <guid>https://tommeurs.nl/en/posts/infrastructure-as-code-control/</guid>
      <description>&lt;p&gt;Someone opens a cloud console, clicks through a wizard, accepts a few defaults, and a resource appears. The dashboard goes green and everyone moves on. That&amp;rsquo;s still how a lot of infrastructure gets built in 2026, and I&amp;rsquo;ve built some of it that way myself.&lt;/p&gt;&#xA;&lt;p&gt;I can&amp;rsquo;t work like that for long. When I click a button and infrastructure appears, it feels borrowed. I want the configuration written down somewhere I can read it back, and I want to know why something exists, not only that it exists. The console gives me a green tick. It doesn&amp;rsquo;t give me any of that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cert-manager: Automatic TLS Certificates in Kubernetes</title>
      <link>https://tommeurs.nl/en/posts/cert-manager-kubernetes-tls/</link>
      <pubDate>Sun, 12 Apr 2026 21:38:00 +0100</pubDate>
      <guid>https://tommeurs.nl/en/posts/cert-manager-kubernetes-tls/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; cert-manager watches Certificate resources, fetches the certificate from Let&amp;rsquo;s Encrypt, your own CA or Vault, stores it in a Secret and renews it 30 days before it expires. I run one DNS-01 ClusterIssuer through Cloudflare and one wildcard certificate, copy that Secret into the namespaces that need it, and let two Prometheus alerts tell me when a renewal is stuck. Nothing left to remember.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For years my certificates renewed the way most people&amp;rsquo;s do. A calendar reminder, a manual &lt;code&gt;certbot&lt;/code&gt; run, and the hope that I&amp;rsquo;d get to it before the thing expired. It worked, right up to the morning a service started throwing cert errors at me and I had no idea why. The renewal cron had been failing for weeks. Quietly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working with an AuDHD brain: why I automate everything</title>
      <link>https://tommeurs.nl/en/posts/working-with-audhd-brain/</link>
      <pubDate>Sat, 27 Dec 2025 14:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/en/posts/working-with-audhd-brain/</guid>
      <description>&lt;p&gt;For a long time I thought the problem was me.&lt;/p&gt;&#xA;&lt;p&gt;I have &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Autism combined with ADHD. The author has the inattentive presentation of ADHD, and writes about what that means for infrastructure work rather than about the diagnosis.&#34;&gt;AuDHD&lt;/span&gt;&#xA;, autism and ADHD together. The ADHD is ADHD-PI, the inattentive kind, without the hyperactivity most people picture when they hear the word. For years I treated the whole thing as a defect I&amp;rsquo;d train away. I bought the planners. I read the productivity books. Every week I told myself that Monday I&amp;rsquo;d finally be disciplined.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kyverno Policies: Governance as Code for Kubernetes</title>
      <link>https://tommeurs.nl/en/posts/kyverno-policies-governance/</link>
      <pubDate>Mon, 14 Jul 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/en/posts/kyverno-policies-governance/</guid>
      <description>&lt;p&gt;I used to keep a wiki page titled &amp;ldquo;Cluster conventions&amp;rdquo;. Resource limits on everything. No &lt;code&gt;:latest&lt;/code&gt; tags. No deploys in the &lt;code&gt;default&lt;/code&gt; namespace. It was a good page. Nobody read it. Six months in, half the cluster broke those rules and I only found out when something fell over.&lt;/p&gt;&#xA;&lt;p&gt;A rule that lives in a doc is a suggestion. A rule the API server refuses to accept is governance. That gap is the whole reason this post exists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Semantic Versioning with GitLab CI</title>
      <link>https://tommeurs.nl/en/posts/semantic-versioning-gitlab/</link>
      <pubDate>Tue, 27 May 2025 19:44:00 +0200</pubDate>
      <guid>https://tommeurs.nl/en/posts/semantic-versioning-gitlab/</guid>
      <description>&lt;p&gt;Picture the end state first. You merge a branch to main, walk away to get coffee, and by the time you&amp;rsquo;re back the project has a new version tag, a fresh changelog entry, and a GitLab release with notes written from your commits. Nobody decided &amp;ldquo;is this 1.4.0 or 1.3.5?&amp;rdquo; because nobody had to. The version fell out of the work itself.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s where I want to get to in this post. I run a self-hosted GitLab and I do not want versioning to be a thing I think about. A version number that someone picks by hand is a tiny black box: it depends on whether that person remembered the rules, was paying attention, and agreed with everyone else about what counts as a breaking change. I would rather the number be a consequence of the commits, something I can inspect and reproduce.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
