Refactor StorPool playboks

Change-Id: I2d2a7de224f0bfd11be1c29e6d17240b48ae8e5c
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
index f35b3f2..bd8781c 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
@@ -17,8 +17,8 @@
               - "{{ item }}"
           loop:
             - "{{ port_node_1_sp_api }}"
-            - "{{ port_sp0 }}"
-            - "{{ port_sp1 }}"
+            - "{{ port_node_1_sp0 }}"
+            - "{{ port_node_1_sp1 }}"
 
         - name: Remove the StorPool Ports from the OpenStack Node
           ansible.builtin.command:
@@ -32,14 +32,38 @@
               - "{{ openstack_node }}"
               - "{{ port_node_2_sp_api }}"
 
+        - name: Remove the StorPool Ports from the Block Client OpenStack Node
+          ansible.builtin.command:
+            argv:
+              - "{{ os_venv }}/bin/openstack"
+              - --os-cloud
+              - openstack-testing
+              - server
+              - remove
+              - port
+              - "{{ openstack_node }}"
+              - "{{ item }}"
+          loop:
+            - "{{ port_node_1_sp_api }}"
+            - "{{ port_node_2_sp0 }}"
+            - "{{ port_node_2_sp1 }}"
+          when: storpool_connection == "block"
+
         - 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 }}"
+            - "{{ port_node_1_sp0 }}"
+            - "{{ port_node_1_sp1 }}"
+
+        - name: Delete the StorPool Block Ports
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "delete", "{{ item }}" ]
+          loop:
+            - "{{ port_node_2_sp0 }}"
+            - "{{ port_node_2_sp1 }}"
 
         - name: Delete the StorPool Networks
           ansible.builtin.command:
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
index beb53dc..813633a 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
@@ -52,8 +52,28 @@
       loop:
         - { network: "{{ network_sp_api }}", subnet: "{{ subnet_sp_api }}", ip: "{{ ip_node_1_sp_api }}", port: "{{ port_node_1_sp_api }}" }
         - { network: "{{ network_sp_api }}", subnet: "{{ subnet_sp_api }}", ip: "{{ ip_node_2_sp_api }}", port: "{{ port_node_2_sp_api }}" }
-        - { network: "{{ network_sp0 }}", subnet: "{{ subnet_sp0 }}", ip: "{{ ip_sp0 }}", port: "{{ port_sp0 }}" }
-        - { network: "{{ network_sp1 }}", subnet: "{{ subnet_sp1 }}", ip: "{{ ip_sp1 }}", port: "{{ port_sp1 }}" }
+        - { network: "{{ network_sp0 }}", subnet: "{{ subnet_sp0 }}", ip: "{{ port_node_1_ip_sp0 }}", port: "{{ port_node_1_sp0 }}" }
+        - { network: "{{ network_sp1 }}", subnet: "{{ subnet_sp1 }}", ip: "{{ port_node_1_ip_sp1 }}", port: "{{ port_node_1_sp1 }}" }
+
+    # TODO: Support port security
+    - name: Create the StorPool Ports for the Block Client OpenStack Node
+      ansible.builtin.command:
+        argv:
+          - "{{ os_venv }}/bin/openstack"
+          - --os-cloud
+          - openstack-testing
+          - port
+          - create
+          - --network
+          - "{{ item.network }}"
+          - --fixed-ip
+          - "subnet={{ item.subnet }},ip-address={{ item.ip }}"
+          - --disable-port-security
+          - "{{ item.port }}"
+      loop:
+        - { network: "{{ network_sp0 }}", subnet: "{{ subnet_sp0 }}", ip: "{{ port_node_2_ip_sp0 }}", port: "{{ port_node_2_sp0 }}" }
+        - { network: "{{ network_sp1 }}", subnet: "{{ subnet_sp1 }}", ip: "{{ port_node_2_ip_sp1 }}", port: "{{ port_node_2_sp1 }}" }
+      when: storpool_connection == "block"
 
     - name: Attach the StorPool Ports to the StorPool Node
       ansible.builtin.command:
@@ -68,8 +88,8 @@
           - "{{ item }}"
       loop:
         - "{{ port_node_1_sp_api }}"
-        - "{{ port_sp0 }}"
-        - "{{ port_sp1 }}"
+        - "{{ port_node_1_sp0 }}"
+        - "{{ port_node_1_sp1 }}"
 
     - name: Attach the StorPool API Port to the OpenStack Node
       ansible.builtin.command:
@@ -83,6 +103,22 @@
           - "{{ openstack_node }}"
           - "{{ port_node_2_sp_api }}"
 
+    - name: Attach the StorPool Ports to the Block Client StorPool Node
+      ansible.builtin.command:
+        argv:
+          - "{{ os_venv }}/bin/openstack"
+          - --os-cloud
+          - openstack-testing
+          - server
+          - add
+          - port
+          - "{{ openstack_node }}"
+          - "{{ item }}"
+      loop:
+        - "{{ port_node_2_sp0 }}"
+        - "{{ port_node_2_sp1 }}"
+      when: storpool_connection == "block"
+
     - name: Get Information About port_node_1_sp_api
       ansible.builtin.command:
         argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_1_sp_api }}" ]
@@ -101,23 +137,44 @@
       ansible.builtin.set_fact:
         port_node_2_sp_api_mac: "{{ (port_node_2_sp_api_info.stdout | from_json).mac_address }}"
 
-    - name: Get Information About port_sp0
+    - name: Get Information About port_node_1_sp0
       ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_sp0 }}" ]
-      register: port_sp0_info
+        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_1_sp0 }}" ]
+      register: port_node_1_sp0_info
 
-    - name: Get MAC Address of port_sp0
+    - name: Get MAC Address of port_node_1_sp0
       ansible.builtin.set_fact:
-        port_sp0_mac: "{{ (port_sp0_info.stdout | from_json).mac_address }}"
+        port_node_1_sp0_mac: "{{ (port_node_1_sp0_info.stdout | from_json).mac_address }}"
 
-    - name: Get Information About port_sp1
+    - name: Get Information About port_node_1_sp1
       ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_sp1 }}" ]
-      register: port_sp1_info
+        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_1_sp1 }}" ]
+      register: port_node_1_sp1_info
 
-    - name: Get MAC Address of port_sp1
+    - name: Get MAC Address of port_node_1_sp1
       ansible.builtin.set_fact:
-        port_sp1_mac: "{{ (port_sp1_info.stdout | from_json).mac_address }}"
+        port_node_1_sp1_mac: "{{ (port_node_1_sp1_info.stdout | from_json).mac_address }}"
+
+    - name: Collect Additional Info for StorPool Block
+      block:
+        - name: Get Information About port_node_2_sp0
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_2_sp0 }}" ]
+          register: port_node_2_sp0_info
+
+        - name: Get MAC Address of port_node_2_sp0
+          ansible.builtin.set_fact:
+            port_node_2_sp0_mac: "{{ (port_node_2_sp0_info.stdout | from_json).mac_address }}"
+
+        - name: Get Information About port_node_2_sp1
+          ansible.builtin.command:
+            argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_2_sp1 }}" ]
+          register: port_node_2_sp1_info
+
+        - name: Get MAC Address of port_node_2_sp1
+          ansible.builtin.set_fact:
+            port_node_2_sp1_mac: "{{ (port_node_2_sp1_info.stdout | from_json).mac_address }}"
+      when: storpool_connection == "block"
 
     - name: Create the StorPool Volume
       ansible.builtin.command:
@@ -178,11 +235,11 @@
 
     - set_fact:
         port_node_1_sp_api_mac: "{{ hostvars['undercloud-client']['port_node_1_sp_api_mac'] }}"
-        sp_sp0_mac: "{{ hostvars['undercloud-client']['port_sp0_mac'] }}"
-        sp_sp1_mac: "{{ hostvars['undercloud-client']['port_sp1_mac'] }}"
+        sp_sp0_mac: "{{ hostvars['undercloud-client']['port_node_1_sp0_mac'] }}"
+        sp_sp1_mac: "{{ hostvars['undercloud-client']['port_node_1_sp1_mac'] }}"
         ip_node_1_sp_api: "{{ ip_node_1_sp_api }}/24"
-        ip_sp0: "{{ ip_sp0 }}/24"
-        ip_sp1: "{{ ip_sp1 }}/24"
+        port_node_1_ip_sp0: "{{ port_node_1_ip_sp0 }}/24"
+        port_node_1_ip_sp1: "{{ port_node_1_ip_sp1 }}/24"
 
     - set_fact:
         storpool_netplan: "{{ hostvars['localhost'].STORPOOL_STORPOOL_NETPLAN.v }}"
@@ -280,26 +337,37 @@
         - [ "git", "config", "--global", "user.name", "OpenStack CI Worker" ]
         - [ "git", "config", "--global", "user.email", "openstack-dev@storpool.com" ]
 
-    - name: Provision StorPool Ansible Inventory
+    - name: Configure for iSCSI
+      block:
+        - set_fact:
+            storpool_inventory: "{{ hostvars['localhost'].STORPOOL_ISCSI_INVENTORY.v }}"
+      when: storpool_connection == "iscsi"
+
+    - name: Configure for Block
+      block:
+        - set_fact:
+            storpool_inventory: "{{ hostvars['localhost'].STORPOOL_BLOCK_INVENTORY.v }}"
+      when: storpool_connection == "block"
+
+    - name: Provision the StorPool Ansible Inventory
       no_log: true
       ansible.builtin.copy:
-        content: "{{ STORPOOL_INVENTORY['v'] }}"
+        content: "{{ storpool_inventory }}"
         dest: /home/ubuntu/ansible/inventory.yaml
 
-    - name: Configure the StorPool Ansible Inventory
-      ansible.builtin.replace:
-        path: /home/ubuntu/ansible/inventory.yaml
-        regexp: 'STORPOOL_NODE'
-        replace: "{{ storpool_node_ip }}"
-
-    - set_fact:
-        storpool_node_hostname: "{{ hostvars['lab-sp-a1']['ansible_hostname'] }}"
-
     - name: Install StorPool
       block:
+        - set_fact:
+            storpool_conf: "{{ hostvars['localhost'].STORPOOL_CONF_ISCSI.v }}"
+          no_log: true
+          when: storpool_connection == "iscsi"
 
         - set_fact:
-            storpool_conf: "{{ hostvars['localhost'].STORPOOL_CONF.v }}"
+            storpool_conf: "{{ hostvars['localhost'].STORPOOL_CONF_BLOCK.v }}"
+          no_log: true
+          when: storpool_connection == "block"
+
+        - set_fact:
             storpool_deploy_info_conf: "{{ hostvars['localhost'].STORPOOL_DEPLOY_INFO_CONF.v }}"
           no_log: true
 
@@ -351,6 +419,14 @@
             path: /home/ubuntu/ansible/storpool_deploy_info.conf
             state: absent
 
+- hosts: controller
+  vars_files:
+    - vars.yaml
+  tasks:
+    - name: Start the zuul_console Daemon Again After Node Restart
+      zuul_console:
+      when: storpool_connection == "block"
+
 - hosts: lab-sp-a1
   vars_files:
     - vars.yaml
@@ -386,6 +462,7 @@
         - [ "storpool", "iscsi", "config", "portalGroup", "pg", "addNet", "192.168.50.100/24" ]
         - [ "storpool", "iscsi", "config", "portal", "create", "portalGroup", "pg", "controller", "1", "address", "192.168.40.101" ]
         - [ "storpool", "iscsi", "config", "portal", "create", "portalGroup", "pg", "controller", "1", "address", "192.168.50.101" ]
+      when: storpool_connection == "iscsi"
 
 - hosts: controller
   vars_files:
@@ -422,30 +499,40 @@
         content: "{{ systemd_networkd_iscsi }}"
         dest: /etc/systemd/network/62-storpool-api.network
 
-    - set_fact:
-        storpool_conf: "{{ hostvars['localhost'].STORPOOL_CONF_ISCSI_NODE.v }}"
-      no_log: true
+    - name: Setup iSCSI
+      block:
+        - set_fact:
+            storpool_conf: "{{ hostvars['localhost'].STORPOOL_CONF_ISCSI_NODE.v }}"
+          no_log: true
 
-    - name: Provision the StorPool Template
-      no_log: true
-      become: true
-      ansible.builtin.copy:
-        content: "{{ storpool_conf }}"
-        dest: /etc/storpool.conf
+        - name: Provision the StorPool Template
+          no_log: true
+          become: true
+          ansible.builtin.copy:
+            content: "{{ storpool_conf }}"
+            dest: /etc/storpool.conf
 
-    - name: Restart systemd-networkd to Apply the Network Configuration
-      become: true
-      ansible.builtin.command:
-        argv: [ "systemctl", "restart", "systemd-networkd" ]
+        - name: Restart systemd-networkd to Apply the Network Configuration
+          become: true
+          ansible.builtin.command:
+            argv: [ "systemctl", "restart", "systemd-networkd" ]
 
-    - name: Wait for the Portal Group IP 1 to Become Available
-      ansible.builtin.command:
-        argv: [ "ping", "-c1", "192.168.40.101" ]
-      register: r
-      until: r.rc == 0
+        - name: Wait for the Portal Group IP 1 to Become Available
+          ansible.builtin.command:
+            argv: [ "ping", "-c1", "192.168.40.101" ]
+          register: r
+          until: r.rc == 0
 
-    - name: Wait for the Portal Group IP 2 to Become Available
-      ansible.builtin.command:
-        argv: [ "ping", "-c1", "192.168.50.101" ]
-      register: r
-      until: r.rc == 0
+        - name: Wait for the Portal Group IP 2 to Become Available
+          ansible.builtin.command:
+            argv: [ "ping", "-c1", "192.168.50.101" ]
+          register: r
+          until: r.rc == 0
+      when: storpool_connection == "iscsi"
+
+- hosts: undercloud-client
+  vars_files:
+    - vars.yaml
+  tasks:
+    - name: Debug Sleep
+      ansible.builtin.command: sleep 3600
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
index 8334358..2116210 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
@@ -1,7 +1,13 @@
+storpool_connection: "block"
+
 storpool_node: "{{ hostvars['lab-sp-a1']['nodepool']['external_id'] }}"
 storpool_node_ip: "{{ hostvars['lab-sp-a1']['nodepool']['interface_ip'] }}"
+storpool_node_hostname: "{{ hostvars['lab-sp-a1']['ansible_hostname'] }}"
+
 undercloud_client_node: "{{ hostvars['undercloud-client']['nodepool']['external_id'] }}"
+
 openstack_node: "{{ hostvars['controller']['nodepool']['external_id'] }}"
+openstack_node_ip: "{{ hostvars['controller']['nodepool']['interface_ip'] }}"
 
 storpool_volume: "{{ undercloud_client_node }}-storpool-volume"
 
@@ -10,9 +16,12 @@
 network_ip_sp1: "192.168.30.0/24"
 
 ip_node_1_sp_api: "192.168.10.3"
+ip_node_1_sp0: "192.168.20.3"
+ip_node_1_sp1: "192.168.30.3"
+
 ip_node_2_sp_api: "192.168.10.4"
-ip_sp0: "192.168.20.3"
-ip_sp1: "192.168.30.3"
+ip_node_2_sp0: "192.168.20.4"
+ip_node_2_sp1: "192.168.30.4"
 
 network_sp_api: "{{ undercloud_client_node }}-network-sp-api"
 network_sp0: "{{ undercloud_client_node }}-network-sp0"
@@ -23,6 +32,9 @@
 subnet_sp1: "{{ undercloud_client_node }}-subnet-sp1"
 
 port_node_1_sp_api: "{{ undercloud_client_node }}-port-node-1-sp-api"
+port_node_1_sp0: "{{ undercloud_client_node }}-port-node-1-sp0"
+port_node_1_sp1: "{{ undercloud_client_node }}-port-node-1-sp1"
+
 port_node_2_sp_api: "{{ undercloud_client_node }}-port-node-2-sp-api"
-port_sp0: "{{ undercloud_client_node }}-port-sp0"
-port_sp1: "{{ undercloud_client_node }}-port-sp1"
+port_node_2_sp0: "{{ undercloud_client_node }}-port-node-2-sp0"
+port_node_2_sp1: "{{ undercloud_client_node }}-port-node-2-sp1"
diff --git a/zuul.d/sp-cinder-secrets.yaml b/zuul.d/sp-cinder-secrets.yaml
index 10f96c0..a92b9fc 100644
--- a/zuul.d/sp-cinder-secrets.yaml
+++ b/zuul.d/sp-cinder-secrets.yaml
@@ -39,19 +39,44 @@
           +0hU8JtzQ3FVLtHgSxr0zZ5k0JS30fYWg9dUjId7cge0lL8mOVzlky/yL1dRUM=
 
 - secret:
-    name: STORPOOL_CONF
+    name: STORPOOL_CONF_BLOCK
     data:
       v: !encrypted/pkcs1-oaep
-        - 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
+        - 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
+
+- secret:
+    name: STORPOOL_CONF_ISCSI
+    data:
+      v: !encrypted/pkcs1-oaep
+        - JjMx0I+ySQT/+BcKTa1OmjJ/Njm2Btjrx3KgGTY3eUh5kMPl6KNoNoyBGaK7FAXiSBEAA
+          aVD7+xk/MJiLVXxSNf6MsV2kUi/FaRv5itU+cx5fki3HSFbPEE7rAcOUz8457Hgs1zu31
+          OWHTwwU4dcg/URZzB/tdW47UpTYS7zVMQpjat7aL9xOCa5sWef3R6ZTUoT4qEMK17qe+L
+          IBtnjWPuuwPNba5PXNCoRzjJmbQfiKwhVw9etzWf2NiShFIwmbjxLdvlwD8fOCuUw4l4s
+          /FSAjtXZrlqGl7bIbpDTuENgrGnxrX9c9pf9YICeYMF3847ln2ZiJKQVIzIa20Qan56IQ
+          pBwY6a7KS5Nsy3zN7Q5Lm6TVvsq+f2ey1jkOjwB97TEjZn8u990ok2PAqSUhyZ6XWqtis
+          rR+sfdSYZc+YfF/0DfrvxVdPNBYK6T8lyPxRqiCONmt6GkOphpdlTsl1F0O1MKoC/bMqh
+          J6EiyMIwnt05ZAm6Kg5xdDFzthhgOtxPaaH8ffPWsxeuRUxs2KzA45t3iJjcacYVinnTe
+          kYbqxBy2ix1TzIAiYwbatXp9153HsAZZDIWHs2kznQQDVpEThKlRSMRVn1HFpNh1pmMA5
+          1ZoEs5/MtGLj4vkL85at7S20fsoQ4JiR6RxFIK3eTof5GO6gtO4Df+IxOuRlB4=
 
 - secret:
     name: STORPOOL_DEPLOY
@@ -269,29 +294,54 @@
           sUAv95LJu1UwePqTN4Ozcha6PWLgHi96tLZOj1tO5q/71+vOI6N+CYpUrRdhmE=
 
 - secret:
-    name: STORPOOL_INVENTORY
+    name: STORPOOL_BLOCK_INVENTORY
     data:
       v: !encrypted/pkcs1-oaep
-        - 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
+        - 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
+
+- secret:
+    name: STORPOOL_ISCSI_INVENTORY
+    data:
+      v: !encrypted/pkcs1-oaep
+        - gTrsuSsoVMUZlD3mdaxGSO+j9559mjLPGpKxsCKExj61xPN4Dja8fdZ3OnbtRRsCFemz4
+          ZPgU8acvTntEXEc1KVi0NMNaDnplNkGDHuJMT/SGREwc5SnF4AL86+IvEComy2b1NsuAk
+          bXlXHjpHf+DNBamIuQSVU99g2RGJ7v3OTHo8k3HoeRN5ll2gHSNGG+/lijbZpj1mKZ3f8
+          JzXaQ5fL7ibkLKUP5EKDtwOsj0UB3N2whvBAraGdoMH0XoBkldmNiacyl69WKhbv/+5//
+          c+iA8ri7uaESdXnjN4zyxj6Z4RNDZOYWBV+Sv6MYtmrE8yHvmIETMR4WkzObLZpSZtibE
+          7opvUXZP3aAtiVOn2oUvYa5YdDBOQMcMO/lRz0mhfBpa1sPsGN/8RwKTv8LqCB3tAzj3u
+          vgEDIo9ZBIvhsaJwJNXghHTqZYOney4ib/tOc990OeJeKpSu1vH7IFo91eJH28/UY8Urs
+          aqvjJauR8PXt9tE69hyCTzzHiP+gUcMtWo1Y2AbWRGV2Z/HkdsAuciDx02dJ2goa34xun
+          NIoNDLgfHB0LRY2qIc0/KjkUNro2NbaCuii5KQakvQMaNQtGweesyqkkWCCNmc0U0PHMd
+          UUxCpxsYtw52FxHaNYw2y8mOVSHYeb/0nTj0WOw1/M6CqDrRO9cthhWsGYgm4A=
+        - XPJfmCZEkNMld6y/KRjWeiLAs1M2E1o3KmCC0q3i5HkjWl+pHiCoMaagEk/1016NYj/9G
+          TaeMkAAwgqtI1l0s0/Q2A3ZoRgVCgXpi1FSzh8WCk7kicWUuwegOYj5adlqPTiAghZ28l
+          EkBwUOtuaI90/apw6m1lkNgk6FTOpytgLsGsq5pAGhJM9bZ3jJKJe5EQBuE19uuS+NSUe
+          8eYz6IKumzXU18tzqhdENgsjFkXqCsirjHMp895ZpHq0h+ehy64k9kwzaAJWoUtF0rvfU
+          Nyp6nPiKJB0h+aBOWTtsWmdPkWdZPu3+v+9yqSzvojf8DSIri9m2LIGM14CHSGMUaqKpK
+          Eo3AqQhNMU47Q2FCDEPByAw2oeyHuw9j6x4IHioiJT2w+agh4P2FNjhKnljgDslS392Iy
+          EKXAjZ8hB/sxdqU1hNEnF01xfDFk+INgzVttHA73jf0cNc6px5L3SEToLEmTUkMLyQs+T
+          evqoy3lDaIQPnzRkO7FHeB8bmuxkLuoGCZ+S3FXHk5N17+VCWwWIyIEg6jZtymmHF6OfS
+          /Qagbldw21DU885wDnO4I6OU2WJGLL6ALSDpVPshK4Xx/Mk0Ls1LJ+NCkSM0xuUNJ8+tx
+          b4BB5ldiXSSZHGVICUe6+yOQU2KaHNoCT1htIGfglOpLZR4nI9qk+9Vx6IAZDM=
 
 - secret:
     name: STORPOOL_ISCSI_NETPLAN
diff --git a/zuul.d/sp-cinder.yaml b/zuul.d/sp-cinder.yaml
index 2ec5e5d..5de6cd5 100644
--- a/zuul.d/sp-cinder.yaml
+++ b/zuul.d/sp-cinder.yaml
@@ -1,9 +1,43 @@
+- nodeset:
+    name: ubuntu2004-openstack-multi-node-mixed
+    nodes:
+      - name: controller
+        label: os-ubuntu2004-large
+      - name: undercloud-client
+        label: os-ubuntu2004-small
+      - name: lab-sp-a1
+        label: os-ubuntu2004-large
+    groups:
+      - name: tempest
+        nodes:
+          - controller
+
+- nodeset:
+    name: ubuntu2204-openstack-multi-node-mixed
+    nodes:
+      - name: controller
+        label: os-ubuntu2204-large
+      - name: undercloud-client
+        label: os-ubuntu2204-small
+      - name: lab-sp-a1
+        label: os-ubuntu2204-large
+    groups:
+      - name: tempest
+        nodes:
+          - controller
+
 - job:
     name: cinder-storpool-tempest
     parent: tempest-full
-    pre-run: playbooks/sp-init.yaml
+    pre-run:
+      - playbooks/sp-init.yaml
+      - playbooks/setup-openstack-client/pre.yaml
+      - playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
     run: playbooks/tempest-and-cinderlib-run.yaml
-    post-run: playbooks/sp-cleanup.yaml
+    cleanup-run:
+      - playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
+      - playbooks/setup-openstack-client/post.yaml
+      - playbooks/sp-cleanup.yaml
     required-projects:
       - opendev.org/openstack/cinderlib
       - opendev.org/openstack/os-brick
@@ -13,9 +47,39 @@
       - sp-osci
     timeout: 10800
     secrets:
+      # openstack-client
       - name: OPENSTACK_DATA
         secret: OPENSTACK_DATA
+      - name: RESOLVED_DATA
+        secret: RESOLVED_DATA
+
+      # openstack-iscsi-multipath-storpool
+      - name: STORPOOL_DEPLOY_KEY
+        secret: STORPOOL_DEPLOY_KEY
+      - name: STORPOOL_DEPLOY_KEY_PUB
+        secret: STORPOOL_DEPLOY_KEY_PUB
+      - name: STORPOOL_BLOCK_INVENTORY
+        secret: STORPOOL_BLOCK_INVENTORY
+      - name: STORPOOL_ISCSI_NETPLAN
+        secret: STORPOOL_ISCSI_NETPLAN
+      - name: STORPOOL_STORPOOL_NETPLAN
+        secret: STORPOOL_STORPOOL_NETPLAN
+      - name: STORPOOL_NETPLAN_SERVICE
+        secret: STORPOOL_NETPLAN_SERVICE
+      - name: STORPOOL_CONF_BLOCK
+        secret: STORPOOL_CONF_BLOCK
+      - name: STORPOOL_DEPLOY
+        secret: STORPOOL_DEPLOY
+      - name: STORPOOL_DEPLOY_INFO_CONF
+        secret: STORPOOL_DEPLOY_INFO_CONF
+      - name: STORPOOL_CONF_ISCSI_NODE
+        secret: STORPOOL_CONF_ISCSI_NODE
+      - name: ISCSI_NODE_SYSTEMD_NETWORKD
+        secret: ISCSI_NODE_SYSTEMD_NETWORKD
     vars:
+      os_venv: "~/sp-venv-openstack"
+      storpool_connection: "block"
+
       do_storprep: true
       devstack_localrc:
         CINDER_ENABLED_BACKENDS: storpool:storpool
@@ -81,34 +145,6 @@
 #        ^cinder_tempest_plugin
 #        (^(tempest\.((api\..*volume)|scenario\.test_encrypted_cinder_volumes|scenario\.test_volume|scenario\.test_shelve_instance))|(cinder_tempest_plugin))
 
-- nodeset:
-    name: ubuntu2004-openstack-multi-node-mixed
-    nodes:
-      - name: controller
-        label: os-ubuntu2004-large
-      - name: undercloud-client
-        label: os-ubuntu2004-small
-      - name: lab-sp-a1
-        label: os-ubuntu2004-large
-    groups:
-      - name: tempest
-        nodes:
-          - controller
-
-- nodeset:
-    name: ubuntu2204-openstack-multi-node-mixed
-    nodes:
-      - name: controller
-        label: os-ubuntu2204-large
-      - name: undercloud-client
-        label: os-ubuntu2204-small
-      - name: lab-sp-a1
-        label: os-ubuntu2204-large
-    groups:
-      - name: tempest
-        nodes:
-          - controller
-
 - job:
     name: cinder-storpool-tempest-iscsi-multipath-parent
     parent: tempest-full
@@ -145,16 +181,16 @@
         secret: STORPOOL_DEPLOY_KEY
       - name: STORPOOL_DEPLOY_KEY_PUB
         secret: STORPOOL_DEPLOY_KEY_PUB
-      - name: STORPOOL_INVENTORY
-        secret: STORPOOL_INVENTORY
+      - name: STORPOOL_ISCSI_INVENTORY
+        secret: STORPOOL_ISCSI_INVENTORY
       - name: STORPOOL_ISCSI_NETPLAN
         secret: STORPOOL_ISCSI_NETPLAN
       - name: STORPOOL_STORPOOL_NETPLAN
         secret: STORPOOL_STORPOOL_NETPLAN
       - name: STORPOOL_NETPLAN_SERVICE
         secret: STORPOOL_NETPLAN_SERVICE
-      - name: STORPOOL_CONF
-        secret: STORPOOL_CONF
+      - name: STORPOOL_CONF_ISCSI
+        secret: STORPOOL_CONF_ISCSI
       - name: STORPOOL_DEPLOY
         secret: STORPOOL_DEPLOY
       - name: STORPOOL_DEPLOY_INFO_CONF
@@ -166,6 +202,8 @@
 
     vars:
       os_venv: "~/sp-venv-openstack"
+      storpool_connection: "iscsi"
+
       zuul_copy_output:
         /etc/multipath.conf: logs_txt
         /etc/iscsi/iscsid.conf: logs_txt
@@ -256,16 +294,16 @@
         secret: STORPOOL_DEPLOY_KEY
       - name: STORPOOL_DEPLOY_KEY_PUB
         secret: STORPOOL_DEPLOY_KEY_PUB
-      - name: STORPOOL_INVENTORY
-        secret: STORPOOL_INVENTORY
+      - name: STORPOOL_ISCSI_INVENTORY
+        secret: STORPOOL_ISCSI_INVENTORY
       - name: STORPOOL_ISCSI_NETPLAN
         secret: STORPOOL_ISCSI_NETPLAN
       - name: STORPOOL_STORPOOL_NETPLAN
         secret: STORPOOL_STORPOOL_NETPLAN
       - name: STORPOOL_NETPLAN_SERVICE
         secret: STORPOOL_NETPLAN_SERVICE
-      - name: STORPOOL_CONF
-        secret: STORPOOL_CONF
+      - name: STORPOOL_CONF_ISCSI
+        secret: STORPOOL_CONF_ISCSI
       - name: STORPOOL_CONF_ISCSI_NODE
         secret: STORPOOL_CONF_ISCSI_NODE
       - name: ISCSI_NODE_SYSTEMD_NETWORKD