Get overcloud domain name from ctlplane

The ctlplane networks dns_domain is 'ctlplane.' + overcloud_domain_name
from undercloud.conf. Since overcloud_domain_name should match THT parameter
CloudDomain we can use this to resolve the proper domain name in case
the user did'nt provide a name in network data input.

Change-Id: Ia64d68f0f629f0dc708c3dd59c305425627be7be
This commit is contained in:
Harald Jensås 2020-10-15 10:39:35 +02:00
parent 3ffc7e85a8
commit 2ea8258dfb
2 changed files with 49 additions and 5 deletions

View File

@ -62,6 +62,11 @@ RETURN = '''
EXAMPLES = '''
- name: Create composable networks
default_network:
description:
- Default control plane network
type: string
default: ctlplane
tripleo_composable_network:
net_data:
name: Storage
@ -93,6 +98,7 @@ EXAMPLES = '''
vlan: 21
'''
DEFAULT_NETWORK = 'ctlplane'
DEFAULT_ADMIN_STATE = False
DEFAULT_SHARED = False
DEFAULT_DOMAIN = 'localdomain.'
@ -101,6 +107,14 @@ DEFAULT_MTU = 1500
DEFAULT_VLAN_ID = 1
def get_overcloud_domain_name(conn, default_network):
network = conn.network.find_network(default_network)
if network is not None and network.dns_domain:
return network.dns_domain.partition('.')[-1]
else:
return DEFAULT_DOMAIN
def build_network_tag_field(net_data):
tags = []
service_net_map_replace = net_data.get('service_net_map_replace')
@ -123,12 +137,13 @@ def build_subnet_tag_field(subnet_data):
return tags
def create_net_spec(net_data):
def create_net_spec(net_data, overcloud_domain_name):
name_lower = net_data.get('name_lower', net_data['name'].lower())
net_spec = {
'admin_state_up': net_data.get('admin_state_up', DEFAULT_ADMIN_STATE),
'dns_domain': net_data.get(
'dns_domain', '.'.join([net_data['name'].lower(), DEFAULT_DOMAIN])
'dns_domain', '.'.join([net_data['name'].lower(),
overcloud_domain_name])
),
'mtu': net_data.get('mtu', DEFAULT_MTU),
'name': net_data['name'],
@ -401,6 +416,7 @@ def run_module():
**openstack_module_kwargs()
)
default_network = module.params.get('default_network', DEFAULT_NETWORK)
net_data = module.params['net_data']
error_messages = network_data_v2.validate_json_schema(net_data)
if error_messages:
@ -410,7 +426,8 @@ def run_module():
_, conn = openstack_cloud_from_module(module)
# Create or update the network
net_spec = create_net_spec(net_data)
net_spec = create_net_spec(
net_data, get_overcloud_domain_name(conn, default_network))
changed, network = create_or_update_network(conn, module, net_spec)
result['changed'] = changed if changed else result['changed']

View File

@ -52,9 +52,10 @@ class TestTripleoComposableNetwork(tests_base.TestCase):
def test_create_net_spec(self):
net_data = {'name': 'NetName'}
overcloud_domain_name = 'example.com.'
expected = {
'admin_state_up': plugin.DEFAULT_ADMIN_STATE,
'dns_domain': '.'.join(['netname', plugin.DEFAULT_DOMAIN]),
'dns_domain': '.'.join(['netname', overcloud_domain_name]),
'mtu': plugin.DEFAULT_MTU,
'name': 'NetName',
'shared': plugin.DEFAULT_SHARED,
@ -62,7 +63,8 @@ class TestTripleoComposableNetwork(tests_base.TestCase):
'provider:network_type': plugin.DEFAULT_NETWORK_TYPE,
'tags': [],
}
result = plugin.create_net_spec(net_data)
result = plugin.create_net_spec(net_data, overcloud_domain_name)
self.assertEqual(expected, result)
def test_validate_network_update(self):
@ -594,3 +596,28 @@ class TestTripleoComposableNetwork(tests_base.TestCase):
msg='Multiple segments with no name attribute exist on '
'network {}, unable to reliably adopt the implicit '
'segment.'.format(fake_network.id))
@mock.patch.object(openstack.connection, 'Connection', autospec=True)
def test_get_overcloud_domain_name(self, mock_conn):
mock_conn.network.find_network.return_value = stubs.FakeNeutronNetwork(
dns_domain='ctlplane.example.com.')
self.assertEqual(
'example.com.',
plugin.get_overcloud_domain_name(mock_conn, 'ctlplane'))
@mock.patch.object(openstack.connection, 'Connection', autospec=True)
def test_get_overcloud_domain_name_no_ctlplane_network(self, mock_conn):
mock_conn.network.find_network.return_value = None
self.assertEqual(
plugin.DEFAULT_DOMAIN,
plugin.get_overcloud_domain_name(mock_conn, 'ctlplane')
)
@mock.patch.object(openstack.connection, 'Connection', autospec=True)
def test_get_overcloud_domain_name_no_ctlplane_dns_domain(self, mock_conn):
mock_conn.network.find_network.return_value = stubs.FakeNeutronNetwork(
dns_domain='')
self.assertEqual(
plugin.DEFAULT_DOMAIN,
plugin.get_overcloud_domain_name(mock_conn, 'ctlplane')
)