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
This commit is contained in:
Graham Hayes 2016-07-22 20:55:44 +01:00
parent ab1b3f9bed
commit 625fdb423e
2 changed files with 19 additions and 1 deletions

View File

@ -76,7 +76,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
dns_name, is_dns_domain_default = self._get_request_dns_name(
request_data)

View File

@ -478,6 +478,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_for_test(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.plugin.create_port(self.context, port_request)
def test_dns_driver_loaded_after_server_restart(self, *mocks):
dns_integration.DNS_DRIVER = None
net, port, dns_data_db = self._create_port_for_test()