X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fhoneycomb%2FHoneycombSetup.py;h=aecb02231488faf446d9362463b52df41bd51042;hp=551d44b5ae368d01fcb0e66c302ad9b6ddccbde4;hb=f2dcf8ccc9789cf22c03bffe15f19fcf71290fdb;hpb=44cafa8a265cfb1144638430079ef4dbf2501d72 diff --git a/resources/libraries/python/honeycomb/HoneycombSetup.py b/resources/libraries/python/honeycomb/HoneycombSetup.py index 551d44b5ae..aecb022314 100644 --- a/resources/libraries/python/honeycomb/HoneycombSetup.py +++ b/resources/libraries/python/honeycomb/HoneycombSetup.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2017 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: @@ -25,6 +25,7 @@ from resources.libraries.python.honeycomb.HoneycombUtil \ import HoneycombUtil as HcUtil from resources.libraries.python.ssh import SSH from resources.libraries.python.topology import NodeType +from resources.libraries.python.DUTSetup import DUTSetup class HoneycombSetup(object): @@ -117,7 +118,7 @@ class HoneycombSetup(object): """ logger.console("\nRestarting Honeycomb service ...") - cmd = "sudo service honeycomb restart && sudo service vpp restart" + cmd = "sudo service honeycomb restart " errors = [] for node in nodes: @@ -127,9 +128,14 @@ class HoneycombSetup(object): (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'])) + try: + DUTSetup.setup_dut(node) + except Exception as err: + logger.debug(err) + errors.append(node['host']) + continue + 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.'. @@ -159,7 +165,7 @@ class HoneycombSetup(object): for node in nodes: if node['type'] == NodeType.DUT: HoneycombSetup.print_ports(node) - status_code, _ = HTTPRequest.get(node, path, timeout=10, + status_code, _ = HTTPRequest.get(node, path, enable_logging=False) if status_code == HTTPCodes.OK: logger.info("Honeycomb on node {0} is up and running". @@ -201,7 +207,6 @@ class HoneycombSetup(object): if node['type'] == NodeType.DUT: try: status_code, _ = HTTPRequest.get(node, '/index.html', - timeout=5, enable_logging=False) if status_code == HTTPCodes.OK: raise HoneycombError('Honeycomb on node {0} is still ' @@ -258,6 +263,31 @@ class HoneycombSetup(object): raise HoneycombError("Failed to modify configuration on " "node {0}, {1}".format(node, stderr)) + @staticmethod + def configure_jvpp_timeout(node, timeout=10): + """Configure timeout value for Java API commands Honeycomb sends to VPP. + + :param node: Information about a DUT node. + :param timeout: Timeout value in seconds. + :type node: dict + :type timeout: int + :raises HoneycombError: If the configuration could not be changed. + """ + + find = "jvpp-request-timeout" + replace = '\\"jvpp-request-timeout\\": {0}'.format(timeout) + + argument = '"/{0}/c\\ {1}"'.format(find, replace) + path = "{0}/config/jvpp.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)) + @staticmethod def print_environment(nodes): """Print information about the nodes to log. The information is defined @@ -408,33 +438,29 @@ class HoneycombSetup(object): "node {0}, {1}".format(node, stderr)) @staticmethod - def find_odl_client(node): - """Check if there is a karaf directory in home. + def setup_odl_client(node, odl_name): + """Start ODL client on the specified node. - :param node: Honeycomb node. + Karaf should be located in /mnt/common, and VPP and Honeycomb should + already be running, otherwise the start will fail. + :param node: Node to start ODL client on. + :param odl_name: Name of ODL client version to use. :type node: dict - :returns: True if ODL client is present on node, else False. - :rtype: bool + :type odl_name: str + :raises HoneycombError: If Honeycomb fails to start. """ + logger.debug("Copying ODL Client to home dir.") + ssh = SSH() ssh.connect(node) - (ret_code, stdout, _) = ssh.exec_command_sudo( - "ls ~ | grep karaf") - logger.debug(stdout) - return not bool(ret_code) + cmd = "cp -r /mnt/common/*karaf_{name}* ~/karaf".format(name=odl_name) - @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. - """ + (ret_code, _, _) = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + raise HoneycombError( + "Failed to copy ODL client on node {0}".format(node["host"])) logger.console("\nStarting ODL client ...")