Merge "Add dns_domain attribute to ports in the API"

This commit is contained in:
Jenkins 2017-07-21 00:00:15 +00:00 committed by Gerrit Code Review
commit 8c0bc37325
5 changed files with 96 additions and 3 deletions

View File

@ -103,8 +103,11 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
@property
def _is_dns_integration_supported(self):
if self._dns_integration is None:
self._dns_integration = utils.is_extension_supported(
self._core_plugin, 'dns-integration')
self._dns_integration = (
utils.is_extension_supported(self._core_plugin,
'dns-integration') or
utils.is_extension_supported(self._core_plugin,
'dns-domain-ports'))
return self._dns_integration
@property

View File

@ -0,0 +1,60 @@
# Copyright (c) 2017 IBM
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api import converters
from neutron_lib.api import extensions
from neutron.extensions import dns
EXTENDED_ATTRIBUTES_2_0 = {
'ports': {
dns.DNSDOMAIN: {'allow_post': True, 'allow_put': True,
'default': '',
'convert_to':
converters.convert_string_to_case_insensitive,
'validate': {'type:dns_domain': dns.FQDN_MAX_LEN},
'is_visible': True},
},
}
class Dns_domain_ports(extensions.ExtensionDescriptor):
"""Extension class supporting dns_domain attribute for ports."""
@classmethod
def get_name(cls):
return "dns_domain for ports"
@classmethod
def get_alias(cls):
return "dns-domain-ports"
@classmethod
def get_description(cls):
return "Allows the DNS domain to be specified for a network port."
@classmethod
def get_updated(cls):
return "2017-06-25T18:00:00-00:00"
def get_required_extensions(self):
return ["dns-integration"]
def get_extended_resources(self, version):
if version == "2.0":
return EXTENDED_ATTRIBUTES_2_0
else:
return {}

View File

@ -320,6 +320,17 @@ class DNSExtensionDriverML2(DNSExtensionDriver):
return True
class DNSDomainPortsExtensionDriver(DNSExtensionDriverML2):
_supported_extension_alias = 'dns-domain-ports'
@property
def extension_alias(self):
return self._supported_extension_alias
def initialize(self):
LOG.info(_LI("DNSDomainPortsExtensionDriver initialization complete"))
DNS_DRIVER = None

View File

@ -62,7 +62,8 @@ class DNSIntegrationTestCase(test_plugin.Ml2PluginV2TestCase):
config.cfg.CONF.set_override('dns_domain', self._domain)
def _create_port_for_test(self, provider_net=True, dns_domain=True,
dns_name=True, ipv4=True, ipv6=True):
dns_name=True, ipv4=True, ipv6=True,
dns_domain_port=False):
net_kwargs = {}
if provider_net:
net_kwargs = {
@ -91,6 +92,10 @@ class DNSIntegrationTestCase(test_plugin.Ml2PluginV2TestCase):
'arg_list': (dns.DNSNAME,),
dns.DNSNAME: DNSNAME
}
if dns_domain_port:
port_kwargs[dns.DNSDOMAIN] = self._port_domain
port_kwargs['arg_list'] = (port_kwargs.get('arg_list', ()) +
(dns.DNSDOMAIN,))
res = self._create_port('json', network['network']['id'],
**port_kwargs)
self.assertEqual(201, res.status_int)
@ -528,6 +533,19 @@ class DNSIntegrationTestCaseDefaultDomain(DNSIntegrationTestCase):
self._verify_port_dns(net, port, dns_data_db)
@mock.patch(
'neutron.services.externaldns.drivers.designate.driver.get_clients',
**mock_config)
class DNSDomainPortsTestCase(DNSIntegrationTestCase):
_extension_drivers = ['dns_domain_ports']
_domain = 'domain.com.'
_port_domain = 'portdomain.com.'
def test_create_port(self, *mocks):
net, port, dns_data_db = self._create_port_for_test(
dns_domain_port=True)
class TestDesignateClientKeystoneV2(testtools.TestCase):
"""Test case for designate clients """

View File

@ -107,6 +107,7 @@ neutron.ml2.extension_drivers =
qos = neutron.plugins.ml2.extensions.qos:QosExtensionDriver
dns = neutron.plugins.ml2.extensions.dns_integration:DNSExtensionDriverML2
data_plane_status = neutron.plugins.ml2.extensions.data_plane_status:DataPlaneStatusExtensionDriver
dns_domain_ports = neutron.plugins.ml2.extensions.dns_integration:DNSDomainPortsExtensionDriver
neutron.ipam_drivers =
fake = neutron.tests.unit.ipam.fake_driver:FakeDriver
internal = neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool