Run sonobuoy on tests

Supported modes by sonobuoy are:
certified-conformance conformance-lite non-disruptive-conformance quick

Default to quick

Change-Id: I75cef50d022b3145719bb4271969297b5fd1beba
This commit is contained in:
Michal Nasiadka 2024-02-05 10:46:11 +00:00
parent b3c601735b
commit 95f10fa786
5 changed files with 220 additions and 1 deletions

148
.zuul.yaml Normal file
View File

@ -0,0 +1,148 @@
<<<<<<< PATCH SET (b70060 Run sonobuoy on tests)
- project:
queue: magnum
templates:
- check-requirements
- tempest-plugin-jobs
check:
jobs:
- magnum-tempest-plugin-tests-api
- magnum-tempest-plugin-tests-api-rbac
- magnum-tempest-plugin-tests-api-2023-1
- magnum-tempest-plugin-tests-api-zed
- magnum-tempest-plugin-tests-api-yoga
- magnum-tempest-plugin-tests-cluster-k8s_fcos_v1
gate:
jobs:
- magnum-tempest-plugin-tests-api
- job:
name: magnum-tempest-plugin-tests-api-2023-1
parent: magnum-tempest-plugin-tests-api
nodeset: openstack-single-node-jammy
override-checkout: stable/2023.1
- job:
name: magnum-tempest-plugin-tests-api-zed
parent: magnum-tempest-plugin-tests-api
nodeset: openstack-single-node-focal
override-checkout: stable/zed
- job:
name: magnum-tempest-plugin-tests-api-yoga
parent: magnum-tempest-plugin-tests-api
nodeset: openstack-single-node-focal
override-checkout: stable/yoga
- job:
name: magnum-tempest-plugin-tests-api-rbac
parent: magnum-tempest-plugin-tests-api
vars:
tempest_test_regex: ^magnum_tempest_plugin.tests.api.v1.rbac
devstack_localrc:
MAGNUM_ENFORCE_SCOPE: true
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
enforce_scope:
magnum: true
- job:
name: magnum-tempest-plugin-tests-cluster-k8s_fcos_v1
parent: magnum-tempest-plugin-tests-cluster
- job:
name: magnum-tempest-plugin-tests-api
parent: magnum-tempest-plugin-base
vars:
tox_envlist: all
tempest_test_regex: ^magnum_tempest_plugin.tests.api
tempest_exclude_regex: (test_create_list_sign_delete_clusters|test_create_cluster_with_zero_nodes)
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
magnum:
image_id: fedora-coreos-38.20230806.3.0-openstack.x86_64
nic_id: public
keypair_id: default
flavor_id: ds2G
master_flavor_id: ds2G
copy_logs: true
- job:
name: magnum-tempest-plugin-tests-cluster
parent: magnum-tempest-plugin-base
nodeset: magnum-nested-virt-ubuntu-jammy
vars:
configure_swap_size: 8192
tox_envlist: all
tempest_test_regex: ^magnum_tempest_plugin.tests.api.v1.test_cluster.ClusterTest.test_create_list_sign_delete_clusters
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
magnum:
image_id: fedora-coreos-38.20230806.3.0-openstack.x86_64
nic_id: public
keypair_id: default
flavor_id: ds2G
master_flavor_id: ds2G
copy_logs: true
copy_logs_sucess: true
sonobuoy_mode: conformance-lite
devstack_localrc:
LIBVIRT_TYPE: kvm
LIBVIRT_CPU_MODE: host-passthrough
zuul_copy_output:
/tmp/magnum-nodes: logs
- job:
name: magnum-tempest-plugin-base
description: |
Magnum functional tests base layer
parent: devstack-tempest
required-projects:
- openstack/barbican
- openstack/heat
- openstack/magnum
- openstack/magnum-tempest-plugin
- openstack/python-magnumclient
vars:
tempest_plugins:
- magnum-tempest-plugin
devstack_localrc:
USE_PYTHON3: true
GLANCE_LIMIT_IMAGE_SIZE_TOTAL: 5000
MAGNUM_GUEST_IMAGE_URL: https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/38.20230806.3.0/x86_64/fedora-coreos-38.20230806.3.0-openstack.x86_64.qcow2.xz
MAGNUM_IMAGE_NAME: fedora-coreos-38.20230806.3.0-openstack.x86_64
devstack_plugins:
heat: https://opendev.org/openstack/heat
barbican: https://opendev.org/openstack/barbican
magnum: https://opendev.org/openstack/magnum
devstack_services:
# Disable swift and dependent c-bak service to support upload of .qcow2.xz image in the gate
s-account: false
s-container: false
s-object: false
s-proxy: false
c-bak: false
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^specs/.*$
- ^install-guide/.*$
- ^releasenotes/.*$
- ^dockerfiles/.*$
- nodeset:
name: magnum-nested-virt-ubuntu-jammy
nodes:
- name: controller
label: nested-virt-ubuntu-jammy
groups:
- name: tempest
nodes:
- controller
=======
>>>>>>> BASE (b3c601 CI: Wait before checking pods status)

View File

@ -14,6 +14,7 @@ import logging
import os
import subprocess
from pathlib import Path
from tempest import config
from tempest import test
@ -121,3 +122,47 @@ class BaseMagnumTest(test.BaseTestCase):
except Exception as e:
cls.LOG.exception(e)
raise
@classmethod
def run_sonobuoy(cls, sonobuoy_mode="quick"):
"""Run sonobuoy
This method will run sonobuoy tests,
expects a kube.config file under /tmp/magnum-nodes/
"""
try:
cls.LOG.debug("running sonobuoy")
subprocess.check_call(["/opt/stack/bin/sonobuoy",
"run",
"--mode",
sonobuoy_mode,
"--wait",
"--kubeconfig",
"/tmp/magnum-nodes/kube.conf"])
except Exception as e:
cls.LOG.exception(e)
raise
if sonobuoy_mode != "quick":
try:
cls.LOG.debug("retrieving sonobuoy logs")
Path("/tmp/magnum-nodes/sonobuoy").mkdir(parents=True,
exist_ok=True)
subprocess.check_call(["/opt/stack/bin/sonobuoy",
"retrieve",
"--extract",
"--retrieve-path",
"/tmp/magnum-nodes/sonobuoy",
"--kubeconfig",
"/tmp/magnum-nodes/kube.conf"])
except Exception as e:
cls.LOG.exception(e)
cls.LOG.debug("Getting aggregator logs")
aggregator = subprocess.check_call(["/opt/stack/bin/kubectl",
"logs",
"sonobuoy",
"-nsonobuoy"])
with open("/tmp/magnum-nodes/sonobuoy_logs.txt") as outfile:
outfile.write(aggregator)
raise

View File

@ -161,6 +161,14 @@ class Config(object):
def set_labels(cls, config):
cls.labels = ast.literal_eval(CONF.magnum.labels)
@classmethod
def set_run_sonobuoy(cls, config):
cls.run_sonobuoy = CONF.magnum.run_sonobuoy
@classmethod
def set_sonobuoy_mode(cls, config):
cls.sonobuoy_mode = CONF.magnum.sonobuoy_mode
@classmethod
def setUp(cls):
cls.set_admin_creds(config)
@ -185,3 +193,5 @@ class Config(object):
cls.set_cluster_template_id(config)
cls.set_cluster_creation_timeout(config)
cls.set_labels(config)
cls.set_run_sonobuoy(config)
cls.set_sonobuoy_mode(config)

View File

@ -79,7 +79,10 @@ class ClusterTestTemplate(base.BaseTempestTest):
# NOTE (dimtruck) by default tempest sets timeout to 20 mins.
# We need more time.
test_timeout = 3600
if config.Config.run_sonobuoy:
test_timeout = 7200
else:
test_timeout = 3600
self.useFixture(fixtures.Timeout(test_timeout, gentle=True))
def tearDown(self):
@ -256,6 +259,12 @@ users:
except Exception as e:
self.LOG.debug("kubectl exception: %s\n" % e)
raise
if config.Config.run_sonobuoy:
try:
self.run_sonobuoy(config.Config.sonobuoy_mode)
except Exception as e:
self.LOG.debug("sonobuoy exception: %s\n" % e)
raise
# test cluster delete
self._delete_cluster(cluster_model.uuid)

View File

@ -86,4 +86,11 @@ MagnumGroup = [
cfg.StrOpt("labels",
default={},
help="A dict of labels to be defined in cluster template"),
cfg.BoolOpt("run_sonobuoy",
default=True,
help="Specify whether to run sonobuoy in cluster creation "
"test"),
cfg.StrOpt("sonobuoy_mode",
default="quick",
help="Sonobuoy mode, default is quick"),
]