aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorselias <samelias@cisco.com>2017-03-07 15:42:02 +0100
committerTibor Frank <tifrank@cisco.com>2017-03-21 12:00:46 +0000
commit4f4eaa1d52f3bdbe3caecdc1d6a024c369a2834a (patch)
tree44d1d559b187dbdf10eae12acc4da19affa1a5f4 /resources
parent8003aa2c3d1a0d4c1dbf3b6286d841a47b5fbb4c (diff)
CSIT-536 HC Test: support testing with ODL client
Reuses existing restconf test cases to test Honeycomb's netconf interface. When seding the requests to ODL's Honeycomb mountpoint, ODL translates these requests to netconf RPCs. Add new tag "honeycomb_odl" that excludes incompatible test cases. Change-Id: Ie293449da0129b02db85e30aa4f3266928d7d9f6 Signed-off-by: selias <samelias@cisco.com>
Diffstat (limited to 'resources')
-rw-r--r--resources/libraries/python/HTTPRequest.py33
-rw-r--r--resources/libraries/python/constants.py3
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py2
-rw-r--r--resources/libraries/python/honeycomb/HcPersistence.py40
-rw-r--r--resources/libraries/python/honeycomb/HoneycombSetup.py138
-rw-r--r--resources/libraries/robot/honeycomb/access_control_lists.robot2
-rw-r--r--resources/libraries/robot/honeycomb/honeycomb.robot36
-rw-r--r--resources/templates/honeycomb/add_vpp_to_topology.xml9
-rw-r--r--resources/templates/honeycomb/config_bridge_domain.url2
-rw-r--r--resources/templates/honeycomb/config_classify_table.url2
-rw-r--r--resources/templates/honeycomb/config_lisp.url2
-rw-r--r--resources/templates/honeycomb/config_nat.url2
-rw-r--r--resources/templates/honeycomb/config_network_topology.url2
-rw-r--r--resources/templates/honeycomb/config_nsh.url2
-rw-r--r--resources/templates/honeycomb/config_plugin_acl.url2
-rw-r--r--resources/templates/honeycomb/config_topology.url1
-rw-r--r--resources/templates/honeycomb/config_topology_node.url1
-rw-r--r--resources/templates/honeycomb/config_vpp_interfaces.url2
-rw-r--r--resources/templates/honeycomb/odl_client/mount_honeycomb.xml33
-rw-r--r--resources/templates/honeycomb/odl_client/odl_netconf_connector.url1
-rw-r--r--resources/templates/honeycomb/oper_bridge_domains.url2
-rw-r--r--resources/templates/honeycomb/oper_classify_table.url2
-rw-r--r--resources/templates/honeycomb/oper_disabled_interfaces.url2
-rw-r--r--resources/templates/honeycomb/oper_lisp.url2
-rw-r--r--resources/templates/honeycomb/oper_nat.url2
-rw-r--r--resources/templates/honeycomb/oper_network_topology.url2
-rw-r--r--resources/templates/honeycomb/oper_nsh.url2
-rw-r--r--resources/templates/honeycomb/oper_vpp_interfaces.url2
-rw-r--r--resources/templates/honeycomb/oper_vpp_version.url2
-rw-r--r--resources/templates/honeycomb/poll_oper_data.url1
30 files changed, 295 insertions, 39 deletions
diff --git a/resources/libraries/python/HTTPRequest.py b/resources/libraries/python/HTTPRequest.py
index 1f5df52c01..adf3d168eb 100644
--- a/resources/libraries/python/HTTPRequest.py
+++ b/resources/libraries/python/HTTPRequest.py
@@ -22,6 +22,7 @@ from enum import IntEnum, unique
from robot.api.deco import keyword
from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
from requests import request, RequestException, Timeout, TooManyRedirects, \
HTTPError, ConnectionError
@@ -36,6 +37,7 @@ class HTTPCodes(IntEnum):
UNAUTHORIZED = 401
FORBIDDEN = 403
NOT_FOUND = 404
+ CONFLICT = 409
INTERNAL_SERVER_ERROR = 500
SERVICE_UNAVAILABLE = 503
@@ -167,8 +169,23 @@ class HTTPRequest(object):
5. there is any other unexpected HTTP request exception.
"""
timeout = kwargs["timeout"]
+
+ if BuiltIn().get_variable_value("${use_odl_client}"):
+ # TODO: node["honeycomb"]["odl_port"]
+ port = 8181
+ odl_url_part = "/network-topology:network-topology/topology/" \
+ "topology-netconf/node/vpp/yang-ext:mount"
+ else:
+ port = node["honeycomb"]["port"]
+ odl_url_part = ""
+
+ try:
+ path = path.format(odl_url_part=odl_url_part)
+ except KeyError:
+ pass
+
url = HTTPRequest.create_full_url(node['host'],
- node['honeycomb']['port'],
+ port,
path)
try:
auth = HTTPBasicAuth(node['honeycomb']['user'],
@@ -254,7 +271,8 @@ class HTTPRequest(object):
@staticmethod
@keyword(name="HTTP Post")
- def post(node, path, headers=None, payload=None, json=None, timeout=10):
+ def post(node, path, headers=None, payload=None, json=None, timeout=10,
+ enable_logging=True):
"""Sends a POST request and returns the response and status code.
:param node: Honeycomb node.
@@ -265,18 +283,23 @@ class HTTPRequest(object):
:param json: JSON formatted string to send in the body of the Request.
:param timeout: How long to wait for the server to send data before
giving up, as a float, or a (connect timeout, read timeout) tuple.
+ :param enable_logging: Used to suppress errors when checking ODL
+ state during suite setup and teardown. When True, logging is enabled,
+ otherwise logging is disabled.
:type node: dict
:type path: str
:type headers: dict
:type payload: dict, bytes, or file-like object
:type json: str
:type timeout: float or tuple
+ :type enable_logging: bool
:return: Status code and content of response.
:rtype: tuple
"""
- return HTTPRequest._http_request('POST', node, path, headers=headers,
- data=payload, json=json,
- timeout=timeout)
+ return HTTPRequest._http_request('POST', node, path,
+ enable_logging=enable_logging,
+ headers=headers, data=payload,
+ json=json, timeout=timeout)
@staticmethod
@keyword(name="HTTP Delete")
diff --git a/resources/libraries/python/constants.py b/resources/libraries/python/constants.py
index a280b51beb..4c3a8ff451 100644
--- a/resources/libraries/python/constants.py
+++ b/resources/libraries/python/constants.py
@@ -37,3 +37,6 @@ class Constants(object):
# Honeycomb templates location
RESOURCES_TPL_HC = 'resources/templates/honeycomb'
+
+ # ODL Client Restconf listener port
+ ODL_PORT = 8181
diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
index 3351ebf5d3..b4746e2118 100644
--- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
+++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
@@ -1544,7 +1544,7 @@ class InterfaceKeywords(object):
"""
interface = intf.replace("/", "%2F")
- path = "/interface/{0}/pbb-rewrite/".format(interface)
+ path = "/interface/{0}/pbb-rewrite".format(interface)
status_code, resp = HcUtil. \
put_honeycomb_data(node, "config_vpp_interfaces", params, path,
data_representation=DataRepresentation.JSON)
diff --git a/resources/libraries/python/honeycomb/HcPersistence.py b/resources/libraries/python/honeycomb/HcPersistence.py
index c76a276098..83d756f9d3 100644
--- a/resources/libraries/python/honeycomb/HcPersistence.py
+++ b/resources/libraries/python/honeycomb/HcPersistence.py
@@ -102,3 +102,43 @@ class HcPersistence(object):
for command in commands:
(_, stdout, _) = ssh.exec_command_sudo(command)
logger.info(stdout)
+
+
+ @staticmethod
+ def configure_persistence(node, state):
+ """Enable or disable Honeycomb configuration data persistence.
+
+ :param node: Honeycomb node.
+ :param state: Enable or Disable.
+ :type node: dict
+ :type state: str
+ :raises ValueError: If the state argument is incorrect.
+ :raises HoneycombError: If the operation fails.
+ """
+
+ state = state.lower()
+ if state == "enable":
+ state = "true"
+ elif state == "disable":
+ state = "false"
+ else:
+ raise ValueError("Unexpected value of state argument:"
+ " {0} provided. Must be enable or disable."
+ .format(state))
+
+ for setting in ("persist-config", "persist-context"):
+ # find the setting, replace entire line with 'setting: state'
+ find = '\\"{setting}\\":'.format(setting=setting)
+ replace = '\\"{setting}\\": \\"{state}\\",'.format(
+ setting=setting, state=state)
+
+ argument = '"/{0}/c\\ {1}"'.format(find, replace)
+ path = "{0}/config/honeycomb.json".format(Const.REMOTE_HC_DIR)
+ command = "sed -i {0} {1}".format(argument, path)
+
+ ssh = SSH()
+ ssh.connect(node)
+ (ret_code, _, stderr) = ssh.exec_command_sudo(command)
+ if ret_code != 0:
+ raise HoneycombError("Failed to modify configuration on "
+ "node {0}, {1}".format(node, stderr))
diff --git a/resources/libraries/python/honeycomb/HoneycombSetup.py b/resources/libraries/python/honeycomb/HoneycombSetup.py
index 239ac10191..117b3e57c4 100644
--- a/resources/libraries/python/honeycomb/HoneycombSetup.py
+++ b/resources/libraries/python/honeycomb/HoneycombSetup.py
@@ -104,6 +104,36 @@ class HoneycombSetup(object):
format(errors))
@staticmethod
+ def restart_honeycomb_and_vpp_on_duts(*nodes):
+ """Restart the Honeycomb service on specified DUT nodes.
+
+ Use the keyword "Check Honeycomb Startup State" to check when Honeycomb
+ is fully restarted.
+ :param nodes: List of nodes to restart Honeycomb on.
+ :type nodes: list
+ :raises HoneycombError: If Honeycomb failed to restart.
+ """
+ logger.console("\nRestarting Honeycomb service ...")
+
+ cmd = "sudo service honeycomb restart && sudo service vpp restart"
+ errors = []
+
+ for node in nodes:
+ if node['type'] == NodeType.DUT:
+ ssh = SSH()
+ ssh.connect(node)
+ (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ if int(ret_code) != 0:
+ errors.append(node['host'])
+ else:
+ logger.info("Restart of Honeycomb and VPP on node {0} is "
+ "in progress ...".format(node['host']))
+ if errors:
+ raise HoneycombError('Node(s) {0} failed to restart Honeycomb'
+ ' and/or VPP.'.
+ format(errors))
+
+ @staticmethod
def check_honeycomb_startup_state(*nodes):
"""Check state of Honeycomb service during startup on specified nodes.
@@ -372,3 +402,111 @@ class HoneycombSetup(object):
if ret_code != 0:
raise HoneycombError("Failed to copy JVPP libraries on "
"node {0}, {1}".format(node, stderr))
+
+ @staticmethod
+ def find_odl_client(node):
+ """Check if there is a karaf directory in home.
+
+ :param node: Honeycomb node.
+ :type node: dict
+ :returns: True if ODL client is present on node, else False.
+ :rtype: bool
+ """
+
+ ssh = SSH()
+ ssh.connect(node)
+ (ret_code, stdout, _) = ssh.exec_command_sudo(
+ "ls ~ | grep karaf")
+
+ logger.debug(stdout)
+ return not bool(ret_code)
+
+ @staticmethod
+ def start_odl_client(node):
+ """Start ODL client on the specified node.
+
+ karaf should be located in home directory, and VPP and Honeycomb should
+ already be running, otherwise the start will fail.
+ :param node: Nodes to start ODL client on.
+ :type node: dict
+ :raises HoneycombError: If Honeycomb fails to start.
+ """
+
+ logger.console("\nStarting ODL client ...")
+
+ cmd = "~/*karaf*/bin/start"
+
+ ssh = SSH()
+ ssh.connect(node)
+ (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ if int(ret_code) != 0:
+ raise HoneycombError('Node {0} failed to start ODL.'.
+ format(node['host']))
+ else:
+ logger.info("Starting the ODL client on node {0} is "
+ "in progress ...".format(node['host']))
+
+ @staticmethod
+ def check_odl_startup_state(node):
+ """Check the status of ODL client startup.
+
+ :param node: Honeycomb node.
+ :param node: dict
+ :returns: True when ODL is started.
+ :rtype: bool
+ :raises HoneycombError: When the response is not code 200: OK.
+ """
+
+ path = HcUtil.read_path_from_url_file(
+ "odl_client/odl_netconf_connector")
+ expected_status_codes = (HTTPCodes.UNAUTHORIZED,
+ HTTPCodes.FORBIDDEN,
+ HTTPCodes.NOT_FOUND,
+ HTTPCodes.SERVICE_UNAVAILABLE,
+ HTTPCodes.INTERNAL_SERVER_ERROR)
+
+ status_code, _ = HTTPRequest.get(node, path, timeout=10,
+ enable_logging=False)
+ if status_code == HTTPCodes.OK:
+ logger.info("ODL client on node {0} is up and running".
+ format(node['host']))
+ elif status_code in expected_status_codes:
+ if status_code == HTTPCodes.UNAUTHORIZED:
+ logger.info('Unauthorized. If this triggers keyword '
+ 'timeout, verify username and password.')
+ raise HoneycombError('ODL client on node {0} running but '
+ 'not yet ready.'.format(node['host']),
+ enable_logging=False)
+ else:
+ raise HoneycombError('Unexpected return code: {0}.'.
+ format(status_code))
+ return True
+
+ @staticmethod
+ def mount_honeycomb_on_odl(node):
+ """Tell ODL client to mount Honeycomb instance over netconf.
+
+ :param node: Honeycomb node.
+ :type node: dict
+ :raises HoneycombError: When the response is not code 200: OK.
+ """
+
+ path = HcUtil.read_path_from_url_file(
+ "odl_client/odl_netconf_connector")
+
+ url_file = "{0}/{1}".format(Const.RESOURCES_TPL_HC,
+ "odl_client/mount_honeycomb.xml")
+
+ with open(url_file) as template:
+ data = template.read()
+
+ status_code, _ = HTTPRequest.post(
+ node, path, headers={"Content-Type": "application/xml"},
+ payload=data, timeout=10, enable_logging=False)
+
+ if status_code == HTTPCodes.OK:
+ logger.info("ODL mount point configured successfully.")
+ elif status_code == HTTPCodes.CONFLICT:
+ logger.warn("ODL mount point was already configured.")
+ else:
+ raise HoneycombError('Mount point configuration not successful')
diff --git a/resources/libraries/robot/honeycomb/access_control_lists.robot b/resources/libraries/robot/honeycomb/access_control_lists.robot
index d45c1f8948..a62ea0f2e8 100644
--- a/resources/libraries/robot/honeycomb/access_control_lists.robot
+++ b/resources/libraries/robot/honeycomb/access_control_lists.robot
@@ -155,7 +155,7 @@
| | ... | \| ACL table from Honeycomb should not exist \| ${nodes['DUT1']} \
| | ... | \| table0 \|
| | [Arguments] | ${node} | ${table_name}
-| | Run keyword and expect error | ValueError: No JSON object could be decoded
+| | Run keyword and expect error | *
| | ... | Get classify table oper data | ${node} | ${table_name}
| ACL table from VAT should not exist
diff --git a/resources/libraries/robot/honeycomb/honeycomb.robot b/resources/libraries/robot/honeycomb/honeycomb.robot
index 7d807f8df9..919c6f5e2a 100644
--- a/resources/libraries/robot/honeycomb/honeycomb.robot
+++ b/resources/libraries/robot/honeycomb/honeycomb.robot
@@ -37,7 +37,7 @@
| | ...
| | [Arguments] | @{duts}
| | Start honeycomb on DUTs | @{duts}
-| | Wait until keyword succeeds | 4min | 15sec
+| | Wait until keyword succeeds | 4min | 20sec
| | ... | Check honeycomb startup state | @{duts}
| Stop honeycomb service on DUTs
@@ -59,7 +59,7 @@
| | ...
| | [Arguments] | @{duts}
| | Stop honeycomb on DUTs | @{duts}
-| | Wait until keyword succeeds | 30sec | 5sec
+| | Wait until keyword succeeds | 60sec | 10sec
| | ... | Check honeycomb shutdown state | @{duts}
| Clear persisted Honeycomb configuration
@@ -91,6 +91,21 @@
| | Setup DUT | ${node}
| | Setup Honeycomb service on DUTs | ${node}
+| Restart Honeycomb and VPP
+| | [Documentation] | Restarts Honeycomb service and wait until it starts up.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \|
+| | [Arguments] | ${node}
+| | Log | Performing clean restart of Honeycomb and VPP. | console=True
+| | Restart Honeycomb and VPP on DUTs | ${node}
+| | Wait until keyword succeeds | 4min | 20sec
+| | ... | Check honeycomb startup state | ${node}
+
| Archive Honeycomb log file
| | [Documentation] | Copy honeycomb.log file from Honeycomb node\
| | ... | to test executor.
@@ -101,4 +116,19 @@
| | ...
| | ... | \| Archive Honeycomb log file \| ${nudes['DUT1']} \|
| | [Arguments] | ${node}
-| | Archive Honeycomb log | ${node} \ No newline at end of file
+| | Archive Honeycomb log | ${node}
+
+| Find ODL client on node
+| | [Arguments] | ${node}
+| | ${odl_present}= | Find ODL Client | ${node}
+| | Return from keyword | ${odl_present}
+
+| Start ODL client on node
+| | [Arguments] | ${node}
+| | Start ODL client | ${node}
+| | Wait until keyword succeeds | 4min | 20sec
+| | ... | Mount Honeycomb on ODL | ${node}
+| | Wait until keyword succeeds | 2min | 10sec
+| | ... | Check ODL startup state | ${node}
+| | Wait until keyword succeeds | 2min | 10sec
+| | ... | Check honeycomb startup state | ${node}
diff --git a/resources/templates/honeycomb/add_vpp_to_topology.xml b/resources/templates/honeycomb/add_vpp_to_topology.xml
deleted file mode 100644
index 46a84f28e8..0000000000
--- a/resources/templates/honeycomb/add_vpp_to_topology.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
- <node-id>{vpp_host}</node-id>
- <host xmlns="urn:opendaylight:netconf-node-topology">{vpp_ip}</host>
- <port xmlns="urn:opendaylight:netconf-node-topology">{vpp_port}</port>
- <username xmlns="urn:opendaylight:netconf-node-topology">{user}</username>
- <password xmlns="urn:opendaylight:netconf-node-topology">{passwd}</password>
- <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only>
- <keepalive-delay xmlns="urn:opendaylight:netconf-node-topology">0</keepalive-delay>
-</node> \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_bridge_domain.url b/resources/templates/honeycomb/config_bridge_domain.url
index 03d8f241cd..8e37a503b0 100644
--- a/resources/templates/honeycomb/config_bridge_domain.url
+++ b/resources/templates/honeycomb/config_bridge_domain.url
@@ -1 +1 @@
-/restconf/config/v3po:vpp/bridge-domains \ No newline at end of file
+/restconf/config{odl_url_part}/v3po:vpp/bridge-domains \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_classify_table.url b/resources/templates/honeycomb/config_classify_table.url
index 986b1173ac..042055f335 100644
--- a/resources/templates/honeycomb/config_classify_table.url
+++ b/resources/templates/honeycomb/config_classify_table.url
@@ -1 +1 @@
-/restconf/config/vpp-classifier:vpp-classifier \ No newline at end of file
+/restconf/config{odl_url_part}/vpp-classifier:vpp-classifier \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_lisp.url b/resources/templates/honeycomb/config_lisp.url
index 69e3d512e6..16652af8c6 100644
--- a/resources/templates/honeycomb/config_lisp.url
+++ b/resources/templates/honeycomb/config_lisp.url
@@ -1 +1 @@
-/restconf/config/lisp:lisp \ No newline at end of file
+/restconf/config{odl_url_part}/lisp:lisp \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_nat.url b/resources/templates/honeycomb/config_nat.url
index e323aedea9..5471493c2d 100644
--- a/resources/templates/honeycomb/config_nat.url
+++ b/resources/templates/honeycomb/config_nat.url
@@ -1 +1 @@
-/restconf/config/ietf-nat:nat-config \ No newline at end of file
+/restconf/config{odl_url_part}/ietf-nat:nat-config \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_network_topology.url b/resources/templates/honeycomb/config_network_topology.url
index fe1b9310c2..4232361f54 100644
--- a/resources/templates/honeycomb/config_network_topology.url
+++ b/resources/templates/honeycomb/config_network_topology.url
@@ -1 +1 @@
-/restconf/config/network-topology:network-topology \ No newline at end of file
+/restconf/config{odl_url_part}/network-topology:network-topology \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_nsh.url b/resources/templates/honeycomb/config_nsh.url
index ad14e953e8..647c46120b 100644
--- a/resources/templates/honeycomb/config_nsh.url
+++ b/resources/templates/honeycomb/config_nsh.url
@@ -1 +1 @@
-/restconf/config/vpp-nsh:vpp-nsh \ No newline at end of file
+/restconf/config{odl_url_part}/vpp-nsh:vpp-nsh \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_plugin_acl.url b/resources/templates/honeycomb/config_plugin_acl.url
index 79a9670f44..19a49f2b04 100644
--- a/resources/templates/honeycomb/config_plugin_acl.url
+++ b/resources/templates/honeycomb/config_plugin_acl.url
@@ -1 +1 @@
-/restconf/config/ietf-access-control-list:access-lists \ No newline at end of file
+/restconf/config{odl_url_part}/ietf-access-control-list:access-lists \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_topology.url b/resources/templates/honeycomb/config_topology.url
deleted file mode 100644
index e76f47ce8c..0000000000
--- a/resources/templates/honeycomb/config_topology.url
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/config/network-topology:network-topology/topology/topology-netconf \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_topology_node.url b/resources/templates/honeycomb/config_topology_node.url
deleted file mode 100644
index 89b7aa851e..0000000000
--- a/resources/templates/honeycomb/config_topology_node.url
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/config/network-topology:network-topology/topology/topology-netconf/node \ No newline at end of file
diff --git a/resources/templates/honeycomb/config_vpp_interfaces.url b/resources/templates/honeycomb/config_vpp_interfaces.url
index 3789f5e535..03ddc4f88b 100644
--- a/resources/templates/honeycomb/config_vpp_interfaces.url
+++ b/resources/templates/honeycomb/config_vpp_interfaces.url
@@ -1 +1 @@
-/restconf/config/ietf-interfaces:interfaces \ No newline at end of file
+/restconf/config{odl_url_part}/ietf-interfaces:interfaces \ No newline at end of file
diff --git a/resources/templates/honeycomb/odl_client/mount_honeycomb.xml b/resources/templates/honeycomb/odl_client/mount_honeycomb.xml
new file mode 100644
index 0000000000..97f43e1119
--- /dev/null
+++ b/resources/templates/honeycomb/odl_client/mount_honeycomb.xml
@@ -0,0 +1,33 @@
+<module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type>
+ <name>vpp</name>
+ <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">127.0.0.1</address>
+ <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">2831</port>
+ <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</username>
+ <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</password>
+ <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>
+ <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>
+ <name>global-event-executor</name>
+ </event-executor>
+ <binding-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>
+ <name>binding-osgi-broker</name>
+ </binding-registry>
+ <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
+ <name>dom-broker</name>
+ </dom-registry>
+ <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>
+ <name>global-netconf-dispatcher</name>
+ </client-dispatcher>
+ <processing-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:threadpool</type>
+ <name>global-netconf-processing-executor</name>
+ </processing-executor>
+ <keepalive-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:scheduled-threadpool</type>
+ <name>global-netconf-ssh-scheduled-executor</name>
+ </keepalive-executor>
+</module> \ No newline at end of file
diff --git a/resources/templates/honeycomb/odl_client/odl_netconf_connector.url b/resources/templates/honeycomb/odl_client/odl_netconf_connector.url
new file mode 100644
index 0000000000..4d7e7d0732
--- /dev/null
+++ b/resources/templates/honeycomb/odl_client/odl_netconf_connector.url
@@ -0,0 +1 @@
+/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_bridge_domains.url b/resources/templates/honeycomb/oper_bridge_domains.url
index 7c8584326c..f0fedb4039 100644
--- a/resources/templates/honeycomb/oper_bridge_domains.url
+++ b/resources/templates/honeycomb/oper_bridge_domains.url
@@ -1 +1 @@
-/restconf/operational/v3po:vpp-state/bridge-domains \ No newline at end of file
+/restconf/operational{odl_url_part}/v3po:vpp-state/bridge-domains \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_classify_table.url b/resources/templates/honeycomb/oper_classify_table.url
index f9fd294a8f..a7a0c7e3fd 100644
--- a/resources/templates/honeycomb/oper_classify_table.url
+++ b/resources/templates/honeycomb/oper_classify_table.url
@@ -1 +1 @@
-/restconf/operational/vpp-classifier:vpp-classifier-state \ No newline at end of file
+/restconf/operational{odl_url_part}/vpp-classifier:vpp-classifier-state \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_disabled_interfaces.url b/resources/templates/honeycomb/oper_disabled_interfaces.url
index d885c203a2..276830d7a7 100644
--- a/resources/templates/honeycomb/oper_disabled_interfaces.url
+++ b/resources/templates/honeycomb/oper_disabled_interfaces.url
@@ -1 +1 @@
-/restconf/operational/v3po-context:disabled-interfaces \ No newline at end of file
+/restconf/operational{odl_url_part}/v3po-context:disabled-interfaces \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_lisp.url b/resources/templates/honeycomb/oper_lisp.url
index 850d3174a1..95d19c05a8 100644
--- a/resources/templates/honeycomb/oper_lisp.url
+++ b/resources/templates/honeycomb/oper_lisp.url
@@ -1 +1 @@
-/restconf/operational/lisp:lisp-state \ No newline at end of file
+/restconf/operational{odl_url_part}/lisp:lisp-state \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_nat.url b/resources/templates/honeycomb/oper_nat.url
index 1445f4064b..a0101bb6de 100644
--- a/resources/templates/honeycomb/oper_nat.url
+++ b/resources/templates/honeycomb/oper_nat.url
@@ -1 +1 @@
-/restconf/operational/ietf-nat:nat-state \ No newline at end of file
+/restconf/operational{odl_url_part}/ietf-nat:nat-state \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_network_topology.url b/resources/templates/honeycomb/oper_network_topology.url
index e165d3f259..14e74ee3c7 100644
--- a/resources/templates/honeycomb/oper_network_topology.url
+++ b/resources/templates/honeycomb/oper_network_topology.url
@@ -1 +1 @@
-/restconf/operational/network-topology:network-topology \ No newline at end of file
+/restconf/operational{odl_url_part}/network-topology:network-topology \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_nsh.url b/resources/templates/honeycomb/oper_nsh.url
index 5be706d9df..1b511b3a5a 100644
--- a/resources/templates/honeycomb/oper_nsh.url
+++ b/resources/templates/honeycomb/oper_nsh.url
@@ -1 +1 @@
-/restconf/operational/vpp-nsh:vpp-nsh-state \ No newline at end of file
+/restconf/operational{odl_url_part}/vpp-nsh:vpp-nsh-state \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_vpp_interfaces.url b/resources/templates/honeycomb/oper_vpp_interfaces.url
index de6f950c0d..cae9e41b68 100644
--- a/resources/templates/honeycomb/oper_vpp_interfaces.url
+++ b/resources/templates/honeycomb/oper_vpp_interfaces.url
@@ -1 +1 @@
-/restconf/operational/ietf-interfaces:interfaces-state \ No newline at end of file
+/restconf/operational{odl_url_part}/ietf-interfaces:interfaces-state \ No newline at end of file
diff --git a/resources/templates/honeycomb/oper_vpp_version.url b/resources/templates/honeycomb/oper_vpp_version.url
index 59759be8ea..fbb8820975 100644
--- a/resources/templates/honeycomb/oper_vpp_version.url
+++ b/resources/templates/honeycomb/oper_vpp_version.url
@@ -1 +1 @@
-/restconf/operational/v3po:vpp-state/version \ No newline at end of file
+/restconf/operational{odl_url_part}/v3po:vpp-state/version \ No newline at end of file
diff --git a/resources/templates/honeycomb/poll_oper_data.url b/resources/templates/honeycomb/poll_oper_data.url
deleted file mode 100644
index 2fe04386f3..0000000000
--- a/resources/templates/honeycomb/poll_oper_data.url
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/operations/v3po:vpp-poll-oper-data \ No newline at end of file