aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/topology.py
diff options
context:
space:
mode:
authorMiroslav Miklus <mmiklus@cisco.com>2016-04-18 17:15:40 +0200
committerStefan Kobza <skobza@cisco.com>2016-04-26 09:53:46 +0000
commitc8790d06d412b1daf303f6da9d8d11d97d053697 (patch)
tree602fb007cba1ae993fb24ba0f8fe4cb372dfd3bd /resources/libraries/python/topology.py
parent26f067d4fb5a37eb4fe2eaf25b5113599cee1b90 (diff)
Extend host topology with NIC type filtering
JIRA: CSIT-1 Changes to allow filtering based on NIC model. Switched xconnect perf test to use filtered topology. Change-Id: Id526f47dc28f92bf26d070e54819ad29bccc0440 Signed-off-by: Miroslav Miklus <mmiklus@cisco.com>
Diffstat (limited to 'resources/libraries/python/topology.py')
-rw-r--r--resources/libraries/python/topology.py40
1 files changed, 34 insertions, 6 deletions
diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py
index 20745eb0a2..7e9400757e 100644
--- a/resources/libraries/python/topology.py
+++ b/resources/libraries/python/topology.py
@@ -359,10 +359,13 @@ class Topology(object):
return None
@staticmethod
- def _get_node_active_link_names(node):
+ def _get_node_active_link_names(node, filter_list=None):
"""Return list of link names that are other than mgmt links.
:param node: Node topology dictionary.
+ :param filter_list: Link filter criteria.
+ :type node: dict
+ :type filter_list: list of strings
:return: List of strings that represent link names occupied by the node.
:rtype: list
"""
@@ -370,28 +373,53 @@ class Topology(object):
link_names = []
for interface in interfaces.values():
if 'link' in interface:
- link_names.append(interface['link'])
+ if (filter_list is not None) and ('model' in interface):
+ for filt in filter_list:
+ if filt == interface['model']:
+ link_names.append(interface['link'])
+ elif (filter_list is not None) and ('model' not in interface):
+ logger.trace("Cannot apply filter on interface: {}" \
+ .format(str(interface)))
+ else:
+ link_names.append(interface['link'])
if len(link_names) == 0:
link_names = None
return link_names
@keyword('Get active links connecting "${node1}" and "${node2}"')
- def get_active_connecting_links(self, node1, node2):
+ def get_active_connecting_links(self, node1, node2,
+ filter_list_node1=None,
+ filter_list_node2=None):
"""Return list of link names that connect together node1 and node2.
:param node1: Node topology dictionary.
:param node2: Node topology dictionary.
+ :param filter_list_node1: Link filter criteria for node1.
+ :param filter_list_node2: Link filter criteria for node2.
:type node1: dict
:type node2: dict
+ :type filter_list1: list of strings
+ :type filter_list2: list of strings
:return: List of strings that represent connecting link names.
:rtype: list
"""
logger.trace("node1: {}".format(str(node1)))
logger.trace("node2: {}".format(str(node2)))
- node1_links = self._get_node_active_link_names(node1)
- node2_links = self._get_node_active_link_names(node2)
- connecting_links = list(set(node1_links).intersection(node2_links))
+ node1_links = self._get_node_active_link_names(
+ node1,
+ filter_list=filter_list_node1)
+ node2_links = self._get_node_active_link_names(
+ node2,
+ filter_list=filter_list_node2)
+
+ connecting_links = None
+ if node1_links is None:
+ logger.error("Unable to find active links for node1")
+ elif node2_links is None:
+ logger.error("Unable to find active links for node2")
+ else:
+ connecting_links = list(set(node1_links).intersection(node2_links))
return connecting_links