<?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>Infrastructure as Code on Allen Ziegenfus</title><link>https://allenz.net/tags/infrastructure-as-code/</link><description>Recent content in Infrastructure as Code on Allen Ziegenfus</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 23 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://allenz.net/tags/infrastructure-as-code/index.xml" rel="self" type="application/rss+xml"/><item><title>When Go templates outgrow you: a typed-language alternative for Crossplane compositions</title><link>https://allenz.net/writing/when-go-templates-outgrow-you-a-typed-language-alternative-for-crossplane-compositions/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/when-go-templates-outgrow-you-a-typed-language-alternative-for-crossplane-compositions/</guid><description>When Crossplane&amp;rsquo;s Go-template compositions outgrow you — no types, no tests, global scope — KCL offers a typed, testable alternative. The multi-step pipeline architecture, and the bugs only end-to-end validation catches.</description></item><item><title>Test your guardrails: policy-as-code that you actually verify</title><link>https://allenz.net/writing/test-your-guardrails-policy-as-code-that-you-actually-verify/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/test-your-guardrails-policy-as-code-that-you-actually-verify/</guid><description>Policy-as-code that&amp;rsquo;s never tested usually fails open — it waves violations through and no one notices. How to test guardrails so they both deny when they must and pass when they must.</description></item><item><title>The admin stack that manages itself: bootstrapping a self-hosted IaC control plane</title><link>https://allenz.net/writing/the-admin-stack-that-manages-itself-bootstrapping-a-self-hosted-iac-control-plane/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/the-admin-stack-that-manages-itself-bootstrapping-a-self-hosted-iac-control-plane/</guid><description>If your IaC orchestrator is itself configured as code, you need an admin stack that provisions every stack — including itself. The elegant pattern, and the two bootstrap problems no amount of declarative code removes.</description></item><item><title>When Terraform owns a shared resource as if it were dedicated</title><link>https://allenz.net/writing/when-terraform-owns-a-shared-resource-as-if-it-were-dedicated/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/when-terraform-owns-a-shared-resource-as-if-it-were-dedicated/</guid><description>When a per-cluster Terraform module owns a project-global, shared resource, tearing down one cluster quietly breaks the others. Why resources with different lifecycles can&amp;rsquo;t share state — and the bootstrap-module fix.</description></item><item><title>Tearing down a managed-Kubernetes deployment without leaving a tail</title><link>https://allenz.net/writing/tearing-down-a-managed-kubernetes-deployment-without-leaving-a-tail/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/tearing-down-a-managed-kubernetes-deployment-without-leaving-a-tail/</guid><description>A field guide to deleting a GKE or EKS deployment cleanly when the cluster, the in-cluster GitOps/Crossplane layer, and Terraform all disagree about who owns cleanup — orphans, deletion order, and the stuck cases.</description></item><item><title>Applying Terraform from CI is a stateful problem wearing a stateless tool</title><link>https://allenz.net/writing/applying-terraform-from-ci-is-a-stateful-problem-wearing-a-stateless-tool/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/applying-terraform-from-ci-is-a-stateful-problem-wearing-a-stateless-tool/</guid><description>GitHub Actions is a near-perfect stateless task runner — and a poor fit for applying Terraform, which is stateful, collaborative, and approval-gated. The practical case, from running it both ways.</description></item><item><title>The Crossplane Object that synced green and changed nothing</title><link>https://allenz.net/writing/the-crossplane-object-that-synced-green-and-changed-nothing/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/the-crossplane-object-that-synced-green-and-changed-nothing/</guid><description>Everything&amp;rsquo;s green — Argo CD Synced, Crossplane Ready — but the change never took effect. The trap where Crossplane management policies without Update meet Kubernetes immutability.</description></item><item><title>A clone-and-go installer: GCP Cloud Shell tutorials + Infrastructure Manager</title><link>https://allenz.net/writing/a-clone-and-go-installer-gcp-cloud-shell-tutorials--infrastructure-manager/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://allenz.net/writing/a-clone-and-go-installer-gcp-cloud-shell-tutorials--infrastructure-manager/</guid><description>Turning a many-step platform install — APIs, IAM, Terraform, state, secrets — into a browser-only, guided, clone-and-go onboarding with GCP Cloud Shell tutorials and Infrastructure Manager.</description></item></channel></rss>