aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTibor Frank <tifrank@cisco.com>2016-05-13 10:25:16 +0200
committerTibor Frank <tifrank@cisco.com>2016-05-13 14:39:44 +0200
commit981bc57e281bc2f6920f7690eccc3106419474d2 (patch)
tree3a87f2be9fad0b8341786a86db7ff3833baf9097
parent97c8c74e4f813a259ca825e831f83d546d96a171 (diff)
Add possibility to create a VxLAN interface.
JIRA: CSIT-51 - add a keyword which adds a new VxLAN interface - change InterfaceUtil.vxlan_dump to be able to return info about all VxLAN interfaces. Change-Id: I8ad3dc1d414924e74ea1ecea1f316ca5c648e2d0 Signed-off-by: Tibor Frank <tifrank@cisco.com>
-rw-r--r--resources/libraries/python/InterfaceUtil.py33
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py64
-rw-r--r--resources/templates/vat/vxlan_dump.vat2
3 files changed, 86 insertions, 13 deletions
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index 3da0e1a204..6790fb7221 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -494,30 +494,39 @@ class InterfaceUtil(object):
.format(node))
@staticmethod
- def vxlan_dump(node, interface):
+ def vxlan_dump(node, interface=None):
"""Get VxLAN data for the given interface.
:param node: VPP node to get interface data from.
:param interface: Numeric index or name string of a specific interface.
+ If None, information about all VxLAN interfaces is returned.
:type node: dict
:type interface: int or str
- :return: Dictionary containing data for the given VxLAN.
- :rtype dict
+ :return: Dictionary containing data for the given VxLAN interface or if
+ interface=None, the list of dictionaries with all VxLAN interfaces.
+ :rtype dict or list
"""
-
- if isinstance(interface, basestring):
+ param = "sw_if_index"
+ if interface is None:
+ param = ''
+ sw_if_index = ''
+ elif isinstance(interface, basestring):
sw_if_index = Topology.get_interface_sw_index(node, interface)
- else:
+ elif isinstance(interface, int):
sw_if_index = interface
+ else:
+ raise Exception("Wrong interface format {0}".format(interface))
with VatTerminal(node) as vat:
response = vat.vat_terminal_exec_cmd_from_template(
- "vxlan_dump.vat", sw_if_index=sw_if_index)
-
- for vxlan in response[0]:
- if vxlan["sw_if_index"] == sw_if_index:
- return vxlan
- return {}
+ "vxlan_dump.vat", param=param, sw_if_index=sw_if_index)
+
+ if sw_if_index:
+ for vxlan in response[0]:
+ if vxlan["sw_if_index"] == sw_if_index:
+ return vxlan
+ return {}
+ return response[0]
@staticmethod
def create_subinterface(node, interface, sub_id, outer_vlan_id,
diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
index 854bc07ee6..7bdfa19831 100644
--- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
+++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
@@ -674,6 +674,70 @@ class InterfaceKeywords(object):
node, interface, path, value)
@staticmethod
+ def create_vxlan_interface(node, interface, **kwargs):
+ """Create a new VxLAN interface.
+
+ :param node: Honeycomb node.
+ :param interface: The name of interface.
+ :param kwargs: Parameters and their values. The accepted parameters are
+ defined in InterfaceKeywords.VXLAN_PARAMS.
+ :type node: dict
+ :type interface: str
+ :type kwargs: dict
+ :return: Content of response.
+ :rtype: bytearray
+ :raises HoneycombError: If the parameter is not valid.
+ """
+
+ new_vx_lan = {
+ "name": interface,
+ "type": "v3po:vxlan-tunnel",
+ "v3po:vxlan": {}
+ }
+ for param, value in kwargs.items():
+ if param not in InterfaceKeywords.VXLAN_PARAMS:
+ raise HoneycombError("The parameter {0} is invalid.".
+ format(param))
+ new_vx_lan["v3po:vxlan"][param] = value
+
+ path = ("interfaces", "interface")
+ vx_lan_structure = [new_vx_lan, ]
+ return InterfaceKeywords._set_interface_properties(
+ node, interface, path, vx_lan_structure)
+
+ @staticmethod
+ def delete_interface(node, interface):
+ """Delete an interface.
+
+ :param node: Honeycomb node.
+ :param interface: The name of interface.
+ :type node: dict
+ :type interface: str
+ :return: Content of response.
+ :rtype: bytearray
+ :raises HoneycombError: If it is not possible to get information about
+ interfaces or it is not possible to delete the interface.
+ """
+
+ path = ("interfaces", ("interface", "name", interface))
+
+ status_code, resp = HcUtil.\
+ get_honeycomb_data(node, "config_vpp_interfaces")
+ if status_code != HTTPCodes.OK:
+ raise HoneycombError(
+ "Not possible to get configuration information about the "
+ "interfaces. Status code: {0}.".format(status_code))
+
+ new_data = HcUtil.remove_item(resp, path)
+ status_code, resp = HcUtil.\
+ put_honeycomb_data(node, "config_vpp_interfaces", new_data)
+ if status_code != HTTPCodes.OK:
+ raise HoneycombError("Not possible to remove interface {0}. "
+ "Status code: {1}.".
+ format(interface, status_code))
+ return resp
+
+ @staticmethod
def configure_interface_vxlan(node, interface, **kwargs):
"""Configure VxLAN on the interface.
diff --git a/resources/templates/vat/vxlan_dump.vat b/resources/templates/vat/vxlan_dump.vat
index 0be6d9ff69..6f41f311bc 100644
--- a/resources/templates/vat/vxlan_dump.vat
+++ b/resources/templates/vat/vxlan_dump.vat
@@ -1 +1 @@
-vxlan_tunnel_dump sw_if_index {sw_if_index} \ No newline at end of file
+vxlan_tunnel_dump {param} {sw_if_index} \ No newline at end of file