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)
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))
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)
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)
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')
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')