From 0b2c88ee59b52312c86bcceea1645a57671894af Mon Sep 17 00:00:00 2001 From: Valerii Ponomarov Date: Tue, 2 Apr 2019 22:35:45 +0530 Subject: Fix support of OCP3.6 and 3.7 Project has lots of inconsistencies with OCP3.6 and 3.7 So, fix it. Change-Id: I8d38773637b779e1c2e1631568f100c1ab1fdd50 --- .../openshiftstoragelibs/baseclass.py | 8 +++++-- .../openshiftstoragelibs/openshift_ops.py | 26 +++++++++++++++++++--- .../openshiftstoragelibs/openshift_version.py | 2 +- tests/functional/arbiter/test_arbiter.py | 5 +++++ .../test_dynamic_provisioning_block.py | 5 +++++ .../provisioning/test_dynamic_provisioning_file.py | 15 +++++++++++++ tests/functional/provisioning/test_pv_resize.py | 3 +-- .../provisioning/test_storage_class_cases.py | 6 +++++ 8 files changed, 62 insertions(+), 8 deletions(-) diff --git a/openshift-storage-libs/openshiftstoragelibs/baseclass.py b/openshift-storage-libs/openshiftstoragelibs/baseclass.py index 375ab7c0..9b6976f6 100644 --- a/openshift-storage-libs/openshiftstoragelibs/baseclass.py +++ b/openshift-storage-libs/openshiftstoragelibs/baseclass.py @@ -28,6 +28,7 @@ from openshiftstoragelibs.openshift_ops import ( wait_for_pod_be_ready, wait_for_resource_absence, ) +from openshiftstoragelibs.openshift_version import get_openshift_version class BaseClass(unittest.TestCase): @@ -214,8 +215,11 @@ class BaseClass(unittest.TestCase): for pvc_name in pvc_names: verify_pvc_status_is_bound(node, pvc_name, timeout, wait_step) finally: - reclaim_policy = oc_get_custom_resource( - node, 'sc', ':.reclaimPolicy', sc_name)[0] + if get_openshift_version() < "3.9": + reclaim_policy = "Delete" + else: + reclaim_policy = oc_get_custom_resource( + node, 'sc', ':.reclaimPolicy', sc_name)[0] for pvc_name in pvc_names: if reclaim_policy == 'Retain': diff --git a/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py b/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py index ae0de983..26d7d0b6 100644 --- a/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py +++ b/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py @@ -1298,9 +1298,29 @@ def get_events(hostname, field_selector.append('reason=%s' % event_reason) if event_type: field_selector.append('type=%s' % event_type) - cmd = "oc get events -o yaml --field-selector %s" % ",".join( - field_selector or "''") - return yaml.load(command.cmd_run(cmd, hostname=hostname))['items'] + cmd = "oc get events -o yaml" + if openshift_version.get_openshift_version() >= '3.9': + cmd.append(" --field-selector %s" % ",".join(field_selector or "''")) + objects = yaml.load(command.cmd_run(cmd, hostname=hostname))['items'] + if openshift_version.get_openshift_version() >= '3.9': + return objects + + # Backup approach for OCP3.6 and OCP3.7 which do not have + # '--field-selector' feature. + filtered_objects = [] + for o in objects: + if obj_name and o["involvedObject"]["name"] != obj_name: + continue + if obj_namespace and o["involvedObject"]["namespace"] != obj_namespace: + continue + if obj_type and o["involvedObject"]["kind"] != obj_type: + continue + if event_reason and o["reason"] != event_reason: + continue + if event_type and o["type"] != event_type: + continue + filtered_objects.append(o) + return filtered_objects def wait_for_events(hostname, diff --git a/openshift-storage-libs/openshiftstoragelibs/openshift_version.py b/openshift-storage-libs/openshiftstoragelibs/openshift_version.py index bc0c9be0..e1e7adaf 100644 --- a/openshift-storage-libs/openshiftstoragelibs/openshift_version.py +++ b/openshift-storage-libs/openshiftstoragelibs/openshift_version.py @@ -31,7 +31,7 @@ import six from openshiftstoragelibs import exceptions -OPENSHIFT_VERSION_RE = r"(?:v?)(\d+)(?:\.)(\d+)(?:\.(\d+))?$" +OPENSHIFT_VERSION_RE = r"(?:v?)(\d+)(?:\.)(\d+)(?:\.(\d+))?.*" OPENSHIFT_VERSION = None diff --git a/tests/functional/arbiter/test_arbiter.py b/tests/functional/arbiter/test_arbiter.py index ad1094b4..d8442b31 100644 --- a/tests/functional/arbiter/test_arbiter.py +++ b/tests/functional/arbiter/test_arbiter.py @@ -15,6 +15,7 @@ from openshiftstoragelibs.openshift_ops import ( wait_for_pod_be_ready, wait_for_resource_absence, ) +from openshiftstoragelibs.openshift_version import get_openshift_version @ddt.ddt @@ -23,6 +24,10 @@ class TestArbiterVolumeCreateExpandDelete(BaseClass): def setUp(self): super(TestArbiterVolumeCreateExpandDelete, self).setUp() self.node = self.ocp_master_node[0] + if get_openshift_version() < "3.9": + self.skipTest("Arbiter feature cannot be used on OCP older " + "than 3.9, because 'volumeoptions' for Heketi " + "is not supported there.") version = heketi_version.get_heketi_version(self.heketi_client_node) if version < '6.0.0-11': self.skipTest("heketi-client package %s does not support arbiter " diff --git a/tests/functional/provisioning/test_dynamic_provisioning_block.py b/tests/functional/provisioning/test_dynamic_provisioning_block.py index 8b668d62..88d9c9f8 100644 --- a/tests/functional/provisioning/test_dynamic_provisioning_block.py +++ b/tests/functional/provisioning/test_dynamic_provisioning_block.py @@ -32,6 +32,7 @@ from openshiftstoragelibs.openshift_ops import ( wait_for_pod_be_ready, wait_for_resource_absence, ) +from openshiftstoragelibs.openshift_version import get_openshift_version from openshiftstoragelibs.waiter import Waiter @@ -316,6 +317,10 @@ class TestDynamicProvisioningBlockP0(GlusterBlockBaseClass): def test_dynamic_provisioning_glusterblock_reclaim_policy_retain(self): """Validate retain policy for gluster-block after PVC deletion""" + if get_openshift_version() < "3.9": + self.skipTest( + "'Reclaim' feature is not supported in OCP older than 3.9") + self.create_storage_class(reclaim_policy='Retain') self.create_and_wait_for_pvc() diff --git a/tests/functional/provisioning/test_dynamic_provisioning_file.py b/tests/functional/provisioning/test_dynamic_provisioning_file.py index e63a3035..4f361834 100644 --- a/tests/functional/provisioning/test_dynamic_provisioning_file.py +++ b/tests/functional/provisioning/test_dynamic_provisioning_file.py @@ -28,6 +28,7 @@ from openshiftstoragelibs.openshift_ops import ( verify_pvc_status_is_bound, wait_for_pod_be_ready, wait_for_resource_absence) +from openshiftstoragelibs.openshift_version import get_openshift_version from openshiftstoragelibs.waiter import Waiter @@ -110,6 +111,11 @@ class TestDynamicProvisioningP0(BaseClass): def test_dynamic_provisioning_glusterfile_volname_prefix(self): """Validate dynamic provisioning for gluster file with vol name prefix """ + if get_openshift_version() < "3.9": + self.skipTest( + "'volumenameprefix' option for Heketi is not supported" + " in OCP older than 3.9") + g.log.info("test_dynamic_provisioning_glusterfile volname prefix") self.dynamic_provisioning_glusterfile(True) @@ -398,6 +404,10 @@ class TestDynamicProvisioningP0(BaseClass): def test_dynamic_provisioning_glusterfile_reclaim_policy_retain(self): """Validate retain policy for glusterfs after deletion of pvc""" + if get_openshift_version() < "3.9": + self.skipTest( + "'Reclaim' feature is not supported in OCP older than 3.9") + self.create_storage_class(reclaim_policy='Retain') self.create_and_wait_for_pvc() @@ -442,6 +452,11 @@ class TestDynamicProvisioningP0(BaseClass): def test_usage_of_default_storage_class(self): """Validate PVs creation for SC with default custom volname prefix""" + if get_openshift_version() < "3.9": + self.skipTest( + "'volumenameprefix' option for Heketi is not supported" + " in OCP older than 3.9") + # Unset 'default' option from all the existing Storage Classes unset_sc_annotation_cmd = ( r"""oc annotate sc %s """ diff --git a/tests/functional/provisioning/test_pv_resize.py b/tests/functional/provisioning/test_pv_resize.py index ec6cc24c..a5b9d2c2 100644 --- a/tests/functional/provisioning/test_pv_resize.py +++ b/tests/functional/provisioning/test_pv_resize.py @@ -40,8 +40,7 @@ class TestPvResizeClass(BaseClass): def setUp(self): super(TestPvResizeClass, self).setUp() if getattr(self, "skip_me", False): - msg = ("pv resize is not available in openshift " - "version %s " % self.version) + msg = ("pv resize is not available in openshift older than v3.9") g.log.error(msg) raise self.skipTest(msg) diff --git a/tests/functional/provisioning/test_storage_class_cases.py b/tests/functional/provisioning/test_storage_class_cases.py index 27982d5d..8a04c8ea 100644 --- a/tests/functional/provisioning/test_storage_class_cases.py +++ b/tests/functional/provisioning/test_storage_class_cases.py @@ -20,6 +20,7 @@ from openshiftstoragelibs.openshift_ops import ( wait_for_pod_be_ready, wait_for_resource_absence, ) +from openshiftstoragelibs.openshift_version import get_openshift_version @ddt.ddt @@ -247,6 +248,11 @@ class TestStorageClassCases(BaseClass): def test_create_and_verify_pvc_with_volume_name_prefix(self): """create and verify pvc with volname prefix on an app pod""" + if get_openshift_version() < "3.9": + self.skipTest( + "'volumenameprefix' option for Heketi is not supported" + " in OCP older than 3.9") + sc_name = self.create_storage_class(create_vol_name_prefix=True) pvc_name = self.create_and_wait_for_pvc(sc_name=sc_name) namespace = (self.sc.get( -- cgit