diff options
| author | Valerii Ponomarov <vponomar@redhat.com> | 2018-07-19 17:27:42 +0530 |
|---|---|---|
| committer | Valerii Ponomarov <vponomar@redhat.com> | 2018-07-19 17:36:34 +0530 |
| commit | f8508c0cd42d8e1ba18e06d79f9ef515faa36fe2 (patch) | |
| tree | 07af46d8cbb5e13ca0c55aa356f81311640cb245 | |
| parent | b7f6a80ceb1af26dec130facb64485ded0db18b2 (diff) | |
Refactor 'heketi_node_list' function
Do following improvements to this function:
- Remove support of python Heketi client, because it is dead code.
It is dead code, because all of the tests which use this function,
explicitly depend on the CLI output, not being compatible with it.
- Remove useless 'json' arg, as CLI client does not support it for 'node
list' command.
- Parse list of node IDs in it, not delegating this to the consumer.
- Raise exception in case we failed to get list of nodes
And, of course, update all the places where this function is used.
Making those places use less code compared to previous variant.
Change-Id: I3f1ffe6082541e63dc3d638c19c54086aa12580f
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( |
