Blog

Check out my latest blog posts below. 👇

Checking Out Code Committed Within the Same GitHub Actions Workflow Run

When using GitHub Actions, we often include steps that use Git to check out the code of the repository, make some changes to the code, and then commit these changes back to the repo. Additional steps subsequently act upon these changes within the same workflow run. For example, appending auto-generated release notes to a CHANGELOG.md file and committing it to the repo, to later bundle the changelog with release artifacts. Another example is using a workflow that periodically uses a linter to clean up the code base. Simple enough, right?

Read more >

Use PowerShell to Request Quotes for Azure Reservations

Over the weekend, I was on a quest to find the cheapest available Azure Virtual Machine to house my Azure Kubernetes Service cluster. I previously wrote about optimizing storage cost with Azure Kubernetes Service (AKS), where I talk about the importance of selecting VMs that support ephemeral OS disks. But what VM type and region should I choose? Searching through reservation offers in the Azure Portal turned out to be tedious. This time, I’ll demonstrate how to find the best offers using PowerShell and export the results to a CSV file.

Read more >

Automate Building Custom Windows Images For Azure Virtual Desktop With Packer And GitHub Actions

One aspect of managing Azure Virtual Desktop (AVD) is keeping it up-to-date. One strategy is periodically building a “golden” image and re-deploying AVD session host VMs using the updated image. In this post, we’ll use Packer and GitHub Actions to build a Windows 11 image and push it to Azure.

Read more >

Deploy Azure Virtual Desktop (AVD) Using Terraform and Azure Active Directory Domain Services (AADDS)

With Azure Virtual Desktop (AVD), you can deliver secure Windows 11 desktops and environments anywhere. It’s pretty easy to deploy and scale. You can provide a coherent user experience from any end-user device and reduce costs by leveraging Windows 11 multi-session licensing. This tutorial will guide you through setting up AVD with AADDS using Terraform.

Read more >

Set Up Azure Active Directory Domain Services (AADDS) With Terraform

I wanted to revisit this topic for a while because the previous guide I wrote about setting up Azure Active Directory Domain Services (AADDS) with Terraform is outdated. However, the article still attracts around 100 visitors per month. People also keep downloading the deprecated Terraform module I created. Time to set things right!

Read more >

Reduce Storage Costs when Deploying Azure Kubernetes Service Clusters with Terraform

I use the Azure Kubernetes Service (AKS) to host a few services, like Synapse, Remark42, and Plausible Analytics. As of yet, none of these services require much computing power, so I chose a small VM size for the AKS node: Standard_B2ms. I recently analyzed my Azure costs and found out that I could have saved more than a hundred bucks in the past months if I had been more diligent.

Read more >

Configure NUT for OPNsense and TrueNAS with the CyberPower PR750ERT2U UPS

For storage in my homelab, I use TrueNAS. Additionally, I run a couple of apps on top of it as jails. For over a year, I’ve been using an uninterruptible power supply (UPS) to protect my TrueNAS from possible data loss in case of a power failure. What I’ve been missing throughout that time are the monitoring and management tools to shut down everything gracefully when the battery of the UPS runs low. In the event of a power outage lasting longer than 30 minutes, the battery would run out of juice. Everything attached to the UPS would be powered off immediately, and data loss might occur. Luckily I live in an area where power outages rarely happen. I also have backups I could restore if my TrueNAS data gets corrupted. Still, doing this right and configuring Network UPS Tools (NUT) to orchestrate shutdowns has been on my to-do list for way too long. It’s time to tackle the issue!

Read more >