57bc6d167b
As described in [0] a new attribute ``dns_publish_fixed_ip`` is added to subnets, allowing to specify directly whether DNS records should be published for this subnet. This overrides the previous behaviour that makes this decision based on various properties of the network that the subnet is contained in, see [1]. [0] https://launchpad.net/bugs/1784879 [1] https://docs.openstack.org/neutron/latest/admin/config-dns-int-ext-serv.html Change-Id: I14605ead2694d9e9422b3d7b519aed2e3c340e2a Partial-Bug: 1784879
106 lines
4.0 KiB
Python
106 lines
4.0 KiB
Python
# 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.definitions import dns as dns_apidef
|
|
from neutron_lib.api.definitions import l3 as l3_apidef
|
|
from neutron_lib.api.definitions import subnet_dns_publish_fixed_ip as api_def
|
|
from neutron_lib import constants
|
|
from oslo_config import cfg
|
|
|
|
from neutron.db import db_base_plugin_v2
|
|
from neutron.extensions import subnet_dns_publish_fixed_ip
|
|
from neutron.tests.unit.plugins.ml2 import test_plugin
|
|
|
|
|
|
class SubnetDNSPublishFixedIPExtensionManager(object):
|
|
|
|
def get_resources(self):
|
|
return []
|
|
|
|
def get_actions(self):
|
|
return []
|
|
|
|
def get_request_extensions(self):
|
|
return []
|
|
|
|
def get_extended_resources(self, version):
|
|
extension = subnet_dns_publish_fixed_ip.Subnet_dns_publish_fixed_ip()
|
|
return extension.get_extended_resources(version)
|
|
|
|
|
|
class SubnetDNSPublishFixedIPExtensionTestPlugin(
|
|
db_base_plugin_v2.NeutronDbPluginV2):
|
|
"""Test plugin to mixin the subnet_dns_publish_fixed_ip extension.
|
|
"""
|
|
|
|
supported_extension_aliases = [api_def.ALIAS,
|
|
dns_apidef.ALIAS,
|
|
l3_apidef.ALIAS]
|
|
|
|
|
|
class SubnetDNSPublishFixedIPExtensionTestCase(
|
|
test_plugin.Ml2PluginV2TestCase):
|
|
"""Test API extension subnet_dns_publish_fixed_ip attributes.
|
|
"""
|
|
|
|
_extension_drivers = ['subnet_dns_publish_fixed_ip']
|
|
|
|
def setUp(self):
|
|
cfg.CONF.set_override('extension_drivers',
|
|
self._extension_drivers,
|
|
group='ml2')
|
|
super(SubnetDNSPublishFixedIPExtensionTestCase,
|
|
self).setUp()
|
|
|
|
def _create_subnet(
|
|
self, network, ip_version=constants.IP_VERSION_4, cidr=None,
|
|
**kwargs):
|
|
|
|
cidr = cidr or '192.0.2.0/24'
|
|
network_id = network['network']['id']
|
|
tenant_id = network['network']['tenant_id']
|
|
data = {'subnet': {
|
|
'network_id': network_id,
|
|
'ip_version': str(ip_version),
|
|
'tenant_id': tenant_id,
|
|
'cidr': cidr}}
|
|
data['subnet'].update(kwargs)
|
|
subnet_req = self.new_create_request('subnets', data)
|
|
res = subnet_req.get_response(self.api)
|
|
|
|
return self.deserialize(self.fmt, res)['subnet']
|
|
|
|
def test_create_subnet_default(self):
|
|
with self.network() as network:
|
|
subnet = self._create_subnet(network)
|
|
self.assertIn('dns_publish_fixed_ip', subnet)
|
|
self.assertFalse(subnet['dns_publish_fixed_ip'])
|
|
data = {'subnet': {'dns_publish_fixed_ip': 'true'}}
|
|
req = self.new_update_request('subnets', data,
|
|
subnet['id'])
|
|
res = self.deserialize(self.fmt,
|
|
req.get_response(self.api))
|
|
self.assertTrue(res['subnet']['dns_publish_fixed_ip'])
|
|
|
|
data = {'subnet': {'dns_publish_fixed_ip': 'false'}}
|
|
req = self.new_update_request('subnets', data,
|
|
subnet['id'])
|
|
res = self.deserialize(self.fmt,
|
|
req.get_response(self.api))
|
|
self.assertFalse(res['subnet']['dns_publish_fixed_ip'])
|
|
|
|
def test_create_subnet_with_arg(self):
|
|
with self.network() as network:
|
|
subnet = self._create_subnet(network, dns_publish_fixed_ip=True)
|
|
self.assertIn('dns_publish_fixed_ip', subnet)
|
|
self.assertTrue(subnet['dns_publish_fixed_ip'])
|