The problem
The bank had parallel server-build paths across VMware and Nutanix. Template builds, VM provisioning, network reservations, inventory updates, and request-system handoffs all had to line up, but too much of that process depended on manual steps, environment-specific knowledge, and different tooling paths for different platforms.
The approach
I built image automation with Packer for Windows Server and RHEL on Nutanix AHV. Windows builds used unattended installs, WinRM provisioners, VirtIO tools, WSUS configuration, Windows update passes, and sysprep. Linux builds used Kickstart, SSH provisioners, package updates, UID/GID remediation, and cleanup before template publication.
For Nutanix AHV, Terraform handled provisioning: selecting the right image, sizing the VM, attaching network and data disks, applying customization, assigning platform categories, and publishing the outputs other systems needed.
For the VMware path, the bank already had an off-the-shelf build platform. I mapped the required image and request inputs, identified what that platform needed from the automation workflow, and built the surrounding CI and handoff logic so VMware builds followed the same handoff model without pretending Terraform owned that estate.
GitLab CI tied the pieces together. Pipelines validated and built Packer images, ran Nutanix Terraform plan and apply, reserved network records, triggered post-provisioning, updated the service-management request, and cleaned up failed builds when resources needed to be destroyed.
The outcome
Server builds moved from environment-specific handoffs to pipeline-run platform automation. Image refreshes, VM provisioning, network reservations, and request updates became part of one repeatable workflow that supported both the Nutanix AHV automation path and the bank’s existing VMware build platform.