summaryrefslogtreecommitdiffstats
path: root/cns-libs/cnslibs/common/openshift_ops.py
diff options
context:
space:
mode:
authorValerii Ponomarov <vponomar@redhat.com>2018-10-20 01:26:10 +0530
committerValerii Ponomarov <vponomar@redhat.com>2018-10-24 14:32:09 +0000
commit0f9a9b152efb7b986919deada5761600eafcde47 (patch)
treed2e75024efb93b281c2df82569b245a6214cbbe4 /cns-libs/cnslibs/common/openshift_ops.py
parent9fe4515438397e6153f51d58fd09551d240df6d3 (diff)
[CNS-1040] Resize PVC exceeding available free space
Make sure that after failed attempt of PVC resize application POD continues to work and we are able to write data. Change-Id: I1dda1e4698ca4e569aa67740c2e9a5dca9a4e7bf
Diffstat (limited to 'cns-libs/cnslibs/common/openshift_ops.py')
-rw-r--r--cns-libs/cnslibs/common/openshift_ops.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/cns-libs/cnslibs/common/openshift_ops.py b/cns-libs/cnslibs/common/openshift_ops.py
index 830dc215..e86010cb 100644
--- a/cns-libs/cnslibs/common/openshift_ops.py
+++ b/cns-libs/cnslibs/common/openshift_ops.py
@@ -1188,3 +1188,71 @@ def verify_gluster_vol_for_pvc(hostname, pvc_name):
g.log.info("verification of gluster vol %s for pvc %s is"
"successful" % (gluster_vol, pvc_name))
return True
+
+
+def get_events(hostname,
+ obj_name=None, obj_namespace=None, obj_type=None,
+ event_reason=None, event_type=None):
+ """Return filtered list of events.
+
+ Args:
+ hostname (str): hostname of oc client
+ obj_name (str): name of an object
+ obj_namespace (str): namespace where object is located
+ obj_type (str): type of an object, i.e. PersistentVolumeClaim or Pod
+ event_reason (str): reason why event was created,
+ i.e. Created, Started, Unhealthy, SuccessfulCreate, Scheduled ...
+ event_type (str): type of an event, i.e. Normal or Warning
+ Returns:
+ List of dictionaries, where the latter are of following structure:
+ {
+ "involvedObject": {
+ "kind": "ReplicationController",
+ "name": "foo-object-name",
+ "namespace": "foo-object-namespace",
+ },
+ "message": "Created pod: foo-object-name",
+ "metadata": {
+ "creationTimestamp": "2018-10-19T18:27:09Z",
+ "name": "foo-object-name.155f15db4e72cc2e",
+ "namespace": "foo-object-namespace",
+ },
+ "reason": "SuccessfulCreate",
+ "reportingComponent": "",
+ "reportingInstance": "",
+ "source": {"component": "replication-controller"},
+ "type": "Normal"
+ }
+ """
+ field_selector = []
+ if obj_name:
+ field_selector.append('involvedObject.name=%s' % obj_name)
+ if obj_namespace:
+ field_selector.append('involvedObject.namespace=%s' % obj_namespace)
+ if obj_type:
+ field_selector.append('involvedObject.kind=%s' % obj_type)
+ if event_reason:
+ 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']
+
+
+def wait_for_events(hostname,
+ obj_name=None, obj_namespace=None, obj_type=None,
+ event_reason=None, event_type=None,
+ timeout=120, wait_step=3):
+ """Wait for appearence of specific set of events."""
+ for w in waiter.Waiter(timeout, wait_step):
+ events = get_events(
+ hostname=hostname, obj_name=obj_name, obj_namespace=obj_namespace,
+ obj_type=obj_type, event_reason=event_reason,
+ event_type=event_type)
+ if events:
+ return events
+ if w.expired:
+ err_msg = ("Exceeded %ssec timeout waiting for events." % timeout)
+ g.log.error(err_msg)
+ raise exceptions.ExecutionError(err_msg)