diff options
author | Valerii Ponomarov <vponomar@redhat.com> | 2018-10-20 01:26:10 +0530 |
---|---|---|
committer | Valerii Ponomarov <vponomar@redhat.com> | 2018-10-24 14:32:09 +0000 |
commit | 0f9a9b152efb7b986919deada5761600eafcde47 (patch) | |
tree | d2e75024efb93b281c2df82569b245a6214cbbe4 /cns-libs/cnslibs | |
parent | 9fe4515438397e6153f51d58fd09551d240df6d3 (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')
-rw-r--r-- | cns-libs/cnslibs/common/openshift_ops.py | 68 |
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) |