Merge "NSX|V3: Fix update_subnet issue"
This commit is contained in:
commit
3583849f1f
@ -25,9 +25,9 @@ def build_dhcp_server_config(network, subnet, port, project_name):
|
|||||||
# Prepare the configutation for a new logical DHCP server.
|
# Prepare the configutation for a new logical DHCP server.
|
||||||
server_ip = "%s/%u" % (port['fixed_ips'][0]['ip_address'],
|
server_ip = "%s/%u" % (port['fixed_ips'][0]['ip_address'],
|
||||||
netaddr.IPNetwork(subnet['cidr']).prefixlen)
|
netaddr.IPNetwork(subnet['cidr']).prefixlen)
|
||||||
dns_servers = subnet['dns_nameservers']
|
dns_nameservers = subnet['dns_nameservers']
|
||||||
if not dns_servers or not validators.is_attr_set(dns_servers):
|
if not dns_nameservers or not validators.is_attr_set(dns_nameservers):
|
||||||
dns_servers = cfg.CONF.nsx_v3.nameservers
|
dns_nameservers = cfg.CONF.nsx_v3.nameservers
|
||||||
gateway_ip = subnet['gateway_ip']
|
gateway_ip = subnet['gateway_ip']
|
||||||
if not validators.is_attr_set(gateway_ip):
|
if not validators.is_attr_set(gateway_ip):
|
||||||
gateway_ip = None
|
gateway_ip = None
|
||||||
@ -58,7 +58,7 @@ def build_dhcp_server_config(network, subnet, port, project_name):
|
|||||||
return {'name': name,
|
return {'name': name,
|
||||||
'dhcp_profile_id': cfg.CONF.nsx_v3.dhcp_profile_uuid,
|
'dhcp_profile_id': cfg.CONF.nsx_v3.dhcp_profile_uuid,
|
||||||
'server_ip': server_ip,
|
'server_ip': server_ip,
|
||||||
'dns_servers': dns_servers,
|
'dns_nameservers': dns_nameservers,
|
||||||
'domain_name': cfg.CONF.nsx_v3.dns_domain,
|
'domain_name': cfg.CONF.nsx_v3.dns_domain,
|
||||||
'gateway_ip': gateway_ip,
|
'gateway_ip': gateway_ip,
|
||||||
'options': options,
|
'options': options,
|
||||||
|
@ -476,43 +476,46 @@ class LogicalDhcpServer(AbstractRESTResource):
|
|||||||
return 'dhcp/servers'
|
return 'dhcp/servers'
|
||||||
|
|
||||||
def _construct_server(self, body, dhcp_profile_id=None, server_ip=None,
|
def _construct_server(self, body, dhcp_profile_id=None, server_ip=None,
|
||||||
name=None, dns_servers=None, domain_name=None,
|
name=None, dns_nameservers=None, domain_name=None,
|
||||||
gateway_ip=None, options=None, tags=None):
|
gateway_ip=False, options=None, tags=None):
|
||||||
if name:
|
if name:
|
||||||
body['display_name'] = name
|
body['display_name'] = name
|
||||||
if dhcp_profile_id:
|
if dhcp_profile_id:
|
||||||
body['dhcp_profile_id'] = dhcp_profile_id
|
body['dhcp_profile_id'] = dhcp_profile_id
|
||||||
if server_ip:
|
if server_ip:
|
||||||
body['ipv4_dhcp_server']['dhcp_server_ip'] = server_ip
|
body['ipv4_dhcp_server']['dhcp_server_ip'] = server_ip
|
||||||
if dns_servers:
|
if dns_nameservers is not None:
|
||||||
body['ipv4_dhcp_server']['dns_nameservers'] = dns_servers
|
# Note that [] is valid for dns_nameservers, means deleting it.
|
||||||
|
body['ipv4_dhcp_server']['dns_nameservers'] = dns_nameservers
|
||||||
if domain_name:
|
if domain_name:
|
||||||
body['ipv4_dhcp_server']['domain_name'] = domain_name
|
body['ipv4_dhcp_server']['domain_name'] = domain_name
|
||||||
if gateway_ip:
|
if gateway_ip is not False:
|
||||||
|
# Note that None is valid for gateway_ip, means deleting it.
|
||||||
body['ipv4_dhcp_server']['gateway_ip'] = gateway_ip
|
body['ipv4_dhcp_server']['gateway_ip'] = gateway_ip
|
||||||
if options:
|
if options:
|
||||||
body['ipv4_dhcp_server']['options'] = options
|
body['ipv4_dhcp_server']['options'] = options
|
||||||
if tags:
|
if tags:
|
||||||
body['tags'] = tags
|
body['tags'] = tags
|
||||||
|
|
||||||
def create(self, dhcp_profile_id, server_ip, name=None, dns_servers=None,
|
def create(self, dhcp_profile_id, server_ip, name=None,
|
||||||
domain_name=None, gateway_ip=None, options=None, tags=None):
|
dns_nameservers=None, domain_name=None, gateway_ip=False,
|
||||||
|
options=None, tags=None):
|
||||||
body = {'ipv4_dhcp_server': {}}
|
body = {'ipv4_dhcp_server': {}}
|
||||||
self._construct_server(body, dhcp_profile_id, server_ip, name,
|
self._construct_server(body, dhcp_profile_id, server_ip, name,
|
||||||
dns_servers, domain_name, gateway_ip, options,
|
dns_nameservers, domain_name, gateway_ip,
|
||||||
tags)
|
options, tags)
|
||||||
return self._client.create(body=body)
|
return self._client.create(body=body)
|
||||||
|
|
||||||
@utils.retry_upon_exception_nsxv3(
|
@utils.retry_upon_exception_nsxv3(
|
||||||
exceptions.StaleRevision,
|
exceptions.StaleRevision,
|
||||||
max_attempts=cfg.CONF.nsx_v3.retries)
|
max_attempts=cfg.CONF.nsx_v3.retries)
|
||||||
def update(self, uuid, dhcp_profile_id=None, server_ip=None, name=None,
|
def update(self, uuid, dhcp_profile_id=None, server_ip=None, name=None,
|
||||||
dns_servers=None, domain_name=None, gateway_ip=None,
|
dns_nameservers=None, domain_name=None, gateway_ip=False,
|
||||||
options=None, tags=None):
|
options=None, tags=None):
|
||||||
body = self._client.get(uuid)
|
body = self._client.get(uuid)
|
||||||
self._construct_server(body, dhcp_profile_id, server_ip, name,
|
self._construct_server(body, dhcp_profile_id, server_ip, name,
|
||||||
dns_servers, domain_name, gateway_ip, options,
|
dns_nameservers, domain_name, gateway_ip,
|
||||||
tags)
|
options, tags)
|
||||||
return self._client.update(uuid, body=body)
|
return self._client.update(uuid, body=body)
|
||||||
|
|
||||||
def create_binding(self, server_uuid, mac, ip, hostname=None,
|
def create_binding(self, server_uuid, mac, ip, hostname=None,
|
||||||
|
@ -1057,11 +1057,11 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
|
|
||||||
def update_subnet(self, context, subnet_id, subnet):
|
def update_subnet(self, context, subnet_id, subnet):
|
||||||
updated_subnet = None
|
updated_subnet = None
|
||||||
if (cfg.CONF.nsx_v3.native_dhcp_metadata and
|
if cfg.CONF.nsx_v3.native_dhcp_metadata:
|
||||||
'enable_dhcp' in subnet['subnet']):
|
|
||||||
orig_subnet = self.get_subnet(context, subnet_id)
|
orig_subnet = self.get_subnet(context, subnet_id)
|
||||||
enable_dhcp = subnet['subnet']['enable_dhcp']
|
enable_dhcp = subnet['subnet'].get('enable_dhcp')
|
||||||
if orig_subnet['enable_dhcp'] != enable_dhcp:
|
if (enable_dhcp is not None and
|
||||||
|
enable_dhcp != orig_subnet['enable_dhcp']):
|
||||||
lock = 'nsxv3_network_' + orig_subnet['network_id']
|
lock = 'nsxv3_network_' + orig_subnet['network_id']
|
||||||
with locking.LockManager.get_lock(lock):
|
with locking.LockManager.get_lock(lock):
|
||||||
network = self._get_network(
|
network = self._get_network(
|
||||||
@ -1092,14 +1092,12 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
# Check if needs to update logical DHCP server for native DHCP.
|
# Check if needs to update logical DHCP server for native DHCP.
|
||||||
if (cfg.CONF.nsx_v3.native_dhcp_metadata and
|
if (cfg.CONF.nsx_v3.native_dhcp_metadata and
|
||||||
updated_subnet['enable_dhcp']):
|
updated_subnet['enable_dhcp']):
|
||||||
dns_servers = subnet['subnet'].get('dns_nameservers')
|
|
||||||
gateway_ip = subnet['subnet'].get('gateway_ip')
|
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
if (dns_servers and
|
for key in ('dns_nameservers', 'gateway_ip'):
|
||||||
dns_servers != updated_subnet['dns_nameservers']):
|
if key in subnet['subnet']:
|
||||||
kwargs['dns_servers'] = dns_servers
|
value = subnet['subnet'][key]
|
||||||
if gateway_ip and gateway_ip != updated_subnet['gateway_ip']:
|
if value != orig_subnet[key]:
|
||||||
kwargs['gateway_ip'] = gateway_ip
|
kwargs[key] = value
|
||||||
if kwargs:
|
if kwargs:
|
||||||
dhcp_service = nsx_db.get_nsx_service_binding(
|
dhcp_service = nsx_db.get_nsx_service_binding(
|
||||||
context.session, orig_subnet['network_id'],
|
context.session, orig_subnet['network_id'],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user