summaryrefslogtreecommitdiffstats
path: root/openshift-storage-libs
diff options
context:
space:
mode:
Diffstat (limited to 'openshift-storage-libs')
-rw-r--r--openshift-storage-libs/openshiftstoragelibs/baseclass.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/openshift-storage-libs/openshiftstoragelibs/baseclass.py b/openshift-storage-libs/openshiftstoragelibs/baseclass.py
index 554863ee..ae433872 100644
--- a/openshift-storage-libs/openshiftstoragelibs/baseclass.py
+++ b/openshift-storage-libs/openshiftstoragelibs/baseclass.py
@@ -1,7 +1,9 @@
import datetime
+import re
import unittest
from glusto.core import Glusto as g
+import six
from openshiftstoragelibs import command
from openshiftstoragelibs.exceptions import (
@@ -15,7 +17,10 @@ from openshiftstoragelibs.heketi_ops import (
hello_heketi,
heketi_blockvolume_delete,
heketi_blockvolume_info,
+ heketi_volume_create,
heketi_volume_delete,
+ heketi_volume_info,
+ heketi_volume_list,
)
from openshiftstoragelibs.openshift_ops import (
get_pod_name_from_dc,
@@ -41,6 +46,8 @@ from openshiftstoragelibs.openshift_storage_libs import (
from openshiftstoragelibs.openshift_version import get_openshift_version
from openshiftstoragelibs.waiter import Waiter
+HEKETI_VOLUME_REGEX = "Id:(.*).Cluster:(.*).Name:%s"
+
class BaseClass(unittest.TestCase):
"""Base class for test classes."""
@@ -308,6 +315,41 @@ class BaseClass(unittest.TestCase):
def create_dc_with_pvc(self, pvc_name, timeout=300, wait_step=10):
return self.create_dcs_with_pvc(pvc_name, timeout, wait_step)[pvc_name]
+ def create_heketi_volume_with_name_and_wait(
+ self, name, size, timeout=600, wait_step=10, **kwargs):
+ json = kwargs.get("json", False)
+
+ try:
+ h_volume_info = heketi_volume_create(
+ self.heketi_client_node, self.heketi_server_url,
+ size, name=name, **kwargs)
+ except Exception as e:
+ if ('more required' in six.text_type(e)
+ or ('Failed to allocate new volume' in six.text_type(e))):
+ raise
+
+ for w in Waiter(timeout, wait_step):
+ h_volumes = heketi_volume_list(
+ self.heketi_client_node, self.heketi_server_url)
+ h_volume_match = re.search(
+ HEKETI_VOLUME_REGEX % name, h_volumes)
+ if h_volume_match:
+ h_volume_info = heketi_volume_info(
+ self.heketi_client_node, self.heketi_server_url,
+ h_volume_match.group(1), json=json)
+ break
+
+ if w.expired:
+ g.log.info(
+ "Heketi volume with name %s not created in 600 sec" % name)
+ raise
+
+ self.addCleanup(
+ heketi_volume_delete, self.heketi_client_node,
+ self.heketi_server_url, h_volume_info["id"])
+
+ return h_volume_info
+
def is_containerized_gluster(self):
cmd = ("oc get pods --no-headers -l glusterfs-node=pod "
"-o=custom-columns=:.spec.nodeName")