setup-openstack-iscsi-multipath-storpool: Add Interface to OpenStack Node

Change-Id: Ide5e528c743d2d9e0a0afb4c1af51a437044b67c
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
index e0164d7..d9e1677 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/post.yaml
@@ -14,15 +14,28 @@
           - "{{ storpool_node }}"
           - "{{ item }}"
       loop:
-        - "{{ port_sp_api }}"
+        - "{{ 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
+          - "{{ storpool_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_sp_api }}"
+        - "{{ port_node_1_sp_api }}"
+        - "{{ port_node_2_sp_api }}"
         - "{{ port_sp0 }}"
         - "{{ port_sp1 }}"
 
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
index b456e73..14e0ce2 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/pre.yaml
@@ -50,7 +50,8 @@
           - --disable-port-security
           - "{{ item.port }}"
       loop:
-        - { network: "{{ network_sp_api }}", subnet: "{{ subnet_sp_api }}", ip: "{{ ip_sp_api }}", port: "{{ port_sp_api }}" }
+        - { 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 }}" }
 
@@ -66,18 +67,39 @@
           - "{{ storpool_node }}"
           - "{{ item }}"
       loop:
-        - "{{ port_sp_api }}"
+        - "{{ port_node_1_sp_api }}"
         - "{{ port_sp0 }}"
         - "{{ port_sp1 }}"
 
-    - name: Get Information About port_sp_api
+    - name: Attach the StorPool API Port to the OpenStack Node
       ansible.builtin.command:
-        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_sp_api }}" ]
-      register: port_sp_api_info
+        argv:
+          - "{{ os_venv }}/bin/openstack"
+          - --os-cloud
+          - openstack-testing
+          - server
+          - add
+          - port
+          - "{{ openstack_node }}"
+          - "{{ port_node_2_sp_api }}"
 
-    - name: Get MAC Address of port_sp_api
+    - 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 }}" ]
+      register: port_node_1_sp_api_info
+
+    - name: Get MAC Address of port_node_1_sp_api
       ansible.builtin.set_fact:
-        port_sp_api_mac: "{{ (port_sp_api_info.stdout | from_json).mac_address }}"
+        port_node_1_sp_api_mac: "{{ (port_node_1_sp_api_info.stdout | from_json).mac_address }}"
+
+    - name: Get Information About port_node_2_sp_api
+      ansible.builtin.command:
+        argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ port_node_2_sp_api }}" ]
+      register: port_node_2_sp_api_info
+
+    - name: Get MAC Address of port_node_2_sp_api
+      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
       ansible.builtin.command:
@@ -152,17 +174,17 @@
     - vars.yaml
   tasks:
     - set_fact:
-        ip_sp_api_wo_net: "{{ ip_sp_api }}"
+        ip_sp_api_wo_net: "{{ ip_port_1_sp_api }}"
 
     - set_fact:
-        port_sp_api_mac: "{{ hostvars['undercloud-client']['port_sp_api_mac'] }}"
+        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_iscsi0_mac: "{{ hostvars['undercloud-client']['port_node_1_iscsi0_mac'] }}"
         sp_iscsi1_mac: "{{ hostvars['undercloud-client']['port_node_1_iscsi1_mac'] }}"
         ip_node_1_iscsi0: "{{ hostvars['undercloud-client']['ip_node_1_iscsi0'] }}/24"
         ip_node_1_iscsi1: "{{ hostvars['undercloud-client']['ip_node_1_iscsi1'] }}/24"
-        ip_sp_api: "{{ ip_sp_api }}/24"
+        ip_node_1_sp_api: "{{ ip_node_1_sp_api }}/24"
         ip_sp0: "{{ ip_sp0 }}/24"
         ip_sp1: "{{ ip_sp1 }}/24"
 
@@ -178,7 +200,7 @@
         dest: /etc/netplan/60-storpool.yaml
 
     - set_fact:
-        ip_sp_api: "{{ ip_sp_api_wo_net }}"
+        ip_port_1_sp_api: "{{ ip_sp_api_wo_net }}"
 
     - name: Generate Netplan
       become: true
@@ -351,8 +373,10 @@
         executable: pip3
 
     - set_fact:
+        port_node_2_sp_api_mac: "{{ hostvars['undercloud-client']['port_node_2_sp_api_mac'] }}"
         mac_node_2_iscsi0: "{{ hostvars['undercloud-client']['port_node_2_iscsi0_mac'] }}"
         mac_node_2_iscsi1: "{{ hostvars['undercloud-client']['port_node_2_iscsi1_mac'] }}"
+        ip_node_2_sp_api: "{{ ip_node_2_sp_api }}/24"
         ip_node_2_iscsi0: "{{ hostvars['undercloud-client']['ip_node_2_iscsi0'] }}/24"
         ip_node_2_iscsi1: "{{ hostvars['undercloud-client']['ip_node_2_iscsi1'] }}/24"
 
@@ -387,6 +411,21 @@
         dest: /etc/systemd/network/61-storpool-iscsi-2.network
 
     - set_fact:
+        iscsi_ip: "{{ port_node_2_sp_api_mac }}"
+        iscsi_mac: "{{ ip_node_2_sp_api }}"
+
+    - set_fact:
+        systemd_networkd_iscsi: "{{ hostvars['localhost'].ISCSI_NODE_SYSTEMD_NETWORKD.v }}"
+      no_log: true
+
+    - name: Provision the Netplan Template for SP API Network
+      no_log: true
+      become: true
+      ansible.builtin.copy:
+        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
 
diff --git a/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml b/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
index 86c46c0..8334358 100644
--- a/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
+++ b/playbooks/setup-openstack-iscsi-multipath-storpool/vars.yaml
@@ -1,6 +1,7 @@
 storpool_node: "{{ hostvars['lab-sp-a1']['nodepool']['external_id'] }}"
 storpool_node_ip: "{{ hostvars['lab-sp-a1']['nodepool']['interface_ip'] }}"
 undercloud_client_node: "{{ hostvars['undercloud-client']['nodepool']['external_id'] }}"
+openstack_node: "{{ hostvars['controller']['nodepool']['external_id'] }}"
 
 storpool_volume: "{{ undercloud_client_node }}-storpool-volume"
 
@@ -8,7 +9,8 @@
 network_ip_sp0: "192.168.20.0/24"
 network_ip_sp1: "192.168.30.0/24"
 
-ip_sp_api: "192.168.10.3"
+ip_node_1_sp_api: "192.168.10.3"
+ip_node_2_sp_api: "192.168.10.4"
 ip_sp0: "192.168.20.3"
 ip_sp1: "192.168.30.3"
 
@@ -20,6 +22,7 @@
 subnet_sp0: "{{ undercloud_client_node }}-subnet-sp0"
 subnet_sp1: "{{ undercloud_client_node }}-subnet-sp1"
 
-port_sp_api: "{{ undercloud_client_node }}-port-sp-api"
+port_node_1_sp_api: "{{ undercloud_client_node }}-port-node-1-sp-api"
+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"
diff --git a/zuul.d/sp-cinder-secrets.yaml b/zuul.d/sp-cinder-secrets.yaml
index 9a583bb..f2462bb 100644
--- a/zuul.d/sp-cinder-secrets.yaml
+++ b/zuul.d/sp-cinder-secrets.yaml
@@ -57,16 +57,16 @@
     name: STORPOOL_CONF_ISCSI_NODE
     data:
       v: !encrypted/pkcs1-oaep
-        - hANtHFqL+R8V/Ma6iA3+bzdErU3GJsh2LsUVGnU5j14GidJC38gaks4ydcjZBArBDnVZL
-          DLRLsfhNoQvCNCIibmMXooU8uRhPVI/T9hcy5IUtEIj+PkskrSNWakJ3U/qMxO6YGBgCb
-          P/BmB5oQx4yCTy0jnzsBXEQM5+TD6Xo/Y1U6p0WZ08QJeyMM6cdGbJcKttZDUHWlXuOCx
-          1hxWCvoJ3AsP7z3wnXVkKHA/ADzrDyzzEClPxJ3QD5o2ZN/pgaw+0WNZrNWuwQ4EBSxsz
-          +ftQ4qO7brec5UTpJ2Jhufb51jq3JPXlgCcSYAZ9k0qGhcH1te6uYiFQoUWyC5+enYyRl
-          omFL80mScGRR2oZuXVjCk5MX7XrNIxtPGEi/7zTK8icQV7FsPoG7Qo7XTfOftACZcScWM
-          tjsAFMovgVnyS/wy9nV5QW4uN2dFs7UE+C5EToi8nqWyNR7F0BCnsybg6RaMdQSKngXRc
-          gzhZKSeLm7AwlEayI63JAkpmDOImxFBalPD7KPVRv3QrfqiLG1Er62DbO3YyFwrkO6FNX
-          FfOnVJQQR2zt9sc/p8+WYDieiUJFSPl+/SQ2KI77mEu+zw/VB0CMMziLZkU9k+LEk3Npn
-          mcLQOYOlqqgVV3ZZbc8ZWWEPzIP8agQ5WzsxcFt+XIhSFF3zxt8d/brNEiSORQ=
+        - T4G8EPQYTiDA19NuY7RA3X2lQsdQQKJ1oJoM1NhC+JcR2jfPSuanwaIsPj5k48bkmddR/
+          8e7OJZYOBngiOaR7EXt5MKywgeLgXEgSDp6L1XGu+8cxPqGnuvD4BqkYLV3VnxJQquuke
+          4Wth1T07JIkCPCgtvNFrFZgIcSQDk27bOvyy5np+oLVkaMFFiiO/XHkjFwq0QjIMG+9fK
+          /F+eBXLaz575LM2ClpBeIWhQBhdWO1XgUUyOQDw4D7sgBLnNa5TK+TV1vjZZ1QqVc1Sde
+          V9LMorYlEf6ychPPaU6sNjOgAouGS/ba1v6gwFI0baVwFfs2KnjoQdMJ+ytYJIPckpw0j
+          dDL26aKL7vkQUkbPCxJ0EPt1K4R/WBiBI/EXygHr8MtcTJ0R2L5Fy1gbk+x06Dxzy2gBT
+          qBqgttfZ5Sr1VcoGEAUCi52lZSj6KWiVZnvm6c4c2coqfsqUTM0GseauoY43BhOu7itZ1
+          vkT8CKe77C7tTHp6HGtqYhRU+p4OZRXSHM5fAlfl+x4W0ShFYE/ne+/fyEYTMRM3c0Xs+
+          aKHzpdQ0ORDT+syNkBzgxdohURPhbI/34buoNCmAVIp7DbBEgV9LnCSHGf3Il4Lemoo38
+          XPKoZ9BpU1/+JDZXeIV39OhMLZUlwgA2y2fMC/nz20IKcEfCbaH6Vs2eLQxShE=
 
 - secret:
     name: STORPOOL_DEPLOY_KEY
@@ -197,26 +197,26 @@
     name: STORPOOL_NETPLAN
     data:
       v: !encrypted/pkcs1-oaep
-        - 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
+        - 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
 
 - secret:
     name: STORPOOL_NETPLAN_SERVICE
@@ -237,13 +237,13 @@
     name: ISCSI_NODE_SYSTEMD_NETWORKD
     data:
       v: !encrypted/pkcs1-oaep
-        - GOOTGl66YKOo1nI/j778efZ8ghX1dPjN07d355OleMthGWi6bnCx7Y7N/+DOLScC2ye27
-          JDNnz3WQlO7EQQITUjhgSAe6EnOzAUo61yKCRI3BYRnIx93HGMwILAc/yvSAGkSBwSxfT
-          GnchS56y8GXQbswk5EcXuRGC1Ar1zQ/UWFr1J/XPa6cf26TOD7WUqEWSDoThiF9obgROr
-          lyomirPhui1UXW7k376hu7ue0mKBm0f8AdAq38YXGbxq5RcUfu2ADP32OASXnUJJGcbNW
-          z3KdOupwzrZ+Pl68pWjv8/y84QXi3r4vwdibKJWOND6ptYCEWQU2WJ2ppAngZER04WFnv
-          mQHw+wn7t6nrBkMxJzitHyuCfFoyT5tkc9qTfbalWWqle+7QwDM/Kj9FsPnQLoFQ6oKRI
-          DiLW8vrRBsSKn2gvfunQidZ0Jg58w3leaDkbhYnmRVNuEiS/RIs7FQ8XBTqBxIp+yN1Xo
-          lqOU+jXyZTm1EJHYTZb9WnagP1XSSxwZoIsDMZKC9rZEEUtDO5UKw34wRVpWA7CCq/aIS
-          ENRT9QZjFdN/rOD+/7mLw96/BD5OGZqINKUyAKwptZ9BXfY+F5Swd/nQgghLIwrKg9u4K
-          3BcCDROMcCK3NSPW1EuhPenz8hRSEfVb4dozJ/Q/QEjIhSBRdI318hEbAnyb3I=
+        - dt4xX89TItfHOHgzdDl3iOk0/fJcVNbUH/zw0ayCGmjfF3k4ruAqizNBOw3Ld6xTTCu7x
+          lLff2UcT+neUh2uxU8Vt4UyzVv+idwfMw20uRYbDMnusQM4PeTb0IXlXVYE/N/YBjGZ7K
+          oUj9xNGj51wSqIr+8JCvyBzDN2v9gA3PhRvM9Vj6+8l/mLQQRknGwC2tQUC/nayjt+1p2
+          bWeznWjm1acHcG/0ZTk8ZJ7Q8LKJBcyqFRfwvDkxifsncw/N4VwlSDbnh3fXFB1ylvYaV
+          t7/4gavq5uI+LDO33+gcVyuuCA+diPYuieBCdMemkUZJaGj1sUWC14arPu6ZFKvHGBwut
+          QPfDWISxoHXEupkH+vJYYF0OAaD0lXfV2THEu0zHxZjd64VSJfQIWNsyWughckhjpygZA
+          IYT/ml2nzrcHxOhhCUoZ9+9rtbLVl3Nz8MWmbK29+FS7dZCgdhGqgGJTL9pb0k7XcXcsI
+          DEWa2hETcLXNYB+DaUB377v2zvTYAR0Q/8E/hK2TMtauSkC9ssjd9D2Tl2eGNVmUAhLJG
+          +HKE2FYm8+xuy22Xk+08cMCogzwyhyj5zjukHDYabcxyKL7SgIEfmVcs5hfb2XbahIUla
+          aHiji/q4RAqRgz3tAM92/GAPAtn+NoAjE1QvnFdpV9CSW08VjgFODOVqtAgQZU=