From 7a3072e94c76aa2ca28c20c3a77e34a022948efd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rados=C5=82aw=20Piliszek?= <radoslaw.piliszek@gmail.com>
Date: Tue, 25 Aug 2020 16:17:17 +0200
Subject: [PATCH] [CI] Ensure network is set for Zun

If we don't set it, then Zun chooses one randomly (the first one
from Neutron).
This may break if it is a network that is not available on
target hosts, e.g. external via L3 agent router.

Since capsules do not support nets yet [1], this patch ensures
desired network creation order in init-runonce instead.

[1] https://bugs.launchpad.net/zun/+bug/1895263

Change-Id: Iaa113dcfb826164a2772d2c91d34ec0236be0817
---
 tests/test-zun.sh  | 10 ++++++++--
 tools/init-runonce | 19 +++++++++----------
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/tests/test-zun.sh b/tests/test-zun.sh
index 909acb6af..cca4df4e3 100755
--- a/tests/test-zun.sh
+++ b/tests/test-zun.sh
@@ -15,7 +15,7 @@ function test_zun_logged {
     openstack subnet set --no-dhcp demo-subnet
     sudo docker pull alpine
     sudo docker save alpine | openstack image create alpine --public --container-format docker --disk-format raw
-    openstack appcontainer run --name test alpine sleep 1000
+    openstack appcontainer run --net network=demo-net --name test alpine sleep 1000
     attempt=1
     while [[ $(openstack appcontainer show test -f value -c status) != "Running" ]]; do
         echo "Container not running yet"
@@ -61,7 +61,7 @@ function test_zun_logged {
         fi
         sleep 10
     done
-    openstack appcontainer run --name test2 --mount source=zun_test_volume,destination=/data alpine sleep 1000
+    openstack appcontainer run --net network=demo-net --name test2 --mount source=zun_test_volume,destination=/data alpine sleep 1000
     attempt=1
     while [[ $(openstack volume show zun_test_volume -f value -c status) != "in-use" ]]; do
         echo "Volume not attached yet"
@@ -105,6 +105,12 @@ capsuleVersion: beta
 kind: capsule
 metadata:
   name: capsule-test
+# NOTE(yoctozepto): Capsules do not support nets in Ussuri.
+# See https://bugs.launchpad.net/zun/+bug/1895263
+# The choice for CI is worked around by ensuring the networks are created
+# in the desired order in init-runonce.
+#nets:
+#  - network: demo-net
 spec:
   containers:
   - image: alpine
diff --git a/tools/init-runonce b/tools/init-runonce
index 30c10c332..ac07c5a72 100755
--- a/tools/init-runonce
+++ b/tools/init-runonce
@@ -77,22 +77,21 @@ $KOLLA_OPENSTACK_COMMAND image create --disk-format qcow2 --container-format bar
     --property os_type=${IMAGE_TYPE} --file ${IMAGE_PATH}/${IMAGE} ${IMAGE_NAME}
 
 echo Configuring neutron.
-if [[ $ENABLE_EXT_NET -eq 1 ]]; then
-    $KOLLA_OPENSTACK_COMMAND network create --external --provider-physical-network physnet1 \
-        --provider-network-type flat public1
-    $KOLLA_OPENSTACK_COMMAND subnet create --no-dhcp \
-        --allocation-pool ${EXT_NET_RANGE} --network public1 \
-        --subnet-range ${EXT_NET_CIDR} --gateway ${EXT_NET_GATEWAY} public1-subnet
-fi
+
+$KOLLA_OPENSTACK_COMMAND router create demo-router
 
 $KOLLA_OPENSTACK_COMMAND network create demo-net
 $KOLLA_OPENSTACK_COMMAND subnet create --subnet-range 10.0.0.0/24 --network demo-net \
     --gateway 10.0.0.1 --dns-nameserver 8.8.8.8 demo-subnet
-
-$KOLLA_OPENSTACK_COMMAND router create demo-router
 $KOLLA_OPENSTACK_COMMAND router add subnet demo-router demo-subnet
+
 if [[ $ENABLE_EXT_NET -eq 1 ]]; then
-  $KOLLA_OPENSTACK_COMMAND router set --external-gateway public1 demo-router
+    $KOLLA_OPENSTACK_COMMAND network create --external --provider-physical-network physnet1 \
+        --provider-network-type flat public1
+    $KOLLA_OPENSTACK_COMMAND subnet create --no-dhcp \
+        --allocation-pool ${EXT_NET_RANGE} --network public1 \
+        --subnet-range ${EXT_NET_CIDR} --gateway ${EXT_NET_GATEWAY} public1-subnet
+    $KOLLA_OPENSTACK_COMMAND router set --external-gateway public1 demo-router
 fi
 
 # Get admin user and tenant IDs
-- 
GitLab