diff --git a/ansible/inventory/group_vars/all/ipa b/ansible/inventory/group_vars/all/ipa
index 050b7610892e46f4ce9868e7454179c6259e3c7d..a9adeca8824cee5a891c84a9ff1ced8e9b0ae1be 100644
--- a/ansible/inventory/group_vars/all/ipa
+++ b/ansible/inventory/group_vars/all/ipa
@@ -26,8 +26,8 @@ ipa_build_dib_host_packages_extra: []
 # images. Default is ["centos", "enable-serial-console",
 # "ironic-python-agent-ramdisk"].
 ipa_build_dib_elements_default:
-  # TODO(mgoddard): Use {{ os_distribution }} here when Ubuntu IPA builds work.
-  - centos
+  # TODO(mattcrees): Use {{ os_distribution }} here when Rocky IPA builds work.
+  - "{{ 'centos' if os_distribution == 'rocky' else os_distribution }}"
   - enable-serial-console
   - ironic-python-agent-ramdisk
 
@@ -45,9 +45,8 @@ ipa_build_dib_elements: >
 # Dictionary of default environment variables to provide to Diskimage Builder
 # (DIB) during IPA image build.
 ipa_build_dib_env_default:
-  # TODO(mgoddard): Use {{ os_release }} here when we use os_distribution
-  # above.
-  DIB_RELEASE: "9-stream"
+  # TODO(mattcrees): Use {{ os_release }} here when Rocky IPA builds work.
+  DIB_RELEASE: "{{ '9-stream' if os_distribution == 'rocky' else os_release }}"
   DIB_REPOLOCATION_ironic_python_agent: "{{ ipa_build_source_url }}"
   DIB_REPOREF_ironic_python_agent: "{{ ipa_build_source_version }}"
 
diff --git a/playbooks/kayobe-seed-base/overrides.yml.j2 b/playbooks/kayobe-seed-base/overrides.yml.j2
index c317414fd10ea95e5a877069fc4cc2d1c91eb197..f5cca32d9ed3f95652e029a0d696f289020518e9 100644
--- a/playbooks/kayobe-seed-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-base/overrides.yml.j2
@@ -32,9 +32,14 @@ aio_bridge_ports:
 # Build seed deployment images (IPA) with extra-hardware element
 ipa_build_images: {{ build_images }}
 ipa_build_dib_elements_extra:
-  - "extra-hardware"
+  # extra-hardware is currently failing on Ubuntu
+  - "{% raw %}{{ 'extra-hardware' if os_distribution != 'ubuntu' else '' }}{% endraw %}"
   - "openstack-ci-mirrors"
 
+# Workaround for limited tmpfs space in CI
+ipa_build_dib_env_extra:
+  DIB_NO_TMPFS: 1
+
 # Build overcloud host image.
 overcloud_dib_build_host_images: {{ build_images }}
 overcloud_dib_elements_extra:
diff --git a/releasenotes/notes/build-ubuntu-ipa-images-when-on-ubuntu-5dfcdfdb673343ea.yaml b/releasenotes/notes/build-ubuntu-ipa-images-when-on-ubuntu-5dfcdfdb673343ea.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a46e4bb1513bd84d3b7c59e5d475c097f0feb57b
--- /dev/null
+++ b/releasenotes/notes/build-ubuntu-ipa-images-when-on-ubuntu-5dfcdfdb673343ea.yaml
@@ -0,0 +1,8 @@
+---
+upgrade:
+  - |
+    ``ipa_build_dib_elements_default`` and ``ipa_build_dib_env_default`` now
+    use ``os_distribution`` and ``os_release`` by default. This means that
+    Ubuntu images will now be built with the Ironic Python Agent when running
+    on Ubuntu. Rocky will still build CentOS images, as Rocky IPA images have
+    not been tested yet.