summaryrefslogtreecommitdiffstats
path: root/cns-libs/cnslibs
diff options
context:
space:
mode:
Diffstat (limited to 'cns-libs/cnslibs')
-rw-r--r--cns-libs/cnslibs/common/openshift_ops.py40
-rw-r--r--cns-libs/cnslibs/common/waiter.py3
2 files changed, 38 insertions, 5 deletions
diff --git a/cns-libs/cnslibs/common/openshift_ops.py b/cns-libs/cnslibs/common/openshift_ops.py
index 523cc375..6cfff3f8 100644
--- a/cns-libs/cnslibs/common/openshift_ops.py
+++ b/cns-libs/cnslibs/common/openshift_ops.py
@@ -32,6 +32,7 @@ PODS_WIDE_RE = re.compile(
SERVICE_STATUS = "systemctl status %s"
SERVICE_RESTART = "systemctl restart %s"
SERVICE_STATUS_REGEX = "Active: active \((.*)\) since .*;.*"
+OC_VERSION = None
def oc_get_pods(ocp_node):
@@ -470,7 +471,17 @@ def oc_delete(ocp_node, rtype, name, raise_on_absence=True):
if not oc_get_yaml(ocp_node, rtype, name,
raise_on_error=raise_on_absence):
return
- ret, out, err = g.run(ocp_node, ['oc', 'delete', rtype, name])
+ cmd = ['oc', 'delete', rtype, name]
+
+ global OC_VERSION
+ if not OC_VERSION:
+ OC_VERSION = oc_version(ocp_node)
+
+ versions = ['v3.6', 'v3.7', 'v3.9', 'v3.10']
+ if not OC_VERSION.rsplit('.', 1)[0] in versions:
+ cmd.append('--wait=false')
+
+ ret, out, err = g.run(ocp_node, cmd)
if ret != 0:
g.log.error('Failed to delete resource: %s, %s: %r; %r',
rtype, name, out, err)
@@ -621,11 +632,12 @@ def create_namespace(hostname, namespace):
def wait_for_resource_absence(ocp_node, rtype, name,
- interval=10, timeout=120):
+ interval=5, timeout=300):
_waiter = waiter.Waiter(timeout=timeout, interval=interval)
+ resource, pv_name = None, None
for w in _waiter:
try:
- oc_get_yaml(ocp_node, rtype, name, raise_on_error=True)
+ resource = oc_get_yaml(ocp_node, rtype, name, raise_on_error=True)
except AssertionError:
break
if rtype == 'pvc':
@@ -633,11 +645,29 @@ def wait_for_resource_absence(ocp_node, rtype, name,
name)
for w in _waiter:
ret, out, err = g.run(ocp_node, cmd, "root")
+ _pv_name = out.strip()
+ if _pv_name and not pv_name:
+ pv_name = _pv_name
if ret != 0:
break
if w.expired:
- error_msg = "%s '%s' still exists after waiting for it %d seconds" % (
- rtype, name, timeout)
+ # Gather more info for ease of debugging
+ try:
+ r_events = get_events(ocp_node, obj_name=name)
+ except Exception:
+ r_events = '?'
+ error_msg = (
+ "%s '%s' still exists after waiting for it %d seconds.\n"
+ "Resource info: %s\n"
+ "Resource related events: %s" % (
+ rtype, name, timeout, resource, r_events))
+ if rtype == 'pvc' and pv_name:
+ try:
+ pv_events = get_events(ocp_node, obj_name=pv_name)
+ except Exception:
+ pv_events = '?'
+ error_msg += "\nPV events: %s" % pv_events
+
g.log.error(error_msg)
raise exceptions.ExecutionError(error_msg)
diff --git a/cns-libs/cnslibs/common/waiter.py b/cns-libs/cnslibs/common/waiter.py
index 0a6e72b5..0d0c8c3a 100644
--- a/cns-libs/cnslibs/common/waiter.py
+++ b/cns-libs/cnslibs/common/waiter.py
@@ -33,3 +33,6 @@ class Waiter(object):
time.sleep(self.interval)
self._attempt += 1
return self
+
+ # NOTE(vponomar): py3 uses "__next__" method instead of "next" one.
+ __next__ = next