Avoid KeyError when accessing "dns_name" as it may not exist

Neutron LBaaS does not pass a full copy of the request_data
into this function, and causes the port create to fail
with a KeyError

Change-Id: Ib81cbbaf24a4ffaa983e1b05146aea0dc74e29bb
Fixes-Bug: #1605336
(cherry picked from commit 625fdb423e)
This commit is contained in:
Graham Hayes 2016-07-22 20:55:44 +01:00 committed by Armando Migliaccio
parent 0a22fcfdaf
commit b0778fe801
2 changed files with 19 additions and 1 deletions

View File

@ -75,7 +75,7 @@ class DNSExtensionDriver(api.ExtensionDriver):
db_data[dns.DNSDOMAIN] = new_value
def process_create_port(self, plugin_context, request_data, db_data):
if not request_data[dns.DNSNAME]:
if not request_data.get(dns.DNSNAME):
return
network = self._get_network(plugin_context, db_data['network_id'])
if not network[dns.DNSDOMAIN]:

View File

@ -460,6 +460,24 @@ class DNSIntegrationTestCase(test_plugin.Ml2PluginV2TestCase):
self.assertFalse(
mock_admin_client.recordsets.delete.call_args_list)
def test_create_port_dns_name_field_missing(self, *mocks):
res = self._create_network(self.fmt, 'test_network', True)
net = self.deserialize(self.fmt, res)['network']
cidr = '10.0.0.0/24'
self._create_subnet(self.fmt, net['id'], cidr)
port_request = {
'port': {
'network_id': net['id'],
'tenant_id': net['tenant_id'],
'name': 'mugsie',
'admin_state_up': True,
'device_id': '',
'device_owner': '',
'fixed_ips': ''
}
}
self._create_port('json', net['id'], **port_request)
def test_dns_driver_loaded_after_server_restart(self, *mocks):
dns_integration.DNS_DRIVER = None
config.cfg.CONF.set_override('dns_domain', DNSDOMAIN)