From b0359e37dff7d3207627cfa39f28c167a81426b5 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Tue, 25 Feb 2020 16:24:28 +0000
Subject: [PATCH] CentOS 8: Add seed and overcloud CI jobs, drop CentOS 7 jobs

CentOS 8 removes interfaces from their bridge during ifdown, and removes
the bridge if there are no interfaces left. When Kayobe bounces veth
links plugged into the bridge, it causes the bridge which has the IP we
are using for SSH to be removed. Use a dummy interface in CI to avoid
this problem.

Kolla-ansible has dropped all CentOS 7 jobs on master now, and prechecks
only allow CentOS 7 hosts. Drop all CentOS 7 jobs. We will have to run
without upgrade jobs in place until Train supports CentOS 8.

Depends-On: https://review.opendev.org/695881

Change-Id: I7c1a885b36445e33d4db1b1c8533db28a644b4a1
Story: 2006574
Task: 38870
---
 ansible/baremetal-compute-inspect.yml         |  2 +-
 .../kayobe-overcloud-base/overrides.yml.j2    |  7 +++++++
 playbooks/kayobe-overcloud-base/pre.yml       |  8 ++++++++
 playbooks/kayobe-seed-base/overrides.yml.j2   |  7 +++++++
 playbooks/kayobe-seed-base/pre.yml            |  8 ++++++++
 zuul.d/jobs.yaml                              | 16 +++++++--------
 zuul.d/nodesets.yaml                          |  6 ++++++
 zuul.d/project.yaml                           | 20 +++++++++++--------
 8 files changed, 57 insertions(+), 17 deletions(-)

diff --git a/ansible/baremetal-compute-inspect.yml b/ansible/baremetal-compute-inspect.yml
index 416f70ae..c6122437 100644
--- a/ansible/baremetal-compute-inspect.yml
+++ b/ansible/baremetal-compute-inspect.yml
@@ -6,7 +6,7 @@
 # We install openstacksdk in a virtualenv on one of the controllers, and delegate to
 # it when executing the stackhpc.os-ironic-state role.
 
-- name: Ensure dependencies are installed and the virtual environment is activated
+- name: Ensure dependencies are installed
   hosts: controllers[0]
   gather_facts: true
   vars:
diff --git a/playbooks/kayobe-overcloud-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-base/overrides.yml.j2
index c5f1689b..c6d9ca05 100644
--- a/playbooks/kayobe-overcloud-base/overrides.yml.j2
+++ b/playbooks/kayobe-overcloud-base/overrides.yml.j2
@@ -17,3 +17,10 @@ pip_upper_constraints_file: "/tmp/upper-constraints.txt"
 # Use the CI infra's PyPI mirror.
 pip_local_mirror: true
 pip_index_url: "http://{{ zuul_site_mirror_fqdn }}/pypi/simple"
+
+# NOTE(mgoddard): CentOS 8 removes interfaces from their bridge during ifdown,
+# and removes the bridge if there are no interfaces left. When Kayobe bounces
+# veth links plugged into the bridge, it causes the bridge which has the IP we
+# are using for SSH to be removed. Use a dummy interface.
+aio_bridge_ports:
+  - dummy1
diff --git a/playbooks/kayobe-overcloud-base/pre.yml b/playbooks/kayobe-overcloud-base/pre.yml
index f6d09b8a..8d471475 100644
--- a/playbooks/kayobe-overcloud-base/pre.yml
+++ b/playbooks/kayobe-overcloud-base/pre.yml
@@ -19,6 +19,14 @@
         - "ip l add breth1 type bridge"
         - "ip l set breth1 up"
         - "ip a add 192.168.33.3/24 dev breth1"
+        # NOTE(mgoddard): CentOS 8 removes interfaces from their bridge during
+        # ifdown, and removes the bridge if there are no interfaces left. When
+        # Kayobe bounces veth links plugged into the bridge, it causes the
+        # bridge which has the IP we are using for SSH to be removed. Use a
+        # dummy interface.
+        - "ip l add dummy1 type dummy"
+        - "ip l set dummy1 up"
+        - "ip l set dummy1 master breth1"
 
     - name: Ensure kayobe is installed
       shell:
diff --git a/playbooks/kayobe-seed-base/overrides.yml.j2 b/playbooks/kayobe-seed-base/overrides.yml.j2
index d0290d1e..b875cd23 100644
--- a/playbooks/kayobe-seed-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-base/overrides.yml.j2
@@ -21,3 +21,10 @@ overcloud_host_image_workaround_resolv_enabled: false
 # Use the CI infra's PyPI mirror.
 pip_local_mirror: true
 pip_index_url: "http://{{ zuul_site_mirror_fqdn }}/pypi/simple"
+
+# NOTE(mgoddard): CentOS 8 removes interfaces from their bridge during ifdown,
+# and removes the bridge if there are no interfaces left. When Kayobe bounces
+# veth links plugged into the bridge, it causes the bridge which has the IP we
+# are using for SSH to be removed. Use a dummy interface.
+aio_bridge_ports:
+  - dummy1
diff --git a/playbooks/kayobe-seed-base/pre.yml b/playbooks/kayobe-seed-base/pre.yml
index 291fa90a..6e1dbd8e 100644
--- a/playbooks/kayobe-seed-base/pre.yml
+++ b/playbooks/kayobe-seed-base/pre.yml
@@ -29,6 +29,14 @@
         - "ip l add breth1 type bridge"
         - "ip l set breth1 up"
         - "ip a add 192.168.33.5/24 dev breth1"
+        # NOTE(mgoddard): CentOS 8 removes interfaces from their bridge during
+        # ifdown, and removes the bridge if there are no interfaces left. When
+        # Kayobe bounces veth links plugged into the bridge, it causes the
+        # bridge which has the IP we are using for SSH to be removed. Use a
+        # dummy interface.
+        - "ip l add dummy1 type dummy"
+        - "ip l set dummy1 up"
+        - "ip l set dummy1 master breth1"
 
     - name: Ensure kayobe is installed
       shell:
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 196bef64..3a07b58e 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -92,9 +92,9 @@
     timeout: 7200
 
 - job:
-    name: kayobe-overcloud-centos
+    name: kayobe-overcloud-centos8
     parent: kayobe-overcloud-base
-    nodeset: kayobe-centos
+    nodeset: kayobe-centos8
 
 - job:
     name: kayobe-overcloud-upgrade-base
@@ -112,9 +112,9 @@
     attempts: 3
 
 - job:
-    name: kayobe-overcloud-upgrade-centos
+    name: kayobe-overcloud-upgrade-centos8
     parent: kayobe-overcloud-upgrade-base
-    nodeset: kayobe-centos
+    nodeset: kayobe-centos8
 
 - job:
     name: kayobe-seed-base
@@ -128,9 +128,9 @@
     timeout: 5400
 
 - job:
-    name: kayobe-seed-centos
+    name: kayobe-seed-centos8
     parent: kayobe-seed-base
-    nodeset: kayobe-centos
+    nodeset: kayobe-centos8
 
 - job:
     name: kayobe-seed-upgrade-base
@@ -148,6 +148,6 @@
     attempts: 3
 
 - job:
-    name: kayobe-seed-upgrade-centos
+    name: kayobe-seed-upgrade-centos8
     parent: kayobe-seed-upgrade-base
-    nodeset: kayobe-centos
+    nodeset: kayobe-centos8
diff --git a/zuul.d/nodesets.yaml b/zuul.d/nodesets.yaml
index 04067f11..96d75a90 100644
--- a/zuul.d/nodesets.yaml
+++ b/zuul.d/nodesets.yaml
@@ -4,3 +4,9 @@
     nodes:
       - name: primary
         label: centos-7
+
+- nodeset:
+    name: kayobe-centos8
+    nodes:
+      - name: primary
+        label: centos-8
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 74d01e5d..5b059ae2 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -10,10 +10,12 @@
         - kayobe-tox-ansible-syntax
         - kayobe-tox-ansible
         - kayobe-tox-molecule
-        - kayobe-overcloud-centos
-        - kayobe-overcloud-upgrade-centos
-        - kayobe-seed-centos
-        - kayobe-seed-upgrade-centos
+        - kayobe-overcloud-centos8
+        # TODO(mgoddard): Enable upgrade jobs when CentOS 8 support in Train.
+        # - kayobe-overcloud-upgrade-centos8
+        - kayobe-seed-centos8
+        # TODO(mgoddard): Enable upgrade jobs when CentOS 8 support in Train.
+        # - kayobe-seed-upgrade-centos8
 
     gate:
       queue: kayobe
@@ -21,7 +23,9 @@
         - kayobe-tox-ansible-syntax
         - kayobe-tox-ansible
         - kayobe-tox-molecule
-        - kayobe-overcloud-centos
-        - kayobe-overcloud-upgrade-centos
-        - kayobe-seed-centos
-        - kayobe-seed-upgrade-centos
+        - kayobe-overcloud-centos8
+        # TODO(mgoddard): Enable upgrade jobs when CentOS 8 support in Train.
+        # - kayobe-overcloud-upgrade-centos8
+        - kayobe-seed-centos8
+        # TODO(mgoddard): Enable upgrade jobs when CentOS 8 support in Train.
+        # - kayobe-seed-upgrade-centos
-- 
GitLab