Example #1
0
    def _router_lifecycle(self, enable_ha):
        router_info = self.generate_router_info(enable_ha)
        router = self.manage_router(self.agent, router_info)

        if enable_ha:
            helpers.wait_until_true(lambda: router.ha_state == 'master')

            # Keepalived notifies of a state transition when it starts,
            # not when it ends. Thus, we have to wait until keepalived finishes
            # configuring everything. We verify this by waiting until the last
            # device has an IP address.
            device = router.router[l3_constants.INTERFACE_KEY][-1]
            device_exists = functools.partial(
                self.device_exists_with_ip_mac, device,
                self.agent.get_internal_device_name, router.ns_name)
            helpers.wait_until_true(device_exists)

        self.assertTrue(self._namespace_exists(router))
        self.assertTrue(self._metadata_proxy_exists(self.agent.conf, router))
        self._assert_internal_devices(router)
        self._assert_external_device(router)
        self._assert_gateway(router)
        self._assert_floating_ips(router)
        self._assert_snat_chains(router)
        self._assert_floating_ip_chains(router)

        if enable_ha:
            self._assert_ha_device(router)
            self.assertTrue(router.keepalived_manager.process.active)

        self._delete_router(self.agent, router.router_id)

        self._assert_router_does_not_exist(router)
        if enable_ha:
            self.assertFalse(router.keepalived_manager.process.active)
Example #2
0
 def test_ha_router_conf_on_restarted_agent(self):
     router_info = self.generate_router_info(enable_ha=True)
     router1 = self._create_router(self.agent, router_info)
     self._add_fip(router1, '192.168.111.12')
     restarted_agent = l3_test_agent.TestL3NATAgent(self.agent.host,
                                                    self.agent.conf)
     self._create_router(restarted_agent, router1.router)
     helpers.wait_until_true(lambda: self._floating_ips_configured(router1))
Example #3
0
    def _router_lifecycle(self, enable_ha, ip_version=4):
        router_info = self.generate_router_info(enable_ha, ip_version)
        router = self.manage_router(self.agent, router_info)

        if enable_ha:
            port = router.get_ex_gw_port()
            interface_name = self.agent.get_external_device_name(port['id'])
            self._assert_no_ip_addresses_on_interface(router, interface_name)
            helpers.wait_until_true(lambda: router.ha_state == 'master')

            # Keepalived notifies of a state transition when it starts,
            # not when it ends. Thus, we have to wait until keepalived finishes
            # configuring everything. We verify this by waiting until the last
            # device has an IP address.
            device = router.router[l3_constants.INTERFACE_KEY][-1]
            device_exists = functools.partial(
                self.device_exists_with_ip_mac, device,
                self.agent.get_internal_device_name, router.ns_name)
            helpers.wait_until_true(device_exists)

        self.assertTrue(self._namespace_exists(router.ns_name))
        self.assertTrue(self._metadata_proxy_exists(self.agent.conf, router))
        self._assert_internal_devices(router)
        self._assert_external_device(router)
        if ip_version == 4:
            # Note(SridharG): enable the assert_gateway for IPv6 once
            # keepalived on Ubuntu14.04 (i.e., check-neutron-dsvm-functional
            # platform) is updated to 1.2.10 (or above).
            # For more details: https://review.openstack.org/#/c/151284/
            self._assert_gateway(router)
            self.assertTrue(self._floating_ips_configured(router))
            self._assert_snat_chains(router)
            self._assert_floating_ip_chains(router)
            self._assert_extra_routes(router)
        self._assert_metadata_chains(router)

        if enable_ha:
            self._assert_ha_device(router)
            self.assertTrue(router.keepalived_manager.process.active)

        self._delete_router(self.agent, router.router_id)

        self._assert_interfaces_deleted_from_ovs()
        self._assert_router_does_not_exist(router)
        if enable_ha:
            self.assertFalse(router.keepalived_manager.process.active)
Example #4
0
    def _router_lifecycle(self, enable_ha):
        router_info = self.generate_router_info(enable_ha)
        router = self.manage_router(self.agent, router_info)

        if enable_ha:
            port = self.agent._get_ex_gw_port(router)
            interface_name = self.agent.get_external_device_name(port['id'])
            self._assert_no_ip_addresses_on_interface(router, interface_name)
            helpers.wait_until_true(lambda: router.ha_state == 'master')

            # Keepalived notifies of a state transition when it starts,
            # not when it ends. Thus, we have to wait until keepalived finishes
            # configuring everything. We verify this by waiting until the last
            # device has an IP address.
            device = router.router[l3_constants.INTERFACE_KEY][-1]
            device_exists = functools.partial(
                self.device_exists_with_ip_mac,
                device,
                self.agent.get_internal_device_name,
                router.ns_name)
            helpers.wait_until_true(device_exists)

        self.assertTrue(self._namespace_exists(router.ns_name))
        self.assertTrue(self._metadata_proxy_exists(self.agent.conf, router))
        self._assert_internal_devices(router)
        self._assert_external_device(router)
        self._assert_gateway(router)
        self._assert_floating_ips(router)
        self._assert_snat_chains(router)
        self._assert_floating_ip_chains(router)
        self._assert_metadata_chains(router)
        self._assert_extra_routes(router)

        if enable_ha:
            self._assert_ha_device(router)
            self.assertTrue(router.keepalived_manager.process.active)

        self._delete_router(self.agent, router.router_id)

        self._assert_router_does_not_exist(router)
        if enable_ha:
            self.assertFalse(router.keepalived_manager.process.active)
Example #5
0
    def test_ha_router_failover(self):
        router_info = self.generate_router_info(enable_ha=True)
        router1 = self.manage_router(self.agent, router_info)

        router_info_2 = copy.deepcopy(router_info)
        router_info_2[l3_constants.HA_INTERFACE_KEY] = (
            test_l3_agent.get_ha_interface(ip='169.254.192.2',
                                           mac='22:22:22:22:22:22'))

        router2 = self.manage_router(self.failover_agent, router_info_2)

        helpers.wait_until_true(lambda: router1.ha_state == 'master')
        helpers.wait_until_true(lambda: router2.ha_state == 'backup')

        device_name = router1.get_ha_device_name(
            router1.router[l3_constants.HA_INTERFACE_KEY]['id'])
        ha_device = ip_lib.IPDevice(device_name, namespace=router1.ns_name)
        ha_device.link.set_down()

        helpers.wait_until_true(lambda: router2.ha_state == 'master')
        helpers.wait_until_true(lambda: router1.ha_state == 'fault')
Example #6
0
    def test_ha_router_failover(self):
        router_info = self.generate_router_info(enable_ha=True)
        router1 = self.manage_router(self.agent, router_info)

        router_info_2 = copy.deepcopy(router_info)
        router_info_2[l3_constants.HA_INTERFACE_KEY] = (
            test_l3_agent.get_ha_interface(ip='169.254.0.3',
                                           mac='22:22:22:22:22:22'))

        router2 = self.manage_router(self.failover_agent, router_info_2)

        helpers.wait_until_true(lambda: router1.ha_state == 'master')
        helpers.wait_until_true(lambda: router2.ha_state == 'backup')

        device_name = self.agent.get_ha_device_name(
            router1.router[l3_constants.HA_INTERFACE_KEY]['id'])
        ha_device = ip_lib.IPDevice(device_name, self.root_helper,
                                    router1.ns_name)
        ha_device.link.set_down()

        helpers.wait_until_true(lambda: router2.ha_state == 'master')
        helpers.wait_until_true(lambda: router1.ha_state == 'fault')