<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Pipelines and Pizza</title><description>Pipelines and Pizza shares practical DevOps and infrastructure insights on Terraform, Nutanix, Azure, and Ansible—covering everything from junior fundamentals to senior-level architecture strategies.</description><link>https://pipelinesandpizza.com/</link><item><title>RipGrep &gt; grep: Why You Should Switch</title><link>https://pipelinesandpizza.com/posts/devops/ripgrep-why-you-should-switch/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/ripgrep-why-you-should-switch/</guid><description>The repo audit behind Monday&apos;s post was one tool run a dozen ways. ripgrep&apos;s real advantage isn&apos;t speed — it&apos;s that by default it searches your source code and not your dependencies, and one flag turns it into an audit engine.</description><pubDate>Wed, 12 Aug 2026 14:30:00 GMT</pubDate><linkedinText>Monday I wrote about auditing this blog&apos;s own repo and finding 39 broken links plus a &apos;required&apos; field that 28 of 45 posts didn&apos;t have. Nobody found those by reading 45 files. One tool found them, run a dozen different ways. The pitch for ripgrep is usually speed, and that&apos;s the least interesting thing about it — the real win is that it searches your source code instead of your dependencies by default. On this repo that&apos;s 173 files instead of 19,563. Plus the one flag that turns a search tool into an audit tool: --files-without-match.</linkedinText></item><item><title>Mise en Place: Repo Hygiene Is an Operational Practice</title><link>https://pipelinesandpizza.com/posts/devops/mise-en-place-repo-hygiene/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/mise-en-place-repo-hygiene/</guid><description>Repo hygiene isn&apos;t tidiness — it&apos;s a chef&apos;s mise en place for your repository: this blog&apos;s own repo shipped 39 broken links and a &apos;required&apos; field 28 posts ignored, and here&apos;s the operational practice that fixes it for good.</description><pubDate>Mon, 10 Aug 2026 14:30:00 GMT</pubDate><linkedinText>I audited this blog&apos;s own repo last week and found 39 broken internal links that had been live for months, a &apos;required&apos; frontmatter field that 28 of 45 posts simply didn&apos;t have, and a reviewer confidently flagging intentional behavior as a bug — because the decision was never written down. None of it was carelessness. All of it was hygiene debt, compounding silently. This post opens a new series on treating repo hygiene the way a kitchen treats mise en place: not tidiness, an operational practice. Starting with the embarrassing audit findings, because you should never trust a hygiene sermon from someone who won&apos;t show you their own kitchen.</linkedinText></item><item><title>CODEOWNERS in 3 Minutes</title><link>https://pipelinesandpizza.com/posts/git/codeowners-in-3-minutes/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/codeowners-in-3-minutes/</guid><description>A CODEOWNERS file is a routing table for code review — last match wins, and it enforces nothing until one branch-protection checkbox says so. The two-minute setup and the four gotchas.</description><pubDate>Thu, 06 Aug 2026 14:30:00 GMT</pubDate><linkedinText>Wednesday minis — one sharp idea, three minutes, back to work. First up: the two things almost everyone gets wrong about CODEOWNERS. The file is a routing table where the LAST match wins, not the first — and without one specific branch-protection checkbox, the whole thing is just a suggestion box.</linkedinText></item><item><title>Tempo on Kubernetes: Distributed Tracing on Nutanix Objects</title><link>https://pipelinesandpizza.com/posts/observability/tempo-kubernetes-distributed-tracing-nutanix/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/tempo-kubernetes-distributed-tracing-nutanix/</guid><description>Grafana Tempo in distributed mode on Kubernetes with Nutanix Objects as the S3 backend — why we finally deployed the T in LGTM, the three-Alloy collector design, no-auth OTLP ingest with four compensating controls, and the DNS-CNAME HA pattern that deliberately breaks with our log dual-write.</description><pubDate>Mon, 03 Aug 2026 14:30:00 GMT</pubDate><linkedinText>Two months of silence, one interstate move, and a lot of cardboard boxes later — Pipelines and Pizza is back. And we&apos;re back with unfinished business: the LGTM series covered Loki, Grafana, and Mimir in depth, but Tempo only ever got cameo appearances. This post closes the loop. Distributed tracing on Nutanix Objects, why we run a THIRD Alloy just for traces, why our OTLP ingest has no auth on purpose, and the July incident where a pod upgrade silently threw away the cross-DC trace backlog we&apos;d built the whole HA design to protect.</linkedinText></item><item><title>First 100 Days of LGTM on Nutanix: What We Built, What We Got Wrong, What&apos;s Next</title><link>https://pipelinesandpizza.com/posts/observability/lgtm-nutanix-first-100-days-retrospective/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/lgtm-nutanix-first-100-days-retrospective/</guid><description>A hundred days into running the LGTM stack on Nutanix — what&apos;s actually deployed, the bugs that bit us, the surprises that didn&apos;t, and what&apos;s still on the roadmap. No fabricated war stories; every fix below is in our changelog.</description><pubDate>Fri, 29 May 2026 14:30:00 GMT</pubDate><linkedinText>Closing post in the LGTM-on-Nutanix series. We started the architecture in early February. It&apos;s now mid-May. A hundred days in is the right time to look back honestly: what&apos;s deployed, what bit us, what we&apos;d do differently if we were starting from scratch tomorrow. Drain catch-22 on stateful sets. Canal CNI DNAT breaking NetworkPolicy rules that use service CIDRs. Loki self-tracing disabled by an upstream dskit schema URL conflict. The 5M → 8M Mimir series cap bump. All from the changelog, not from a memory I haven&apos;t earned yet.</linkedinText></item><item><title>Dashboards That Actually Get Used: 118 Across 18 Folders, Organized by Domain</title><link>https://pipelinesandpizza.com/posts/observability/grafana-dashboards-that-actually-get-used/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/grafana-dashboards-that-actually-get-used/</guid><description>The dashboard set we maintain — 118 dashboards across 18 domain-organized folders, NetApp Harvest + Pure FlashArray + Nutanix multi-vendor storage section, ConfigMap-sidecar GitOps pattern, and the rules that keep the set from sprawling.</description><pubDate>Tue, 26 May 2026 14:30:00 GMT</pubDate><linkedinText>Part 9 of the LGTM-on-Nutanix series — dashboards. We run 118 of them across 18 domain-organized folders (NetApp has 42 on its own — Harvest gives you a lot). Every dashboard is a ConfigMap in Git, picked up by Grafana&apos;s sidecar pattern. This post covers the actual folder structure, the multi-vendor storage approach that gets NetApp + Pure + Nutanix into one view, and the lightweight rules we use to keep dashboards from sprawling.</linkedinText></item><item><title>Grafana 13 on CloudNativePG: The Real Upgrade Walkthrough</title><link>https://pipelinesandpizza.com/posts/observability/grafana-kubernetes-cloudnativepg-clone-upgrade/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/grafana-kubernetes-cloudnativepg-clone-upgrade/</guid><description>Running Grafana on Kubernetes backed by CloudNativePG instead of SQLite, plus the real Grafana 12.4.2 → 13.0.1 upgrade we ran last month, including the irreversible-moment that makes the pre-upgrade Postgres backup load-bearing.</description><pubDate>Fri, 22 May 2026 14:30:00 GMT</pubDate><linkedinText>Part 8 of the LGTM-on-Nutanix series — Grafana on Kubernetes with CloudNativePG as the backing database, and the real Grafana 12.4.2 → 13.0.1 upgrade we ran last month. The upgrade has an irreversible moment (the unified-storage migration runs on first 13.0 boot — after that, a downgraded 12.x only sees stale pre-migration data). That moment is what makes the pre-upgrade backup the rollback strategy.</linkedinText></item><item><title>Mimir on Kubernetes: 620K Active Series on Nutanix Objects</title><link>https://pipelinesandpizza.com/posts/observability/mimir-kubernetes-scalable-metrics-nutanix/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/mimir-kubernetes-scalable-metrics-nutanix/</guid><description>Deploying Grafana Mimir on Kubernetes in a deliberately lean microservices topology with Nutanix Objects as the S3 backend — the real config running ~620K active series at 365-day retention, including why three of our Mimir components run as singletons on purpose.</description><pubDate>Tue, 19 May 2026 14:30:00 GMT</pubDate><linkedinText>Part 7 of the LGTM-on-Nutanix series — Mimir. Real numbers: ~620K active series, 365-day retention, three ingester replicas, three queriers, and three components running as singletons on purpose. This post covers why we picked Mimir over Thanos for a net-new platform, the four memcached caches that make queries fast, and the ADR-028 reasoning behind keeping the compactor at one replica even when reviewers flagged it as a SPOF.</linkedinText></item><item><title>Loki in Production: Labels, Per-Stream Retention, and the LogQL Alerts We Run</title><link>https://pipelinesandpizza.com/posts/observability/loki-production-labels-logql-tenancy/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/loki-production-labels-logql-tenancy/</guid><description>The production side of Loki — the label set we run, the 14-rule per-stream retention table, the LogQL alerts we actually rely on (audit, syslog, firewall), and the ingestion-rate gotcha that bit us early.</description><pubDate>Fri, 15 May 2026 14:30:00 GMT</pubDate><linkedinText>Part 6 of the LGTM-on-Nutanix series — deploying Loki was the easy half. Running it is where the choices matter. This post covers the real label set, the 14-rule per-stream retention table we run (kube-audit 90d, switch syslog 365d, calico noise 30d, plus eleven more), the LogQL alerts that protect The Conveyor (cluster-admin binding, firewall deny spike, interface flap), and the ingestion-rate gotcha I tripped over.</linkedinText></item><item><title>Deploying Loki on Kubernetes: SimpleScalable on Nutanix Objects</title><link>https://pipelinesandpizza.com/posts/observability/loki-kubernetes-deployment/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/loki-kubernetes-deployment/</guid><description>Deploying Grafana Loki in SimpleScalable mode on Kubernetes with Nutanix Objects as the S3 backend — the real values we run, schema configuration, and why we picked SimpleScalable over Distributed.</description><pubDate>Tue, 12 May 2026 14:30:00 GMT</pubDate><linkedinText>Part 5 of the LGTM-on-Nutanix series: deploying Loki. Three write replicas, three read replicas, two backend replicas, all writing to Nutanix Objects via the S3 API. SimpleScalable mode — not Distributed — because we didn&apos;t need the operational complexity. Real values from production, including the pod anti-affinity rule we added after a drain catch-22 nearly took down our queries.</linkedinText></item><item><title>Alloy in Production: The DaemonSet Config Running The Conveyor&apos;s Observability</title><link>https://pipelinesandpizza.com/posts/observability/alloy-production-logs-metrics-nutanix/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/alloy-production-logs-metrics-nutanix/</guid><description>The real Alloy DaemonSet configuration running across fleet — pod logs, kube-audit, node metrics, kubelet, cAdvisor, etcd, apiserver, CoreDNS, CNPG, and synthetic probes — plus the production lessons that shaped it.</description><pubDate>Fri, 08 May 2026 14:30:00 GMT</pubDate><linkedinText>Last post I covered why we picked Alloy and how the three deployments fit together. This post is the actual DaemonSet config we run on the cluster — the one collecting pod logs and metrics for The Conveyor right now. It has bug fixes baked in for things you can only learn by running it: kube-audit entries that blow past Loki&apos;s 256KB limit, every DaemonSet pod trying to scrape every node, Alloy hardcoding its own service.name in traces. The real lessons are in the comments.</linkedinText></item><item><title>Grafana Alloy on Kubernetes: Three Deployments, One Collector</title><link>https://pipelinesandpizza.com/posts/observability/grafana-alloy-kubernetes-deployment/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/grafana-alloy-kubernetes-deployment/</guid><description>How we deploy Grafana Alloy on Kubernetes using three separate topologies — a DaemonSet for pod logs and node metrics, a Deployment with a MetalLB VIP for syslog and SNMP, and a Deployment for OTLP traces. Plus why Telegraf earned a permanent seat at the table.</description><pubDate>Tue, 05 May 2026 14:30:00 GMT</pubDate><linkedinText>Before this project our observability was basic SolarWinds. It told us when a server was down, never why. No log collection. No analytics. No correlation between a network blip and an app failure. Now we run three Alloy deployments across two data centers ingesting Kubernetes pod logs, Cisco switch syslog, NetFlow-grade telemetry, Windows EventLog — the works. Here is how we deployed it, why we split it three ways, and why Telegraf still gets a slice of the pie.</linkedinText></item><item><title>Nutanix Objects as the Storage Backend for Loki and Mimir</title><link>https://pipelinesandpizza.com/posts/observability/nutanix-objects-s3-backend-loki-mimir/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/nutanix-objects-s3-backend-loki-mimir/</guid><description>How we configured Nutanix Objects as the S3-compatible storage backend for Grafana Loki, Mimir, and Tempo — bucket architecture across two data centers, F5 GSLB for cross-DC HA, credential management with External Secrets Operator, and a dual-retention strategy that survives compactor mistakes.</description><pubDate>Fri, 01 May 2026 14:30:00 GMT</pubDate><linkedinText>Every component in our LGTM observability stack writes to object storage. Loki chunks, Mimir blocks, Tempo traces, Postgres backups — all of it lands on Nutanix Objects. Here&apos;s how we architected the storage layer across two data centers with per-DC buckets, F5 GSLB for HA, and a dual-retention strategy that keeps auditors happy. The setup was honestly smoother than expected.</linkedinText></item><item><title>Building an LGTM Observability Stack on Nutanix: Why We Did It and What It Looks Like</title><link>https://pipelinesandpizza.com/posts/observability/lgtm-stack-on-nutanix-architecture-overview/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/observability/lgtm-stack-on-nutanix-architecture-overview/</guid><description>Architecture overview of a self-hosted LGTM observability stack (Loki, Grafana, Tempo, Mimir) running on Nutanix — why we built it with zero software budget on recycled hardware, what each component does, and the honest trade-offs five months in.</description><pubDate>Tue, 28 Apr 2026 14:30:00 GMT</pubDate><linkedinText>We failed a DR exercise. Not because our systems were down — because we couldn&apos;t prove they were up. Dozens of vendor portals, no central logging, no way to know which jobs were actually succeeding. That was the moment I started building our own observability stack. Five months later, we&apos;re running LGTM on Nutanix with recycled hardware and zero software budget. Here&apos;s the architecture overview and the honest trade-offs we hit along the way.</linkedinText></item><item><title>Dependabot and Supply Chain Security</title><link>https://pipelinesandpizza.com/posts/git/dependabot-and-supply-chain-security/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/dependabot-and-supply-chain-security/</guid><description>Your dependencies have dependencies — here&apos;s how to keep them secure.</description><pubDate>Fri, 17 Apr 2026 14:30:00 GMT</pubDate></item><item><title>GitHub Actions for Terraform and Ansible</title><link>https://pipelinesandpizza.com/posts/git/github-actions-for-terraform-and-ansible/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-actions-for-terraform-and-ansible/</guid><description>Plan in the PR, apply on merge — GitHub Actions patterns for IaC.</description><pubDate>Fri, 10 Apr 2026 14:30:00 GMT</pubDate></item><item><title>GitHub Actions Reusable Workflows</title><link>https://pipelinesandpizza.com/posts/git/github-actions-reusable-workflows/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-actions-reusable-workflows/</guid><description>Stop copying YAML — reusable workflows keep your pipelines clean.</description><pubDate>Fri, 03 Apr 2026 14:30:00 GMT</pubDate></item><item><title>Git Stash, Cherry-Pick, and Bisect</title><link>https://pipelinesandpizza.com/posts/git/git-stash-cherry-pick-and-bisect/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-stash-cherry-pick-and-bisect/</guid><description>Three Git commands that will save your day — stash, cherry-pick, and bisect.</description><pubDate>Fri, 27 Mar 2026 14:30:00 GMT</pubDate><linkedinText>You&apos;re halfway through refactoring a Terraform module when Slack lights up — production is broken. You need to drop everything and push a fix right now. What happens to the work on your screen? Three Git commands handle exactly this: stash, cherry-pick, and bisect.</linkedinText></item><item><title>Git Tags and Release Management</title><link>https://pipelinesandpizza.com/posts/git/git-tags-and-release-management/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-tags-and-release-management/</guid><description>Stop guessing what&apos;s in production — tags and releases bring order to chaos.</description><pubDate>Fri, 20 Mar 2026 14:30:00 GMT</pubDate><linkedinText>&apos;What version is running in production right now?&apos; Three engineers on the incident call gave three different answers. One pointed at a commit hash, one said a branch name, and the third said &apos;whatever we deployed last Thursday.&apos; That&apos;s the problem Git tags solve.</linkedinText></item><item><title>PR Templates and Issue Templates</title><link>https://pipelinesandpizza.com/posts/git/pr-templates-and-issue-templates/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/pr-templates-and-issue-templates/</guid><description>Make every PR and issue consistent — templates your team will actually use.</description><pubDate>Fri, 13 Mar 2026 15:00:00 GMT</pubDate><linkedinText>A teammate&apos;s PR description: &apos;fixed stuff.&apos; A bug report from the week before: &apos;it&apos;s broken.&apos; These aren&apos;t bad engineers — they&apos;re busy engineers with no structure to follow. The fix is dead simple: templates. Here&apos;s how to set them up so every PR and issue is actually useful.</linkedinText></item><item><title>Branch Protection Rules and PR Workflows</title><link>https://pipelinesandpizza.com/posts/git/branch-protection-rules-pr-workflows/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/branch-protection-rules-pr-workflows/</guid><description>Your code deserves a bouncer — here&apos;s how branch protection keeps bad merges out.</description><pubDate>Fri, 06 Mar 2026 14:30:00 GMT</pubDate><linkedinText>A teammate force-pushed to main on a Friday afternoon. Three people&apos;s work vanished from history and we spent the weekend piecing things back together. Monday morning I set up branch protection rules. It took fifteen minutes. The weekend it would have saved us? Priceless.</linkedinText></item><item><title>Version Control for Infrastructure Code</title><link>https://pipelinesandpizza.com/posts/git/version-control-for-infrastructure-code/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/version-control-for-infrastructure-code/</guid><description>Apply Git workflows and branching strategies to your IaC projects.</description><pubDate>Tue, 03 Mar 2026 14:30:00 GMT</pubDate><linkedinText>Someone on the team overwrote my subnet changes with an older config on a Friday. We didn&apos;t find out until Monday when a production service went down. No history, no audit trail, no rollback. That&apos;s when I stopped treating infrastructure files like documents and started treating them like code.</linkedinText></item><item><title>GitHub CODEOWNERS: Who Owns What in Your Repo</title><link>https://pipelinesandpizza.com/posts/git/github-codeowners-who-owns-what/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-codeowners-who-owns-what/</guid><description>Stop guessing who should review — let CODEOWNERS handle it.</description><pubDate>Fri, 27 Feb 2026 14:30:00 GMT</pubDate><linkedinText>A teammate&apos;s PR touched Terraform modules, Ansible roles, and a CI pipeline. It sat for two days because nobody knew whose review it needed. The fix? A CODEOWNERS file — 20 minutes of setup, and we never had that problem again.</linkedinText></item><item><title>GitHub Actions and Job Scheduling, Part 3: The Migration</title><link>https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-migration/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-migration/</guid><description>Real workflow examples for PowerShell, Ansible, and Packer — plus the incremental migration approach that kept everything running.</description><pubDate>Wed, 25 Feb 2026 15:00:00 GMT</pubDate></item><item><title>GitHub Actions and Job Scheduling, Part 2: The Solution</title><link>https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-solution/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-solution/</guid><description>Docker-based self-hosted runners, vendor containers, and cron schedules in YAML. Here&apos;s the architecture that replaced hundreds of scattered jobs.</description><pubDate>Mon, 23 Feb 2026 12:30:00 GMT</pubDate></item><item><title>GitHub Actions and Job Scheduling, Part 1: The Problem</title><link>https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-problem/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-actions-job-scheduling-the-problem/</guid><description>Scattered cron jobs, no visibility, and a prayer that things just work. Here&apos;s the job scheduling mess we inherited and why it had to change.</description><pubDate>Fri, 20 Feb 2026 15:00:00 GMT</pubDate></item><item><title>Nutanix REST API Fundamentals</title><link>https://pipelinesandpizza.com/posts/nutanix/nutanix-rest-api-fundamentals/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/nutanix/nutanix-rest-api-fundamentals/</guid><description>Everything in Nutanix is an API call. Learn the fundamentals of Prism Central and Prism Element REST APIs with practical curl examples.</description><pubDate>Tue, 03 Feb 2026 15:00:00 GMT</pubDate></item><item><title>Managing Large Git Repositories: LFS, Partial Clone, and Sparse Checkout</title><link>https://pipelinesandpizza.com/posts/git/git-large-repos-lfs-sparse-checkout/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-large-repos-lfs-sparse-checkout/</guid><description>Tame large repositories with Git LFS, partial clones, and sparse checkouts for monorepos.</description><pubDate>Fri, 30 Jan 2026 15:00:00 GMT</pubDate></item><item><title>Git Submodules: Managing Shared Code Across Repos</title><link>https://pipelinesandpizza.com/posts/git/git-submodules-managing-shared-code/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-submodules-managing-shared-code/</guid><description>Use Git submodules to share infrastructure code across repositories and avoid common pitfalls.</description><pubDate>Tue, 27 Jan 2026 15:00:00 GMT</pubDate></item><item><title>GitHub Forks Explained</title><link>https://pipelinesandpizza.com/posts/git/github-forks-explained/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/github-forks-explained/</guid><description>What&apos;s a fork, when should you use one, and how is it different from a clone? A quick guide.</description><pubDate>Sun, 25 Jan 2026 15:00:00 GMT</pubDate></item><item><title>Git Hooks: Automate Code Quality Before It Hits the Repo</title><link>https://pipelinesandpizza.com/posts/git/git-hooks-automate-code-quality/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-hooks-automate-code-quality/</guid><description>Stop reviewing formatting issues. Use Git hooks to enforce code standards automatically.</description><pubDate>Sat, 24 Jan 2026 15:00:00 GMT</pubDate></item><item><title>Nutanix AHV vs ESXi: Making the Choice</title><link>https://pipelinesandpizza.com/posts/nutanix/nutanix-ahv-vs-esxi-making-the-choice/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/nutanix/nutanix-ahv-vs-esxi-making-the-choice/</guid><description>A practical comparison of Nutanix AHV and VMware ESXi — architecture differences, feature parity, migration considerations, and how to decide which hypervisor fits your environment.</description><pubDate>Wed, 07 Jan 2026 14:00:00 GMT</pubDate></item><item><title>Q1 Recap: Building the DevOps Foundation</title><link>https://pipelinesandpizza.com/posts/devops/monthly-recap-q1-foundations/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/monthly-recap-q1-foundations/</guid><description>Looking back at our first quarter — Git fundamentals, Ansible automation, Terraform basics, and Azure connectivity. What we learned and where we&apos;re headed next.</description><pubDate>Wed, 17 Dec 2025 14:00:00 GMT</pubDate></item><item><title>Connecting Terraform to Azure</title><link>https://pipelinesandpizza.com/posts/terraform/connecting-terraform-to-azure/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/terraform/connecting-terraform-to-azure/</guid><description>A step-by-step guide for configuring Terraform to deploy infrastructure to Azure using the AzureRM provider, including authentication methods and deployment workflows.</description><pubDate>Wed, 10 Dec 2025 14:00:00 GMT</pubDate></item><item><title>Azure for DevOps Engineers: Getting Started</title><link>https://pipelinesandpizza.com/posts/azure/azure-for-devops-engineers-getting-started/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/azure/azure-for-devops-engineers-getting-started/</guid><description>A practical introduction to Microsoft Azure for DevOps engineers — understanding the account hierarchy, core services, networking, identity, and automation with Terraform.</description><pubDate>Wed, 03 Dec 2025 14:00:00 GMT</pubDate></item><item><title>Terraform Variables and Outputs Explained</title><link>https://pipelinesandpizza.com/posts/terraform/terraform-variables-and-outputs-explained/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/terraform/terraform-variables-and-outputs-explained/</guid><description>A deep dive into Terraform variables, locals, and outputs — the building blocks that make your infrastructure code reusable and maintainable.</description><pubDate>Wed, 26 Nov 2025 14:00:00 GMT</pubDate></item><item><title>Terraform Basics: Providers, Resources, and State</title><link>https://pipelinesandpizza.com/posts/terraform/terraform-basics-providers-resources-state/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/terraform/terraform-basics-providers-resources-state/</guid><description>Master the foundational concepts of Terraform — providers, resources, variables, outputs, and state — to build reproducible infrastructure from day one.</description><pubDate>Wed, 12 Nov 2025 14:00:00 GMT</pubDate></item><item><title>Managing Nutanix with Terraform: Automating Your Private Cloud</title><link>https://pipelinesandpizza.com/posts/nutanix/managing-nutanix-with-terraform/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/nutanix/managing-nutanix-with-terraform/</guid><description>A practical guide to automating Nutanix infrastructure with Terraform — provider setup, VM deployment, and real-world patterns.</description><pubDate>Mon, 20 Oct 2025 14:00:00 GMT</pubDate></item><item><title>Infrastructure as Code: What, Why, and How</title><link>https://pipelinesandpizza.com/posts/devops/infrastructure-as-code-what-why-and-how/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/infrastructure-as-code-what-why-and-how/</guid><description>Learn the fundamentals of Infrastructure as Code (IaC), why it matters, and how to get started with modern tools like Terraform and Ansible.</description><pubDate>Wed, 15 Oct 2025 15:00:00 GMT</pubDate></item><item><title>Ansible for Beginners: Improving Patching with Ansible</title><link>https://pipelinesandpizza.com/posts/ansible/ansible-for-beginners-improving-patching/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/ansible/ansible-for-beginners-improving-patching/</guid><description>Beginner-friendly intro to Ansible with a complete, safe workflow for monthly server patching—rolling updates, reboots, dry-runs, and simple reporting.</description><pubDate>Mon, 06 Oct 2025 15:00:00 GMT</pubDate></item><item><title>Ansible for Beginners: The Fastest Way to Automate Configs</title><link>https://pipelinesandpizza.com/posts/ansible/ansible-for-beginners-automate-configs/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/ansible/ansible-for-beginners-automate-configs/</guid><description>A practical beginner&apos;s guide to Ansible — from first install to your first real playbook, with examples that go beyond &apos;install Nginx.&apos;</description><pubDate>Wed, 10 Sep 2025 14:00:00 GMT</pubDate></item><item><title>Git Branching Strategies for Fast-Moving Teams</title><link>https://pipelinesandpizza.com/posts/git/git-branching-strategies-for-fast-moving-teams/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-branching-strategies-for-fast-moving-teams/</guid><description>Learn practical Git branching strategies for fast-paced teams. We&apos;ll compare GitFlow, Trunk-Based Development, and Feature Branching—plus share tips for review workflows and infrastructure code.</description><pubDate>Thu, 28 Aug 2025 15:00:00 GMT</pubDate></item><item><title>My Favorite Tools for IAC &amp; DevOps Success</title><link>https://pipelinesandpizza.com/posts/devops/favorite-tools-for-devops-success/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/favorite-tools-for-devops-success/</guid><description>The tools, extensions, and workflows that actually make a difference in my day-to-day DevOps work — from editor setup to IaC linting.</description><pubDate>Mon, 25 Aug 2025 14:00:00 GMT</pubDate></item><item><title>Rethinking the Cloud Debate: It&apos;s Not Which Provider—It&apos;s What Cloud Really Means</title><link>https://pipelinesandpizza.com/posts/strategy/cloud-strategy-management-philosophy/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/strategy/cloud-strategy-management-philosophy/</guid><description>Most cloud strategies focus on provider choice and migration, but the real question is how you define and manage &apos;cloud&apos; as a philosophy—enabling true flexibility, governance, and resilience across environments.</description><pubDate>Tue, 19 Aug 2025 13:00:00 GMT</pubDate></item><item><title>Git Basics Every DevOps Engineer Should Know</title><link>https://pipelinesandpizza.com/posts/git/git-basics-every-devops-engineer-should-know/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/git/git-basics-every-devops-engineer-should-know/</guid><description>A practical Git tutorial for DevOps engineers — from basic commands to workflow tips, with code examples you can try today.</description><pubDate>Mon, 18 Aug 2025 15:00:00 GMT</pubDate></item><item><title>Terraform vs. PowerShell &amp; Ansible: Thinking in Orders not Recipes</title><link>https://pipelinesandpizza.com/posts/devops/terraform-vs-powershell-ansible-declarative-vs-imperative/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/terraform-vs-powershell-ansible-declarative-vs-imperative/</guid><description>How to consider Terraform&apos;s declarative model, how it differs from process/script-driven tools like PowerShell or Ansible.</description><pubDate>Thu, 14 Aug 2025 15:00:00 GMT</pubDate></item><item><title>The DevOps Career Path: From Junior to Senior</title><link>https://pipelinesandpizza.com/posts/career/devops-career-path-junior-to-senior/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/career/devops-career-path-junior-to-senior/</guid><description>If I had to start my DevOps career over today, here&apos;s the roadmap I&apos;d follow to go from junior engineer to senior-level DevOps professional.</description><pubDate>Tue, 12 Aug 2025 13:00:00 GMT</pubDate></item><item><title>Welcome to Pipelines and Pizza</title><link>https://pipelinesandpizza.com/posts/devops/welcome-to-pipelines-and-pizza/</link><guid isPermaLink="true">https://pipelinesandpizza.com/posts/devops/welcome-to-pipelines-and-pizza/</guid><description>Kickoff post for my new technical blog — Terraform, Kubernetes, Nutanix, Azure, Ansible, and the journey from junior to senior DevOps engineer.</description><pubDate>Fri, 08 Aug 2025 15:00:00 GMT</pubDate></item></channel></rss>