diff options
7 files changed, 48 insertions, 128 deletions
diff --git a/cns-libs/cnslibs/common/heketi_ops.py b/cns-libs/cnslibs/common/heketi_ops.py index 8e36d331..fd6c4b34 100644 --- a/cns-libs/cnslibs/common/heketi_ops.py +++ b/cns-libs/cnslibs/common/heketi_ops.py @@ -13,6 +13,7 @@ try: except: g.log.error("Please install python-client for heketi and re-run the test") +from cnslibs.common import exceptions HEKETI_SSH_KEY = "/etc/heketi/heketi_key" HEKETI_CONFIG_FILE = "/etc/heketi/heketi.json" @@ -1839,54 +1840,37 @@ def heketi_node_remove(heketi_client_node, heketi_server_url, node_id, return node -def heketi_node_list(heketi_client_node, heketi_server_url, mode='cli', - **kwargs): - """Executes heketi node info command. +def heketi_node_list(heketi_client_node, heketi_server_url, + heketi_user=None, heketi_secret=None): + """Execute CLI 'heketi node list' command and parse its output. Args: - heketi_client_node (str): Node on which cmd has to be executed. - heketi_server_url (str): Heketi server url - - Kwargs: - mode (str): Mode to excecute the command. - It can be cli|url. Defaults to cli. - **kwargs - The keys, values in kwargs are: - - json : (bool) - - secret : (str)|None - - user : (str)|None - + heketi_client_node (str): Node on which cmd has to be executed + heketi_server_url (str): Heketi server url to perform request to + heketi_user (str): Name of the user to perform request with + heketi_secret (str): Secret for 'heketi_user' Returns: - dict: node list on success, if mode='cli' without json, then it - returns raw output in string format. - False: in case of failure - - Example: - heketi_node_list(heketi_client_node, heketi_server_url) + list of strings which are node IDs + Raises: cnslibs.common.exceptions.ExecutionError in case CLI command failed. """ - (heketi_server_url, - json_arg, admin_key, user) = _set_heketi_global_flags(heketi_server_url, - **kwargs) - if mode == 'cli': - cmd = ("heketi-cli -s %s node list %s %s %s" - % (heketi_server_url, json_arg, admin_key, user)) - ret, out, _ = g.run(heketi_client_node, cmd) - if ret != 0: - g.log.error("Failed to execute heketi-cli node list command") - return False + heketi_server_url, json_arg, admin_key, user = _set_heketi_global_flags( + heketi_server_url, user=heketi_user, secret=heketi_secret) - return out - else: - try: - user = user.split(' ')[-1] if user else 'admin' - admin_key = admin_key.split('t ')[-1] if admin_key else admin_key - conn = HeketiClient(heketi_server_url, user, admin_key) - node_list = conn.node_list() - except: - g.log.error("Failed to get node list using heketi") - return False - return node_list + cmd = ("heketi-cli -s %s node list %s %s %s" + % (heketi_server_url, json_arg, admin_key, user)) + ret, out, _ = g.run(heketi_client_node, cmd) + if ret != 0: + msg = "Failed to get list of Heketi nodes." + g.log.error(msg) + raise exceptions.ExecutionError(msg) + + heketi_node_id_list = [] + for line in out.strip().split("\n"): + # Line looks like this: 'Id:nodeIdString\tCluster:clusterIdString' + heketi_node_id_list.append( + line.strip().split("Cluster")[0].strip().split(":")[1]) + return heketi_node_id_list def heketi_blockvolume_info(heketi_client_node, heketi_server_url, diff --git a/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py b/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py index 62448b92..d871be30 100644 --- a/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py +++ b/tests/functional/common/heketi/heketi_tests/test_create_heketi_volume_size_60.py @@ -25,13 +25,9 @@ class TestHeketiVolume(HeketiClientSetupBaseClass): Get free space in each devices """ free_spaces = [] - heketi_node_id_list = [] device_list = [] - heketi_node_list_string = heketi_node_list( + heketi_node_id_list = heketi_node_list( self.heketi_client_node, self.heketi_server_url) - for line in heketi_node_list_string.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) for node_id in heketi_node_id_list: node_info_dict = heketi_node_info(self.heketi_client_node, self.heketi_server_url, diff --git a/tests/functional/common/heketi/heketi_tests/test_heketi_create_volume.py b/tests/functional/common/heketi/heketi_tests/test_heketi_create_volume.py index 80b6e1b6..38f6c4e9 100644 --- a/tests/functional/common/heketi/heketi_tests/test_heketi_create_volume.py +++ b/tests/functional/common/heketi/heketi_tests/test_heketi_create_volume.py @@ -160,16 +160,12 @@ class TestHeketiVolume(HeketiClientSetupBaseClass): """ # List of heketi node - heketi_node_id_list = [] g.log.info("List heketi nodes") - node_list = heketi_node_list(self.heketi_client_node, - self.heketi_server_url, - json=True) - self.assertTrue(node_list, ("Failed to list heketi nodes")) + heketi_node_id_list = heketi_node_list( + self.heketi_client_node, self.heketi_server_url) + self.assertTrue(heketi_node_id_list, ("List of node IDs is empty.")) + g.log.info("Successfully got the list of nodes") - for line in node_list.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) for node_id in heketi_node_id_list: g.log.info("Retrieve the node info") node_info_dict = heketi_ops.heketi_node_info( @@ -194,9 +190,9 @@ class TestHeketiVolume(HeketiClientSetupBaseClass): "node %s because it contains devices") # To confrim deletion failed, check node list + # TODO: fix following, it doesn't verify absence of the deleted nodes g.log.info("Listing heketi node list") node_list = heketi_node_list(self.heketi_client_node, - self.heketi_server_url, - json=True) + self.heketi_server_url) self.assertTrue(node_list, ("Failed to list heketi nodes")) g.log.info("Successfully got the list of nodes") diff --git a/tests/functional/common/heketi/heketi_tests/test_node_info.py b/tests/functional/common/heketi/heketi_tests/test_node_info.py index 94ac34b9..81462906 100644 --- a/tests/functional/common/heketi/heketi_tests/test_node_info.py +++ b/tests/functional/common/heketi/heketi_tests/test_node_info.py @@ -23,16 +23,12 @@ class TestHeketiVolume(HeketiClientSetupBaseClass): """ # List all list - heketi_node_id_list = [] ip = [] g.log.info("Listing the node id") - node_list = heketi_node_list(self.heketi_client_node, - self.heketi_server_url) - self.assertTrue(node_list, ("Failed to list heketi nodes")) + heketi_node_id_list = heketi_node_list( + self.heketi_client_node, self.heketi_server_url) + g.log.info("Successfully listed the node") - for line in node_list.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) if (len(heketi_node_id_list) == 0): raise ExecutionError("Node list empty") @@ -77,15 +73,11 @@ class TestHeketiVolume(HeketiClientSetupBaseClass): """ # List all list - heketi_node_id_list = [] g.log.info("Listing the node id") - node_list = heketi_node_list(self.heketi_client_node, - self.heketi_server_url) - self.assertTrue(node_list, ("Failed to list heketi nodes")) + heketi_node_id_list = heketi_node_list( + self.heketi_client_node, self.heketi_server_url) + self.assertTrue(heketi_node_id_list, ("Node Id list is empty.")) g.log.info("Successfully listed the node") - for line in node_list.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) for node_id in heketi_node_id_list: g.log.info("Retrieve the node info") diff --git a/tests/functional/common/heketi/test_heketi_volume_operations.py b/tests/functional/common/heketi/test_heketi_volume_operations.py index 2b3a0b9b..f9de7f56 100644 --- a/tests/functional/common/heketi/test_heketi_volume_operations.py +++ b/tests/functional/common/heketi/test_heketi_volume_operations.py @@ -150,7 +150,6 @@ class TestHeketiVolumeOperations(HeketiClientSetupBaseClass): and then trying to remove an existing device. We should get an error saying insufficient space when removing device. """ - node_id_list = [] device_id_list = [] vol_info = heketi_volume_create(self.heketi_client_node, @@ -161,18 +160,9 @@ class TestHeketiVolumeOperations(HeketiClientSetupBaseClass): self.assertNotEqual(vol_info, False, "Failed to create heketi volume") self.addCleanup(self.volume_cleanup, vol_info["id"]) - node_list_info = heketi_node_list( + node_id_list = heketi_node_list( self.heketi_client_node, self.heketi_server_url) - self.assertNotEqual(node_list_info, False, - "heketi node list command failed") - - lines = node_list_info.strip().split("\n") - - for line in lines: - node_id_list.append(line.strip().split("Cluster") - [0].strip().split(":")[1]) - for node_id in node_id_list[:2]: device_present = False node_info = heketi_node_info( diff --git a/tests/functional/common/heketi/test_volume_deletion.py b/tests/functional/common/heketi/test_volume_deletion.py index bf7b6835..be7b2e61 100644 --- a/tests/functional/common/heketi/test_volume_deletion.py +++ b/tests/functional/common/heketi/test_volume_deletion.py @@ -19,20 +19,11 @@ class TestVolumeDeleteTestCases(HeketiClientSetupBaseClass): """ Calculates free space across all devices """ - total_free_space = 0 - heketi_node_id_list = [] - - heketi_node_list_string = heketi_ops.heketi_node_list( - self.heketi_client_node, - self.heketi_server_url, mode="cli", json=True) - self.assertNotEqual(heketi_node_list_string, False, - "Heketi node list command failed") - - for line in heketi_node_list_string.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) + heketi_node_id_list = heketi_ops.heketi_node_list( + self.heketi_client_node, self.heketi_server_url) + total_free_space = 0 for node_id in heketi_node_id_list: node_info_dict = heketi_ops.heketi_node_info( self.heketi_client_node, self.heketi_server_url, diff --git a/tests/functional/common/heketi/test_volume_expansion_and_devices.py b/tests/functional/common/heketi/test_volume_expansion_and_devices.py index 2732d933..07ab13e5 100644 --- a/tests/functional/common/heketi/test_volume_expansion_and_devices.py +++ b/tests/functional/common/heketi/test_volume_expansion_and_devices.py @@ -168,20 +168,10 @@ class TestVolumeExpansionAndDevicesTestCases(HeketiClientSetupBaseClass): returns total free space across all devices """ - heketi_node_id_list = [] free_spaces = [] - heketi_node_list_string = heketi_ops.heketi_node_list( - self.heketi_client_node, - self.heketi_server_url, mode="cli", json=True) - - self.assertNotEqual( - heketi_node_list_string, False, - "Heketi node list empty") - - for line in heketi_node_list_string.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) + heketi_node_id_list = heketi_ops.heketi_node_list( + self.heketi_client_node, self.heketi_server_url) for node_id in heketi_node_id_list: node_info_dict = heketi_ops.heketi_node_info( @@ -225,23 +215,13 @@ class TestVolumeExpansionAndDevicesTestCases(HeketiClientSetupBaseClass): Method to test heketi device addition with background gluster validation """ - node_id_list = [] device_id_list = [] hosts = [] gluster_servers = [] - node_list_info = heketi_ops.heketi_node_list( + node_id_list = heketi_ops.heketi_node_list( self.heketi_client_node, self.heketi_server_url) - self.assertNotEqual(node_list_info, False, - "heketi node list command failed") - - lines = node_list_info.strip().split("\n") - - for line in lines: - node_id_list.append(line.strip().split("Cluster") - [0].strip().split(":")[1]) - creation_info = heketi_ops.heketi_volume_create( self.heketi_client_node, self.heketi_server_url, 100, json=True) @@ -479,18 +459,9 @@ class TestVolumeExpansionAndDevicesTestCases(HeketiClientSetupBaseClass): space """ - heketi_node_id_list = [] additional_devices_attached = {} - heketi_node_list_string = heketi_ops.heketi_node_list( - self.heketi_client_node, - self.heketi_server_url, mode="cli", json=True) - - self.assertNotEqual(heketi_node_list_string, False, - "Heketi node list command failed") - - for line in heketi_node_list_string.strip().split("\n"): - heketi_node_id_list.append(line.strip().split( - "Cluster")[0].strip().split(":")[1]) + heketi_node_id_list = heketi_ops.heketi_node_list( + self.heketi_client_node, self.heketi_server_url) for node_id in heketi_node_id_list: node_info_dict = heketi_ops.heketi_node_info( |