diff --git a/playbooks/opendev-build-diskimage-base/pre.yaml b/playbooks/opendev-build-diskimage-base/pre.yaml
index 41e32f8..d4e9c12 100644
--- a/playbooks/opendev-build-diskimage-base/pre.yaml
+++ b/playbooks/opendev-build-diskimage-base/pre.yaml
@@ -1,5 +1,48 @@
+# We have some out-of-tree of binary dependencies expressed below:
+#
+#  * vhd-util is required to create .vhd images, mostly used in
+#    Rackspace.  For full details see:
+#      https://docs.openstack.org/diskimage-builder/latest/developer/vhd_creation.html
+
 - hosts: all
   pre_tasks:
+    - name: Add PPA GPG key for custom vhd-util
+      become: true
+      apt_key:
+        data: |
+          -----BEGIN PGP PUBLIC KEY BLOCK-----
+
+          xsFNBFUZtK8BEADGaOXCZ/ypqcNEU5Y3rospyaJDhi9PiLndRXz6KxZEoDljmaLz
+          QBMiJ3/lnNflwcv07sBdQDqBjNClFdDbvP4ttIZsQzWYQya/uHzM3rNxbh2bw24T
+          z0n/+PwZ10NrGFIoXl9rU79tXe7XTJDifYvEXtpwnNcgo6/j3FJ9l7q9jQO4SwbK
+          4dxKRLnwxPLsOtspvSp6J0PC9j6TiPYTrQ8dp8mj05GFF7oK6ZlQAJ3lgYG/QaWA
+          9rXF1bOMw7E/arMI4+WYQOhx+JHkCitkai000MdNRVykrvJD/r9pb6NSzyAIrs/h
+          DYvRjD/+7d2pd47R0CLTQJjsT9JNDlZqpU7i6+47zAB9uYTVJFprNF7/BuQ84fK/
+          o81ePwutt+gfGzhKvbjUNLUC6WxFzojZEDbixz0TUOgvjUsK4VGoDyxLw1YLebjs
+          5YdGROB19+771sx6leMZpdQhiTaXWlQrTyjbiS7f71Hx2Eng4hpyrySzHbBrLzXq
+          XjiMazxt1yp5qq3VEBBgb6iW1ejDihkew1dnx+IJbUJ+OCs8Exntdta9B5+gg557
+          Q6egbxQBK3RZ/c+8JHR1ROZ63COQXtAyfTsWwyxcfm7OI0YkNkJ2gNkeMl3spKw4
+          VbGgaC0WBGKsdhVd9TfvtssBItS5/bgnIob/3aOFyCmNH33SGCjYDeopPQARAQAB
+          zSNMYXVuY2hwYWQgUFBBIGZvciBPcGVuU3RhY2sgQ0kgQ29yZcLBeAQTAQIAIgUC
+          VRm0rwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQFbbOfAGNBfUyCA/+
+          OJEojrft6vxgh3iVDlDan1NavVm4D7F1mgfRlFwd9BC3trUkaLrNAqHXTi0fWtLe
+          CqD3k0UAekA+0e58AL5EjeGyCadn9TT7oWlaXgiPr9OHCaVV/z8DnalQny31PQhf
+          weNOVyOMKh/o7BFaLc3i5KCU+qb/gAcCRC7tLI8Saxf2CzboA6tECr8CHxX9xHln
+          pspbcw5aAnEfpqd6BTagkkMjJ/+tDhC4pv9USwH3lbBjRlU93miuqoqtooMd++yy
+          AKYd9c8ClRuI33rIAdoAmFfwwqk2prb9fF0BTxvfGdENZ+isOjvYTjzz0cYdBDrx
+          fZtl7ruYceC54/6Nt9aKX0ADJBJuiIcNjqgaNCjdBP/p7aCIJzh10GKeDIzitCrK
+          /ikMWcszaqYtctBVQvRxGfF2MSAy/VJny0OhiQI6XVc6eK/9Iu9ZeEAC6GoQRIla
+          rwYit+TGhqgYBKYTjWwVlKUZAz7GCIF+wx+NTkUTWVQTnDzTFeBVbzGx3WHQhCqF
+          NayXtKHrdImKfVpQjZZBVo42HzKqfGt/kNDM6IKhIuMlqlCUimVZpc3tawb+d8QT
+          TS0IjLrW7dpFfRaZRk82AjQOp96WJL9LoDvcEIfKg7RKmcGPBJ2qaquj+PA6yAZL
+          5pX70jigBqjtJ0PZGm7jELb8bB70SVSGsvwHmEz0pSs=
+          =d9cr
+          -----END PGP PUBLIC KEY BLOCK-----
+    - name: Add PPA for custom vhd-util
+      become: true
+      apt_repository:
+        repo: ppa:openstack-ci-core/vhd-util
+        codename: focal
     - name: Install custom element requirements
       become: true
       package:
@@ -10,6 +53,7 @@
           - python3-openstacksdk
           - python3-oslo.utils
           - zstd
+          - vhd-util
     - name: Setup dib directories
       become: true
       shell: |
diff --git a/zuul.d/image-build-jobs.yaml b/zuul.d/image-build-jobs.yaml
index adf8ac4..b36e943 100644
--- a/zuul.d/image-build-jobs.yaml
+++ b/zuul.d/image-build-jobs.yaml
@@ -25,6 +25,7 @@
       build_diskimage_formats:
         - qcow2
         - raw
+        - vhd
       # /opt/dib_tmp is an ephemeral disk if present
       build_diskimage_image_root: "/opt/dib_tmp/dib-images"
       build_diskimage_elements: &base_elements