diff --git a/ansible/roles/ironic/tasks/precheck.yml b/ansible/roles/ironic/tasks/precheck.yml
index 97ec0c5a90250026c949a949c953706f6ba5a42a..6037b7fd92444d4871529583a217af91018011ad 100644
--- a/ansible/roles/ironic/tasks/precheck.yml
+++ b/ansible/roles/ironic/tasks/precheck.yml
@@ -12,8 +12,6 @@
     name:
       - ironic_api
       - ironic_inspector
-      # TODO(yoctozepto): Remove ironic_ipxe entry in Zed.
-      - ironic_ipxe
       - ironic_http
   register: container_facts
 
@@ -47,8 +45,6 @@
     timeout: 1
     state: stopped
   when:
-    # TODO(yoctozepto): Remove ironic_ipxe entry in Zed.
-    - container_facts['ironic_ipxe'] is not defined
     - container_facts['ironic_http'] is not defined
     - inventory_hostname in groups['ironic-http']
 
diff --git a/ansible/roles/ironic/tasks/upgrade.yml b/ansible/roles/ironic/tasks/upgrade.yml
index a88d565ae484fac3188c85be1e7b089b74fd1679..e4e268f4a022907628b86f5eef26fbb14eab6380 100644
--- a/ansible/roles/ironic/tasks/upgrade.yml
+++ b/ansible/roles/ironic/tasks/upgrade.yml
@@ -27,33 +27,8 @@
   run_once: true
   when: not ironic_upgrade_skip_wait_check | bool
 
-# TODO(yoctozepto): Remove this task in Zed.
-- name: Remove old Ironic containers
-  become: true
-  kolla_docker:
-    action: "stop_and_remove_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item }}"
-  with_items:
-    # NOTE(yoctozepto): Removing conductor to avoid it
-    # thinking that the tftp and http servers are available.
-    - ironic_conductor
-    - ironic_pxe
-    - ironic_ipxe
-
 - include_tasks: rolling_upgrade.yml
   when: ironic_enable_rolling_upgrade | bool
 
 - include_tasks: legacy_upgrade.yml
   when: not ironic_enable_rolling_upgrade | bool
-
-# TODO(yoctozepto): Remove this task in Zed.
-- name: Remove old Ironic volumes
-  become: true
-  kolla_docker:
-    action: "remove_volume"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item }}"
-  with_items:
-    - ironic_pxe
-    - ironic_ipxe