From fd126a37c09bc3398bf4c3011e745ae7ec01d50a Mon Sep 17 00:00:00 2001 From: Slawek Kaplonski Date: Fri, 29 Jun 2018 10:42:48 +0200 Subject: [PATCH] [Fullstack] Remove central_external_bridge It is not necessary to use 2 "central" bridges, one for "data" and one for "external" network simulation. Also using 2 bridge will cause problems when "external_network_bridge" option will be removed from L3 agent and it will use integration bridge as it should be done. Change-Id: I68ee51cbc148b2bfce0cba8de7cf9fe08df54c96 --- .../images/fullstack_multinode_simulation.png | Bin 31360 -> 41632 bytes .../tests/fullstack/resources/environment.py | 35 +++++++----------- neutron/tests/fullstack/test_l3_agent.py | 8 ++-- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/doc/source/contributor/testing/images/fullstack_multinode_simulation.png b/doc/source/contributor/testing/images/fullstack_multinode_simulation.png index 9736944b7faee5805635ccf00110544f2c0fff7f..20b6b15f74444842a1d213554fa7fdf6763485d9 100644 GIT binary patch literal 41632 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 literal 31360 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 diff --git a/neutron/tests/fullstack/resources/environment.py b/neutron/tests/fullstack/resources/environment.py index 3f58dc92f66..02379c58685 100644 --- a/neutron/tests/fullstack/resources/environment.py +++ b/neutron/tests/fullstack/resources/environment.py @@ -90,15 +90,13 @@ class Host(fixtures.Fixture): and disconnects the host from other hosts. """ - def __init__(self, env_desc, host_desc, - test_name, neutron_config, - central_data_bridge, central_external_bridge): + def __init__(self, env_desc, host_desc, test_name, + neutron_config, central_bridge): self.env_desc = env_desc self.host_desc = host_desc self.test_name = test_name self.neutron_config = neutron_config - self.central_data_bridge = central_data_bridge - self.central_external_bridge = central_external_bridge + self.central_bridge = central_bridge self.host_namespace = None self.agents = {} # we need to cache already created "per network" bridges if linuxbridge @@ -139,12 +137,12 @@ class Host(fixtures.Fixture): self.useFixture( net_helpers.OVSBridgeFixture( agent_cfg_fixture.get_br_tun_name())).bridge - self.connect_to_internal_network_via_tunneling() + self.connect_to_central_network_via_tunneling() else: self.br_phys = self.useFixture( net_helpers.OVSBridgeFixture( agent_cfg_fixture.get_br_phys_name())).bridge - self.connect_to_internal_network_via_vlans(self.br_phys) + self.connect_to_central_network_via_vlans(self.br_phys) self.ovs_agent = self.useFixture( process.OVSAgentFixture( @@ -160,7 +158,7 @@ class Host(fixtures.Fixture): br_ex = self.useFixture( net_helpers.OVSBridgeFixture( self.l3_agent_cfg_fixture.get_external_bridge())).bridge - self.connect_to_external_network(br_ex) + self.connect_to_central_network_via_vlans(br_ex) if self.host_desc.dhcp_agent: self.dhcp_agent_cfg_fixture = self.useFixture( @@ -209,7 +207,7 @@ class Host(fixtures.Fixture): def _connect_ovs_port(self, cidr_address): ovs_device = self.useFixture( net_helpers.OVSPortFixture( - bridge=self.central_data_bridge, + bridge=self.central_bridge, namespace=self.host_namespace)).port # NOTE: This sets an IP address on the host's root namespace # which is cleaned up when the device is deleted. @@ -222,7 +220,7 @@ class Host(fixtures.Fixture): ) self.host_port.link.set_up() - def connect_to_internal_network_via_tunneling(self): + def connect_to_central_network_via_tunneling(self): veth_1, veth_2 = self.useFixture( net_helpers.VethFixture()).ports @@ -233,15 +231,11 @@ class Host(fixtures.Fixture): veth_1.link.set_up() veth_2.link.set_up() - def connect_to_internal_network_via_vlans(self, host_data_bridge): + def connect_to_central_network_via_vlans(self, host_data_bridge): # If using VLANs as a segmentation device, it's needed to connect # a provider bridge to a centralized, shared bridge. net_helpers.create_patch_ports( - self.central_data_bridge, host_data_bridge) - - def connect_to_external_network(self, host_external_bridge): - net_helpers.create_patch_ports( - self.central_external_bridge, host_external_bridge) + self.central_bridge, host_data_bridge) def allocate_local_ip(self): if not self.env_desc.network_range: @@ -359,17 +353,14 @@ class Environment(fixtures.Fixture): host_desc, self.test_name, neutron_config, - self.central_data_bridge, - self.central_external_bridge)) + self.central_bridge)) def _setUp(self): self.temp_dir = self.useFixture(fixtures.TempDir()).path # we need this bridge before rabbit and neutron service will start - self.central_data_bridge = self.useFixture( + self.central_bridge = self.useFixture( net_helpers.OVSBridgeFixture('cnt-data')).bridge - self.central_external_bridge = self.useFixture( - net_helpers.OVSBridgeFixture('cnt-ex')).bridge # Get rabbitmq address (and cnt-data network) rabbitmq_ip_address = self._configure_port_for_rabbitmq() @@ -399,7 +390,7 @@ class Environment(fixtures.Fixture): if not self.env_desc.network_range: return "127.0.0.1" rabbitmq_ip = str(self.env_desc.network_range[1]) - rabbitmq_port = ip_lib.IPDevice(self.central_data_bridge.br_name) + rabbitmq_port = ip_lib.IPDevice(self.central_bridge.br_name) rabbitmq_port.addr.add(common_utils.ip_to_cidr(rabbitmq_ip, 24)) rabbitmq_port.link.set_up() diff --git a/neutron/tests/fullstack/test_l3_agent.py b/neutron/tests/fullstack/test_l3_agent.py index 7ad69deb7f5..e7de5bff6de 100644 --- a/neutron/tests/fullstack/test_l3_agent.py +++ b/neutron/tests/fullstack/test_l3_agent.py @@ -156,7 +156,7 @@ class TestLegacyL3Agent(TestL3Agent): def test_north_south_traffic(self): # This function creates an external network which is connected to - # central_external_bridge and spawns an external_vm on it. + # central_bridge and spawns an external_vm on it. # The external_vm is configured with the gateway_ip (both v4 & v6 # addresses) of external subnet. Later, it creates a tenant router, # a tenant network and two tenant subnets (v4 and v6). The tenant @@ -170,7 +170,7 @@ class TestLegacyL3Agent(TestL3Agent): ext_net, ext_sub = self._create_external_network_and_subnet(tenant_id) external_vm = self.useFixture( machine_fixtures.FakeMachine( - self.environment.central_external_bridge, + self.environment.central_bridge, common_utils.ip_to_cidr(ext_sub['gateway_ip'], 24))) # Create an IPv6 subnet in the external network v6network = self.useFixture( @@ -214,7 +214,7 @@ class TestLegacyL3Agent(TestL3Agent): br_phys = self.environment.hosts[0].br_phys br_phys.destroy() br_phys.create() - self.environment.hosts[0].connect_to_internal_network_via_vlans( + self.environment.hosts[0].connect_to_central_network_via_vlans( br_phys) # ping floating ip from external vm @@ -332,7 +332,7 @@ class TestHAL3Agent(TestL3Agent): external_vm = self.useFixture( machine_fixtures.FakeMachine( - self.environment.central_external_bridge, + self.environment.central_bridge, common_utils.ip_to_cidr(ext_sub['gateway_ip'], 24))) common_utils.wait_until_true(