Make undercloud resources cleanup more robust

Currently if a job is aborted, job-specific undercloud resources might
not be deleted and kept forever.

This change makes it so that undercloud cleanup playbooks are now run
through the Zuul job's cleanup phase (cleanup-run [1]) instead of
post-run.

Additionally, make the cleanup tasks/playbooks carry on and not fail on
error.

[1]: https://zuul-ci.org/docs/zuul/latest/config/job.html#attr-job.cleanup-run

Change-Id: I92a6ce5c12aed9ac2504c815179ef4da0ecf9fe8
diff --git a/playbooks/kolla-setup-openstack-iscsi-multipath-storpool/post.yaml b/playbooks/kolla-setup-openstack-iscsi-multipath-storpool/post.yaml
index 297f6fa..add473f 100644
--- a/playbooks/kolla-setup-openstack-iscsi-multipath-storpool/post.yaml
+++ b/playbooks/kolla-setup-openstack-iscsi-multipath-storpool/post.yaml
@@ -2,31 +2,34 @@
   vars_files:
     - vars.yaml
   tasks:
-    - name: Remove the Kolla Ports from the OpenStack Node
-      ansible.builtin.command:
-        argv:
-          - "{{ os_venv }}/bin/openstack"
-          - --os-cloud
-          - openstack-testing
-          - server
-          - remove
-          - port
-          - "{{ openstack_node }}"
-          - "{{ item }}"
-      loop:
-        - "{{ kolla_network_interface_port }}"
-        - "{{ kolla_neutron_external_interface_port }}"
+    - name: Clean Up Undercloud
+      block:
+        - name: Remove the Kolla Ports from the OpenStack Node
+          ansible.builtin.command:
+            argv:
+              - "{{ os_venv }}/bin/openstack"
+              - --os-cloud
+              - openstack-testing
+              - server
+              - remove
+              - port
+              - "{{ openstack_node }}"
+              - "{{ item }}"
+          loop:
+            - "{{ kolla_network_interface_port }}"
+            - "{{ kolla_neutron_external_interface_port }}"
 
-    - name: Delete the Kolla Ports
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
-      loop:
-        - "{{ kolla_network_interface_port }}"
-        - "{{ kolla_neutron_external_interface_port }}"
+        - name: Delete the Kolla Ports
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
+          loop:
+            - "{{ kolla_network_interface_port }}"
+            - "{{ kolla_neutron_external_interface_port }}"
 
-    - name: Delete the StorPool Networks
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
-      loop:
-        - "{{ kolla_network_interface_network }}"
-        - "{{ kolla_neutron_external_interface_network }}"
\ No newline at end of file
+        - name: Delete the StorPool Networks
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
+          loop:
+            - "{{ kolla_network_interface_network }}"
+            - "{{ kolla_neutron_external_interface_network }}"
+      ignore_errors: true
diff --git a/playbooks/setup-juju-client/post.yaml b/playbooks/setup-juju-client/post.yaml
index b57e2fe..ced982f 100644
--- a/playbooks/setup-juju-client/post.yaml
+++ b/playbooks/setup-juju-client/post.yaml
@@ -2,6 +2,8 @@
   tasks:
   - name: Log Out of the Controller
     ansible.builtin.command: juju logout
+    ignore_errors: true
 
   - name: Remove the Juju Configuration Directory
     ansible.builtin.command: rm -rf ~/.local/share/juju
+    ignore_errors: true
diff --git a/playbooks/setup-openstack-client/post.yaml b/playbooks/setup-openstack-client/post.yaml
index d2525ac..9b3ab62 100644
--- a/playbooks/setup-openstack-client/post.yaml
+++ b/playbooks/setup-openstack-client/post.yaml
@@ -6,3 +6,4 @@
     ansible.builtin.file:
       path: "{{ os_creds_dir }}"
       state: absent
+    ignore_errors: true
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
index 0e22ac7..f35b3f2 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
@@ -2,63 +2,66 @@
   vars_files:
     - vars.yaml
   tasks:
-    - name: Remove the StorPool Ports from the StorPool Node
-      ansible.builtin.command:
-        argv:
-          - "{{ os_venv }}/bin/openstack"
-          - --os-cloud
-          - openstack-testing
-          - server
-          - remove
-          - port
-          - "{{ storpool_node }}"
-          - "{{ item }}"
-      loop:
-        - "{{ port_node_1_sp_api }}"
-        - "{{ port_sp0 }}"
-        - "{{ port_sp1 }}"
+    - name: Clean Up Undercloud
+      block:
+        - name: Remove the StorPool Ports from the StorPool Node
+          ansible.builtin.command:
+            argv:
+              - "{{ os_venv }}/bin/openstack"
+              - --os-cloud
+              - openstack-testing
+              - server
+              - remove
+              - port
+              - "{{ storpool_node }}"
+              - "{{ item }}"
+          loop:
+            - "{{ port_node_1_sp_api }}"
+            - "{{ port_sp0 }}"
+            - "{{ port_sp1 }}"
 
-    - name: Remove the StorPool Ports from the OpenStack Node
-      ansible.builtin.command:
-        argv:
-          - "{{ os_venv }}/bin/openstack"
-          - --os-cloud
-          - openstack-testing
-          - server
-          - remove
-          - port
-          - "{{ openstack_node }}"
-          - "{{ port_node_2_sp_api }}"
+        - name: Remove the StorPool Ports from the OpenStack Node
+          ansible.builtin.command:
+            argv:
+              - "{{ os_venv }}/bin/openstack"
+              - --os-cloud
+              - openstack-testing
+              - server
+              - remove
+              - port
+              - "{{ openstack_node }}"
+              - "{{ port_node_2_sp_api }}"
 
-    - name: Delete the StorPool Ports
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
-      loop:
-        - "{{ port_node_1_sp_api }}"
-        - "{{ port_node_2_sp_api }}"
-        - "{{ port_sp0 }}"
-        - "{{ port_sp1 }}"
+        - name: Delete the StorPool Ports
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
+          loop:
+            - "{{ port_node_1_sp_api }}"
+            - "{{ port_node_2_sp_api }}"
+            - "{{ port_sp0 }}"
+            - "{{ port_sp1 }}"
 
-    - name: Delete the StorPool Networks
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
-      loop:
-        - "{{ network_sp_api }}"
-        - "{{ network_sp0 }}"
-        - "{{ network_sp1 }}"
+        - name: Delete the StorPool Networks
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
+          loop:
+            - "{{ network_sp_api }}"
+            - "{{ network_sp0 }}"
+            - "{{ network_sp1 }}"
 
-    - name: Remove the StorPool Volume to the StorPool Node
-      ansible.builtin.command:
-        argv:
-          - "{{ os_venv }}/bin/openstack"
-          - --os-cloud
-          - openstack-testing
-          - server
-          - remove
-          - volume
-          - "{{ storpool_node }}"
-          - "{{ storpool_volume }}"
+        - name: Remove the StorPool Volume to the StorPool Node
+          ansible.builtin.command:
+            argv:
+              - "{{ os_venv }}/bin/openstack"
+              - --os-cloud
+              - openstack-testing
+              - server
+              - remove
+              - volume
+              - "{{ storpool_node }}"
+              - "{{ storpool_volume }}"
 
-    - name: Delete the StorPool Volume
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "volume", "delete", "{{ storpool_volume }}" ]
+        - name: Delete the StorPool Volume
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "volume", "delete", "{{ storpool_volume }}" ]
+      ignore_errors: true
\ No newline at end of file
diff --git a/playbooks/setup-openstack-iscsi-multipath/post.yaml b/playbooks/setup-openstack-iscsi-multipath/post.yaml
index e11f10d..6f9bbda 100644
--- a/playbooks/setup-openstack-iscsi-multipath/post.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath/post.yaml
@@ -2,32 +2,35 @@
   vars_files:
     - vars.yaml
   tasks:
-    - name: Remove the Multipath iSCSI Ports from the StorPool Node
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "server", "remove", "port", "{{ storpool_node }}", "{{ item }}" ]
-      loop:
-        - "{{ port_node_1_iscsi0 }}"
-        - "{{ port_node_1_iscsi1 }}"
+    - name: Clean Up Undercloud
+      block:
+        - name: Remove the Multipath iSCSI Ports from the StorPool Node
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "server", "remove", "port", "{{ storpool_node }}", "{{ item }}" ]
+          loop:
+            - "{{ port_node_1_iscsi0 }}"
+            - "{{ port_node_1_iscsi1 }}"
 
-    - name: Remove the Multipath iSCSI Ports from the OpenStack Node
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "server", "remove", "port", "{{ openstack_node }}", "{{ item }}" ]
-      loop:
-        - "{{ port_node_2_iscsi0 }}"
-        - "{{ port_node_2_iscsi1 }}"
+        - name: Remove the Multipath iSCSI Ports from the OpenStack Node
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "server", "remove", "port", "{{ openstack_node }}", "{{ item }}" ]
+          loop:
+            - "{{ port_node_2_iscsi0 }}"
+            - "{{ port_node_2_iscsi1 }}"
 
-    - name: Delete the Multipath iSCSI Ports
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
-      loop :
-        - "{{ port_node_1_iscsi0 }}"
-        - "{{ port_node_1_iscsi1 }}"
-        - "{{ port_node_2_iscsi0 }}"
-        - "{{ port_node_2_iscsi1 }}"
+        - name: Delete the Multipath iSCSI Ports
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
+          loop :
+            - "{{ port_node_1_iscsi0 }}"
+            - "{{ port_node_1_iscsi1 }}"
+            - "{{ port_node_2_iscsi0 }}"
+            - "{{ port_node_2_iscsi1 }}"
 
-    - name: Delete Multipath iSCSI Networks
-      ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
-      loop:
-        - "{{ network_1 }}"
-        - "{{ network_2 }}"
+        - name: Delete Multipath iSCSI Networks
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "delete", "{{ item }}" ]
+          loop:
+            - "{{ network_1 }}"
+            - "{{ network_2 }}"
+      ignore_errors: true
diff --git a/zuul.d/setup-juju-client.yaml b/zuul.d/setup-juju-client.yaml
index 0713595..a5d71a0 100644
--- a/zuul.d/setup-juju-client.yaml
+++ b/zuul.d/setup-juju-client.yaml
@@ -19,7 +19,7 @@
     parent: base
     description: Prepare hosts for Juju connections
     pre-run: playbooks/setup-juju-client/pre.yaml
-    post-run: playbooks/setup-juju-client/post.yaml
+    cleanup-run: playbooks/setup-juju-client/post.yaml
     timeout: 1800
     attempts: 3
     secrets:
diff --git a/zuul.d/sp-cinder.yaml b/zuul.d/sp-cinder.yaml
index efd908d..f1c4aa7 100644
--- a/zuul.d/sp-cinder.yaml
+++ b/zuul.d/sp-cinder.yaml
@@ -118,7 +118,7 @@
       - playbooks/setup-openstack-iscsi-multipath/pre.yaml
       - playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
     run: playbooks/tempest-and-cinderlib-run.yaml
-    post-run:
+    cleanup-run:
       - playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
       - playbooks/setup-openstack-iscsi-multipath/post.yaml
       - playbooks/setup-openstack-client/post.yaml
@@ -228,7 +228,7 @@
       - playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
       - playbooks/kolla-setup-openstack-iscsi-multipath-storpool/pre.yaml
     run: playbooks/kolla-setup-openstack-iscsi-multipath-storpool/run.yaml
-    post-run:
+    cleanup-run:
       - playbooks/kolla-setup-openstack-iscsi-multipath-storpool/post.yaml
       - playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
       - playbooks/setup-openstack-iscsi-multipath/post.yaml