diff --git a/ansible/overcloud-deprovision.yml b/ansible/overcloud-deprovision.yml
index 824f8ccbba5a869d4885dcb5f08a54b0c1317d96..b389da11c73a5d9b55e6d523557088176884237a 100644
--- a/ansible/overcloud-deprovision.yml
+++ b/ansible/overcloud-deprovision.yml
@@ -46,6 +46,22 @@
           Deprovision has not been confirmed. You must either type 'yes' when
           prompted, or set ``confirm_deprovision=yes``.
 
+    - name: Get PXE MAC address
+      command: >
+        docker exec bifrost_deploy
+        bash -c '
+        export OS_CLOUD=bifrost &&
+        export OS_BAREMETAL_API_VERSION=1.34 &&
+        export BIFROST_INVENTORY_SOURCE=ironic &&
+        export BIFROST_NODE_NAMES="{{ inventory_hostname }}" &&
+        openstack baremetal port list --node {{ inventory_hostname }} --fields address -f value'
+      register: pxe_result
+      delegate_to: "{{ seed_host }}"
+      vars:
+        # NOTE: Without this, the seed's ansible_host variable will not be
+        # respected when using delegate_to.
+        ansible_host: "{{ hostvars[seed_host].ansible_host | default(seed_host) }}"
+
     - name: Check the ironic node's initial provision state
       command: >
         docker exec bifrost_deploy
@@ -156,3 +172,26 @@
         - wait_available | bool
         - initial_provision_state != 'available'
         - final_provision_state != 'available'
+
+    - name: Delete host_vars file
+      become: yes
+      ansible.builtin.file:
+        path: /etc/kolla/bifrost/inventory/host_vars/{{ inventory_hostname }}
+        state: absent
+      delegate_to: "{{ seed_host }}"
+      vars:
+        # NOTE: Without this, the seed's ansible_host variable will not be
+        # respected when using delegate_to.
+        ansible_host: "{{ hostvars[seed_host].ansible_host | default(seed_host) }}"
+
+    - name: Delete ironic-mac-addr.conf
+      command: >
+        docker exec bifrost_deploy
+        bash -c '
+        rm -f /etc/dnsmasq.d/bifrost.dhcp-hosts.d/ironic-{{ item }}.conf'
+      loop: "{{ pxe_result.stdout_lines }}"
+      delegate_to: "{{ seed_host }}"
+      vars:
+        # NOTE: Without this, the seed's ansible_host variable will not be
+        # respected when using delegate_to.
+        ansible_host: "{{ hostvars[seed_host].ansible_host | default(seed_host) }}"
diff --git a/releasenotes/notes/deprovision_leftover_fix-6b3150b32cbf9007.yaml b/releasenotes/notes/deprovision_leftover_fix-6b3150b32cbf9007.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..70b9cafbf07bfbaeb19141be1020b26e8546be29
--- /dev/null
+++ b/releasenotes/notes/deprovision_leftover_fix-6b3150b32cbf9007.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    Fixes issue of ironic files being left behind after node deprovision which
+    prevents it from being enrolled and provisioned again.