diff options
-rw-r--r-- | sdnvpn/lib/utils.py | 42 | ||||
-rw-r--r-- | sdnvpn/test/functest/testcase_3.py | 57 |
2 files changed, 80 insertions, 19 deletions
diff --git a/sdnvpn/lib/utils.py b/sdnvpn/lib/utils.py index 0748803..33ff594 100644 --- a/sdnvpn/lib/utils.py +++ b/sdnvpn/lib/utils.py @@ -900,3 +900,45 @@ def get_ovs_flows(compute_node_list, ovs_br_list, of_protocol="OpenFlow13"): cmd_out_lines += (compute_node.run_cmd(ovs_flows_cmd).strip(). split("\n")) return cmd_out_lines + + +def get_odl_bgp_entity_owner(controllers): + """ Finds the ODL owner of the BGP entity in the cluster. + + When ODL runs in clustering mode we need to execute the BGP speaker + related commands to that ODL which is the owner of the BGP entity. + + :param controllers: list of OS controllers + :return controller: OS controller in which ODL BGP entity owner runs + """ + if len(controllers) == 1: + return controllers[0] + else: + url = ('http://admin:admin@{ip}:8081/restconf/' + 'operational/entity-owners:entity-owners/entity-type/bgp' + .format(ip=controllers[0].ip)) + + remote_odl_akka_conf = ('/opt/opendaylight/configuration/' + 'initial/akka.conf') + remote_odl_home_akka_conf = '/home/heat-admin/akka.conf' + local_tmp_akka_conf = '/tmp/akka.conf' + try: + json_output = requests.get(url).json() + except Exception: + logger.error('Failed to find the ODL BGP ' + 'entity owner through REST') + return None + odl_bgp_owner = json_output['entity-type'][0]['entity'][0]['owner'] + + for controller in controllers: + + controller.run_cmd('sudo cp {0} /home/heat-admin/' + .format(remote_odl_akka_conf)) + controller.run_cmd('sudo chmod 777 {0}' + .format(remote_odl_home_akka_conf)) + controller.get_file(remote_odl_home_akka_conf, local_tmp_akka_conf) + + for line in open(local_tmp_akka_conf): + if re.search(odl_bgp_owner, line): + return controller + return None diff --git a/sdnvpn/test/functest/testcase_3.py b/sdnvpn/test/functest/testcase_3.py index 95023c6..b7fe642 100644 --- a/sdnvpn/test/functest/testcase_3.py +++ b/sdnvpn/test/functest/testcase_3.py @@ -17,6 +17,7 @@ import logging import os import sys +import time from sdnvpn.lib import quagga from sdnvpn.lib import openstack_utils as os_utils @@ -60,33 +61,48 @@ def main(): logger.info(msg) results.add_success(msg) - controller = controllers[0] # We don't handle HA well - get_ext_ip_cmd = "sudo ip a | grep br-ex | grep inet | awk '{print $2}'" - ext_net_cidr = controller.run_cmd(get_ext_ip_cmd).strip().split('\n') - ext_net_mask = ext_net_cidr[0].split('/')[1] - controller_ext_ip = ext_net_cidr[0].split('/')[0] - - logger.info("Starting bgp speaker of controller at IP %s " - % controller_ext_ip) logger.info("Checking if zrpcd is " - "running on the controller node") - - output_zrpcd = controller.run_cmd("ps --no-headers -C " - "zrpcd -o state") - states = output_zrpcd.split() - running = any([s != 'Z' for s in states]) + "running on the controller nodes") + + for controller in controllers: + output_zrpcd = controller.run_cmd("ps --no-headers -C " + "zrpcd -o state") + states = output_zrpcd.split() + running = any([s != 'Z' for s in states]) + msg = ("zrpcd is running in {name}".format(name=controller.name)) + + if not running: + logger.info("zrpcd is not running on the controller node {name}" + .format(name=controller.name)) + results.add_failure(msg) + else: + logger.info("zrpcd is running on the controller node {name}" + .format(name=controller.name)) + results.add_success(msg) - msg = ("zrpcd is running") + results.add_to_summary(0, "-") - if not running: - logger.info("zrpcd is not running on the controller node") + # Find the BGP entity owner in ODL because of this bug: + # https://jira.opendaylight.org/browse/NETVIRT-1308 + msg = ("Found BGP entity owner") + controller = test_utils.get_odl_bgp_entity_owner(controllers) + if controller is None: + logger.error("Failed to find the BGP entity owner") results.add_failure(msg) else: - logger.info("zrpcd is running on the controller node") + logger.info('BGP entity owner is {name}' + .format(name=controller.name)) results.add_success(msg) - results.add_to_summary(0, "-") + get_ext_ip_cmd = "sudo ip a | grep br-ex | grep inet | awk '{print $2}'" + ext_net_cidr = controller.run_cmd(get_ext_ip_cmd).strip().split('\n') + ext_net_mask = ext_net_cidr[0].split('/')[1] + controller_ext_ip = ext_net_cidr[0].split('/')[0] + + logger.info("Starting bgp speaker of controller at IP %s " + % controller_ext_ip) + # Ensure that ZRPCD ip & port are well configured within ODL add_client_conn_to_bgp = "bgp-connect -p 7644 -h 127.0.0.1 add" test_utils.run_odl_cmd(controller, add_client_conn_to_bgp) @@ -96,6 +112,9 @@ def main(): "--as-num 100 --router-id {0}".format(controller_ext_ip) test_utils.run_odl_cmd(controller, start_quagga) + # we need to wait a bit until the bgpd is up + time.sleep(5) + logger.info("Checking if bgpd is running" " on the controller node") |