From 0a86502c92a4be3818b8b6abe3601af02b949cc6 Mon Sep 17 00:00:00 2001 From: Valerii Ponomarov Date: Thu, 28 Nov 2019 17:57:44 +0530 Subject: Fix str/list/tuple distinguishing in library functions to support py3 We try to distinguish strings from other iterable object types in several our library functions and now it is not compatible with py3. The problem is that in py2 strings don't have "__iter__" method, but it exists in case of py3. So, fix it by using py2/3 compatible check for string types. Change-Id: I3f833b5e79f1563a3ae6a2bb9ae43d8919d82c30 --- openshift-storage-libs/openshiftstoragelibs/node_ops.py | 5 +++-- .../openshiftstoragelibs/openshift_ops.py | 15 +++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) (limited to 'openshift-storage-libs') diff --git a/openshift-storage-libs/openshiftstoragelibs/node_ops.py b/openshift-storage-libs/openshiftstoragelibs/node_ops.py index 5811e157..74e67998 100644 --- a/openshift-storage-libs/openshiftstoragelibs/node_ops.py +++ b/openshift-storage-libs/openshiftstoragelibs/node_ops.py @@ -2,6 +2,7 @@ import time from glustolibs.gluster.exceptions import ExecutionError from glusto.core import Glusto as g +import six from openshiftstoragelibs.cloundproviders.vmware import VmWare from openshiftstoragelibs import command @@ -194,7 +195,7 @@ def node_add_iptables_rules(node, chain, rules, raise_on_error=True): AssertionError: In case command fails to execute and raise_on_error set to True """ - rules = rules if hasattr(rules, '__iter__') else [rules] + rules = [rules] if isinstance(rules, six.string_types) else rules add_iptables_rule_cmd = "iptables --append %s %s" check_iptables_rule_cmd = "iptables --check %s %s" @@ -221,7 +222,7 @@ def node_delete_iptables_rules(node, chain, rules, raise_on_error=True): AssertionError: In case command fails to execute and raise_on_error set to True """ - rules = rules if hasattr(rules, '__iter__') else [rules] + rules = [rules] if isinstance(rules, six.string_types) else rules delete_iptables_rule_cmd = "iptables --delete %s %s" for rule in rules: diff --git a/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py b/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py index 4e668d68..249a1b50 100644 --- a/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py +++ b/openshift-storage-libs/openshiftstoragelibs/openshift_ops.py @@ -712,7 +712,8 @@ def scale_dcs_pod_amount_and_wait(hostname, dc_names, pod_amount=1, "dc_name_n": ["pod_name_n_1", "pod_name_n_2", ..., "pod_name_n_n"], } """ - dc_names = dc_names if hasattr(dc_names, '__iter__') else [dc_names] + dc_names = ( + [dc_names] if isinstance(dc_names, six.string_types) else dc_names) dc_and_pod_names = {} namespace_arg = "--namespace=%s" % namespace if namespace else "" scale_cmd = "oc scale %s --replicas=%d dc/%s" % ( @@ -1827,8 +1828,10 @@ def oc_annotate(hostname, rtype, rname, annotations): Raises: AssertionError: In case adding annotations to resource fails. """ - annotations = annotations if hasattr( - annotations, '__iter__') else [annotations] + annotations = ( + [annotations] + if isinstance(annotations, six.string_types) + else annotations) for annotation in annotations: cmd = 'oc annotate %s %s %s --overwrite' % (rtype, rname, annotation) command.cmd_run(cmd, hostname=hostname) @@ -1885,9 +1888,9 @@ def oc_create_service_monitor(hostname, sm_name="heketi", ep_namespace_selector_matchnames if ep_namespace_selector_matchnames else ['glusterfs']) ep_namespace_selector_matchnames = ( - ep_namespace_selector_matchnames - if hasattr(ep_namespace_selector_matchnames, '__iter__') - else [ep_namespace_selector_matchnames]) + [ep_namespace_selector_matchnames] + if isinstance(ep_namespace_selector_matchnames, six.string_types) + else ep_namespace_selector_matchnames) ep_matchlabels = ( ep_matchlabels if ep_matchlabels else {"heketi": "storage-service"}) sm_data = json.dumps({ -- cgit