X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fhoneycomb%2FHcAPIKwBridgeDomain.py;h=576124794c067e8fb04e3af84105e7ce95e1ecca;hb=5899ac744eb5f722f53151c98e5acfdbdf678d0c;hp=0906d5c76281c84f1865ff7fa00f70243d7975f4;hpb=c37f394a29165f839c3032e7f9485e35fb3307f2;p=csit.git diff --git a/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py b/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py index 0906d5c762..576124794c 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py +++ b/resources/libraries/python/honeycomb/HcAPIKwBridgeDomain.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2018 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -52,16 +52,16 @@ class BridgeDomainKeywords(object): :type bd_name: str :type data: dict :type data_representation: DataRepresentation - :return: Content of response. + :returns: Content of response. :rtype: bytearray :raises HoneycombError: If the status code in response on PUT is not - 200 = OK. + 200 = OK. """ status_code, resp = HcUtil.\ put_honeycomb_data(node, "config_bridge_domain", data, data_representation=data_representation) - if status_code != HTTPCodes.OK: + if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError( "The configuration of bridge domain '{0}' was not successful. " "Status code: {1}.".format(bd_name, status_code)) @@ -78,19 +78,19 @@ class BridgeDomainKeywords(object): :param bd_name: The name of bridge domain. :param path: Path to data we want to change, create or remove. :param new_value: The new value to be set. If None, the item will be - removed. + removed. :type node: dict :type bd_name: str :type path: tuple :type new_value: str, dict or list - :return: Content of response. + :returns: Content of response. :rtype: bytearray :raises HoneycombError: If it is not possible to get or set the data. """ status_code, resp = HcUtil.\ get_honeycomb_data(node, "config_bridge_domain") - if status_code != HTTPCodes.OK: + if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError( "Not possible to get configuration information about the " "bridge domains. Status code: {0}.".format(status_code)) @@ -99,6 +99,7 @@ class BridgeDomainKeywords(object): new_data = HcUtil.set_item_value(resp, path, new_value) else: new_data = HcUtil.remove_item(resp, path) + return BridgeDomainKeywords._configure_bd(node, bd_name, new_data) @staticmethod @@ -108,10 +109,10 @@ class BridgeDomainKeywords(object): :param bd_name: Bridge domain name. :param kwargs: Parameters and their values. The accepted parameters are - defined in BridgeDomainKeywords.PARAMS. + defined in BridgeDomainKeywords.PARAMS. :type bd_name: str :type kwargs: dict - :return: Bridge domain data structure. + :returns: Bridge domain data structure. :rtype: dict """ @@ -131,7 +132,7 @@ class BridgeDomainKeywords(object): :param node: Honeycomb node. :type node: dict - :return: Configuration data about all bridge domains from Honeycomb. + :returns: Configuration data about all bridge domains from Honeycomb. :rtype: list :raises HoneycombError: If it is not possible to get configuration data. """ @@ -156,8 +157,8 @@ class BridgeDomainKeywords(object): :param bd_name: The name of bridge domain. :type node: dict :type bd_name: str - :return: Configuration data about the given bridge domain from - Honeycomb. + :returns: Configuration data about the given bridge domain from + Honeycomb. :rtype: dict """ @@ -173,7 +174,7 @@ class BridgeDomainKeywords(object): :param node: Honeycomb node. :type node: dict - :return: Operational data about all bridge domains from Honeycomb. + :returns: Operational data about all bridge domains from Honeycomb. :rtype: list :raises HoneycombError: If it is not possible to get operational data. """ @@ -185,7 +186,7 @@ class BridgeDomainKeywords(object): "Not possible to get operational information about the " "bridge domains. Status code: {0}.".format(status_code)) try: - return resp["bridge-domains"]["bridge-domain"] + return resp["bridge-domains-state"]["bridge-domain"] except (KeyError, TypeError): return [] @@ -198,7 +199,7 @@ class BridgeDomainKeywords(object): :param bd_name: The name of bridge domain. :type node: dict :type bd_name: str - :return: Operational data about the given bridge domain from Honeycomb. + :returns: Operational data about the given bridge domain from Honeycomb. :rtype: dict """ @@ -217,19 +218,17 @@ class BridgeDomainKeywords(object): :param node: Honeycomb node. :param bd_name: Bridge domain name. :param kwargs: Parameters and their values. The accepted parameters are - defined in BridgeDomainKeywords.PARAMS + defined in BridgeDomainKeywords.PARAMS :type node: dict :type bd_name: str :type kwargs: dict - :return: Bridge domain data structure. + :returns: Bridge domain data structure. :rtype: dict """ - path = ("bridge-domains", ) new_bd = BridgeDomainKeywords._create_bd_structure(bd_name, **kwargs) - bridge_domain = {"bridge-domain": [new_bd, ]} - return BridgeDomainKeywords._set_bd_properties(node, bd_name, path, - bridge_domain) + bridge_domain = {"bridge-domains": {"bridge-domain": [new_bd, ]}} + return BridgeDomainKeywords._configure_bd(node, bd_name, bridge_domain) @staticmethod def add_bd(node, bd_name, **kwargs): @@ -238,11 +237,11 @@ class BridgeDomainKeywords(object): :param node: Honeycomb node. :param bd_name: Bridge domain name. :param kwargs: Parameters and their values. The accepted parameters are - defined in BridgeDomainKeywords.PARAMS + defined in BridgeDomainKeywords.PARAMS :type node: dict :type bd_name: str :type kwargs: dict - :return: Bridge domain data structure. + :returns: Bridge domain data structure. :rtype: dict """ @@ -253,21 +252,23 @@ class BridgeDomainKeywords(object): bridge_domain) @staticmethod - def remove_all_bds(node): + def remove_all_bridge_domains(node): """Remove all bridge domains. :param node: Honeycomb node. :type node: dict - :return: Content of response. + :returns: Content of response. :rtype: bytearray :raises HoneycombError: If it is not possible to remove all bridge - domains. + domains. """ data = {"bridge-domains": {"bridge-domain": []}} + status_code, resp = HcUtil.\ put_honeycomb_data(node, "config_bridge_domain", data) - if status_code != HTTPCodes.OK: + + if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError("Not possible to remove all bridge domains. " "Status code: {0}.".format(status_code)) return resp @@ -280,10 +281,10 @@ class BridgeDomainKeywords(object): :param bd_name: The name of bridge domain to be removed. :type node: dict :type bd_name: str - :return: Content of response. + :returns: Content of response. :rtype: bytearray - :raises HoneycombError:If it is not possible to remove the bridge - domain. + :raises HoneycombError: If it is not possible to remove the bridge + domain. """ path = ("bridge-domains", ("bridge-domain", "name", bd_name)) @@ -311,14 +312,14 @@ class BridgeDomainKeywords(object): :param node: Honeycomb node. :param bd_name: Bridge domain name. :param param: Parameter to set, change or remove. The accepted - parameters are defined in BridgeDomainKeywords.PARAMS + parameters are defined in BridgeDomainKeywords.PARAMS :param value: The new value to be set, change or remove. If None, the - item will be removed. + item will be removed. :type node: dict :type bd_name: str :type param: str :type value: str - :return: Content of response. + :returns: Content of response. :rtype: bytearray """ @@ -328,3 +329,154 @@ class BridgeDomainKeywords(object): path = ("bridge-domains", ("bridge-domain", "name", bd_name), param) return BridgeDomainKeywords.\ _set_bd_properties(node, bd_name, path, value) + + @staticmethod + def add_l2_fib_entry(node, bd_name, l2_fib_entry): + """Add an L2 FIB entry to the bridge domain's list of L2 FIB entries. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :param l2_fib_entry: L2 FIB entry to be added to the L2 FIB table. + :type node: dict + :type bd_name: str + :type l2_fib_entry: dict + :returns: Content of response. + :rtype: bytearray + """ + + path = ("bridge-domains", + ("bridge-domain", "name", bd_name), + "l2-fib-table", + "l2-fib-entry") + + new_l2_fib_entry = [l2_fib_entry, ] + return BridgeDomainKeywords._set_bd_properties( + node, bd_name, path, new_l2_fib_entry) + + @staticmethod + def modify_l2_fib_entry(node, bd_name, mac, param, value): + """Modify an existing L2 FIB entry in the bridge domain's L2 FIB table. + The L2 FIB entry is specified by MAC address. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :param mac: MAC address used as the key in L2 FIB data structure. + :param param: The parameter to be modified. + :param value: The new value of the parameter. + :type node: dict + :type bd_name: str + :type mac: str + :type param: str + :type value: str or int + :returns: Content of response. + :rtype: bytearray + """ + + path = ("bridge-domains", + ("bridge-domain", "name", bd_name), + "l2-fib-table", + ("l2-fib-entry", "phys-address", mac), + param) + + return BridgeDomainKeywords._set_bd_properties( + node, bd_name, path, value) + + @staticmethod + def remove_l2_fib_entry(node, bd_name, mac): + """Remove an L2 FIB entry from bridge domain's L2 FIB table. The + entry is specified by MAC address. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :param mac: MAC address used as the key in L2 FIB data structure. + :type node: dict + :type bd_name: str + :type mac: str + :returns: Content of response. + :rtype: bytearray + :raises HoneycombError: If it is not possible to remove the specified + entry. + """ + + path = ("bridge-domains", + ("bridge-domain", "name", bd_name), + "l2-fib-table", + ("l2-fib-entry", "phys-address", str(mac))) + + status_code, resp = HcUtil.\ + get_honeycomb_data(node, "config_bridge_domain") + if status_code != HTTPCodes.OK: + raise HoneycombError("Not possible to get configuration information" + " about the L2 FIB entry {0} from bridge " + "domain {1}. Status code: {2}.". + format(mac, bd_name, status_code)) + + new_data = HcUtil.remove_item(resp, path) + status_code, resp = HcUtil.\ + put_honeycomb_data(node, "config_bridge_domain", new_data) + if status_code != HTTPCodes.OK: + raise HoneycombError("Not possible to remove L2 FIB entry {0} from " + "bridge domain {1}. Status code: {2}.". + format(mac, bd_name, status_code)) + return resp + + + @staticmethod + def remove_all_l2_fib_entries(node, bd_name): + """Remove all entries from the bridge domain's L2 FIB table. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :type node: dict + :type bd_name: str + :returns: Content of response. + :rtype: bytearray + """ + + path = ("bridge-domains", + ("bridge-domain", "name", bd_name), + "l2-fib-table") + + return BridgeDomainKeywords._set_bd_properties( + node, bd_name, path, None) + + @staticmethod + def get_all_l2_fib_entries(node, bd_name): + """Retrieves all entries from the bridge domain's L2 FIB table. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :type node: dict + :type bd_name: str + :returns: Bridge domain's L2 FIB table or empty list if the table does + not exist or it is empty. + :rtype: list + """ + + bd_data = BridgeDomainKeywords.get_bd_oper_data(node, bd_name) + try: + return bd_data["l2-fib-table"]["l2-fib-entry"] + except KeyError: + return [] + + @staticmethod + def get_l2_fib_entry(node, bd_name, mac): + """Retrieves an entry from bridge domain's L2 FIB table. The entry is + specified by MAC address. + + :param node: Honeycomb node. + :param bd_name: Bridge domain's name. + :param mac: MAC address used as the key in L2 FIB data structure. + :type node: dict + :type bd_name: str + :type mac: str + :returns: The requested entry from bridge domain's L2 FIB table or empty + dictionary if it does not exist in the L2 FIB table. + :rtype: dict + """ + + l2_fib = BridgeDomainKeywords.get_all_l2_fib_entries(node, bd_name) + for entry in l2_fib: + if entry["phys-address"] == mac: + return entry + return {}