Merge "subnet host route support"
This commit is contained in:
commit
6e5663600c
@ -1273,6 +1273,31 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
||||
self.metadata_proxy_handler and
|
||||
cfg.CONF.nsxv.dhcp_force_metadata)
|
||||
|
||||
def _validate_host_routes_input(self, subnet_input,
|
||||
orig_enable_dhcp=None,
|
||||
orig_host_routes=None):
|
||||
s = subnet_input['subnet']
|
||||
request_host_routes = (attr.is_attr_set(s.get('host_routes')) and
|
||||
s['host_routes'])
|
||||
clear_host_routes = (attr.is_attr_set(s.get('host_routes')) and
|
||||
not s['host_routes'])
|
||||
request_enable_dhcp = s.get('enable_dhcp')
|
||||
if request_enable_dhcp is False:
|
||||
if (request_host_routes or
|
||||
not clear_host_routes and orig_host_routes):
|
||||
err_msg = _("Can't disable DHCP while using host routes")
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
|
||||
if request_host_routes:
|
||||
if not request_enable_dhcp and orig_enable_dhcp is False:
|
||||
err_msg = _("Host routes can only be supported when DHCP "
|
||||
"is enabled")
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
if not self.edge_manager.is_dhcp_opt_enabled:
|
||||
err_msg = _("Host routes can only be supported at NSX version "
|
||||
"6.2.3 or higher")
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
|
||||
def create_subnet(self, context, subnet):
|
||||
"""Create subnet on nsx_v provider network.
|
||||
|
||||
@ -1280,9 +1305,7 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
||||
the subnet is attached is not bound to an DHCP Edge, nsx_v will
|
||||
create the Edge and make sure the network is bound to the Edge
|
||||
"""
|
||||
if subnet['subnet']['host_routes'] != attr.ATTR_NOT_SPECIFIED:
|
||||
err_msg = _("Host routes not supported by plugin")
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
self._validate_host_routes_input(subnet)
|
||||
if subnet['subnet']['enable_dhcp']:
|
||||
filters = {'id': [subnet['subnet']['network_id']],
|
||||
'router:external': [True]}
|
||||
@ -1351,17 +1374,19 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
||||
|
||||
def update_subnet(self, context, id, subnet):
|
||||
s = subnet['subnet']
|
||||
if "host_routes" in s and s["host_routes"]:
|
||||
err_msg = _("Host routes not supported by plugin")
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
orig = self._get_subnet(context, id)
|
||||
gateway_ip = orig['gateway_ip']
|
||||
enable_dhcp = orig['enable_dhcp']
|
||||
orig_host_routes = orig['routes']
|
||||
self._validate_host_routes_input(subnet,
|
||||
orig_enable_dhcp=enable_dhcp,
|
||||
orig_host_routes=orig_host_routes)
|
||||
subnet = super(NsxVPluginV2, self).update_subnet(context, id, subnet)
|
||||
update_dns_search_domain = self._process_subnet_ext_attr_update(
|
||||
context.session, subnet, s)
|
||||
if (gateway_ip != subnet['gateway_ip'] or update_dns_search_domain or
|
||||
set(orig['dns_nameservers']) != set(subnet['dns_nameservers']) or
|
||||
orig_host_routes != subnet['host_routes'] or
|
||||
enable_dhcp and not subnet['enable_dhcp']):
|
||||
# Need to ensure that all of the subnet attributes will be reloaded
|
||||
# when creating the edge bindings. Without adding this the original
|
||||
|
@ -741,6 +741,11 @@ class EdgeManager(object):
|
||||
static_config['domainName'] = sub_binding.dns_search_domain
|
||||
self.handle_meta_static_route(
|
||||
context, subnet_id, [static_config])
|
||||
for host_route in subnet['routes']:
|
||||
self.add_host_route_on_static_bindings(
|
||||
[static_config],
|
||||
host_route['destination'],
|
||||
host_route['nexthop'])
|
||||
|
||||
static_bindings.append(static_config)
|
||||
return static_bindings
|
||||
|
@ -122,6 +122,7 @@ class NsxVPluginV2TestCase(test_plugin.NeutronDbPluginV2TestCase):
|
||||
plugin_instance = manager.NeutronManager.get_plugin()
|
||||
plugin_instance._get_edge_id_by_rtr_id = mock.Mock()
|
||||
plugin_instance._get_edge_id_by_rtr_id.return_value = False
|
||||
plugin_instance.edge_manager.is_dhcp_opt_enabled = True
|
||||
|
||||
def test_get_vlan_network_name(self):
|
||||
p = manager.NeutronManager.get_plugin()
|
||||
@ -1264,27 +1265,6 @@ class TestSubnetsV2(NsxVPluginV2TestCase,
|
||||
kwargs.update({'override': overrides})
|
||||
return self._create_bulk(fmt, number, 'subnet', base_data, **kwargs)
|
||||
|
||||
def test_create_subnet_with_two_host_routes(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_delete_subnet_with_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_adding_additional_host_routes_and_dns(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_delete_subnet_with_dns_and_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_route_to_None(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_create_subnet_with_one_host_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_create_subnet_nonzero_cidr(self):
|
||||
awkward_cidrs = [{'nonezero': '10.129.122.5/8',
|
||||
'corrected': '10.0.0.0/8'},
|
||||
@ -1459,12 +1439,6 @@ class TestSubnetPoolsV2(NsxVPluginV2TestCase, test_plugin.TestSubnetsV2):
|
||||
def test_create_subnet_only_ip_version_v6(self):
|
||||
self.skipTest('Not supported')
|
||||
|
||||
def test_create_subnet_with_one_host_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_create_subnet_with_two_host_routes(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_create_subnet_with_v6_allocation_pool(self):
|
||||
self.skipTest('Not supported')
|
||||
|
||||
@ -1477,15 +1451,6 @@ class TestSubnetPoolsV2(NsxVPluginV2TestCase, test_plugin.TestSubnetsV2):
|
||||
def test_delete_subnet_ipv6_slaac_router_port_exists(self):
|
||||
self.skipTest('Not supported')
|
||||
|
||||
def test_delete_subnet_with_dns_and_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_delete_subnet_with_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_adding_additional_host_routes_and_dns(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_inconsistent_ipv6_gatewayv4(self):
|
||||
self.skipTest('Not supported')
|
||||
|
||||
@ -1507,12 +1472,6 @@ class TestSubnetPoolsV2(NsxVPluginV2TestCase, test_plugin.TestSubnetsV2):
|
||||
def test_update_subnet_ipv6_ra_mode_fails(self):
|
||||
self.skipTest('Not supported')
|
||||
|
||||
def test_update_subnet_route(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_update_subnet_route_to_None(self):
|
||||
self.skipTest("Skip test for not implemented host_routes feature")
|
||||
|
||||
def test_create_subnet_only_ip_version_v6_old(self):
|
||||
self.skipTest('Currently not supported')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user