Merge "Add network index support in network modules"
This commit is contained in:
commit
1dfcb9fdbb
|
@ -53,6 +53,10 @@ options:
|
|||
description:
|
||||
- Structure describing a TripleO composable network
|
||||
type: dict
|
||||
idx:
|
||||
description:
|
||||
- TripleO network index number
|
||||
type: int
|
||||
author:
|
||||
- Harald Jensås <hjensas@redhat.com>
|
||||
'''
|
||||
|
@ -96,6 +100,7 @@ EXAMPLES = '''
|
|||
nexthop: 172.18.1.254
|
||||
vip: false
|
||||
vlan: 21
|
||||
idx: 1
|
||||
'''
|
||||
|
||||
DEFAULT_NETWORK = 'ctlplane'
|
||||
|
@ -115,8 +120,9 @@ def get_overcloud_domain_name(conn, default_network):
|
|||
return DEFAULT_DOMAIN
|
||||
|
||||
|
||||
def build_network_tag_field(net_data):
|
||||
tags = ['='.join(['tripleo_network_name', net_data['name']])]
|
||||
def build_network_tag_field(net_data, idx):
|
||||
tags = ['='.join(['tripleo_network_name', net_data['name']]),
|
||||
'='.join(['tripleo_net_idx', str(idx)])]
|
||||
service_net_map_replace = net_data.get('service_net_map_replace')
|
||||
vip = net_data.get('vip')
|
||||
if service_net_map_replace:
|
||||
|
@ -137,7 +143,7 @@ def build_subnet_tag_field(subnet_data):
|
|||
return tags
|
||||
|
||||
|
||||
def create_net_spec(net_data, overcloud_domain_name):
|
||||
def create_net_spec(net_data, overcloud_domain_name, idx):
|
||||
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),
|
||||
|
@ -152,7 +158,7 @@ def create_net_spec(net_data, overcloud_domain_name):
|
|||
'provider:network_type': DEFAULT_NETWORK_TYPE,
|
||||
}
|
||||
|
||||
net_spec.update({'tags': build_network_tag_field(net_data)})
|
||||
net_spec.update({'tags': build_network_tag_field(net_data, idx)})
|
||||
|
||||
return net_spec
|
||||
|
||||
|
@ -418,6 +424,7 @@ def run_module():
|
|||
|
||||
default_network = module.params.get('default_network', DEFAULT_NETWORK)
|
||||
net_data = module.params['net_data']
|
||||
idx = module.params['idx']
|
||||
error_messages = network_data_v2.validate_json_schema(net_data)
|
||||
if error_messages:
|
||||
module.fail_json(msg='\n\n'.join(error_messages))
|
||||
|
@ -427,7 +434,7 @@ def run_module():
|
|||
|
||||
# Create or update the network
|
||||
net_spec = create_net_spec(
|
||||
net_data, get_overcloud_domain_name(conn, default_network))
|
||||
net_data, get_overcloud_domain_name(conn, default_network), idx)
|
||||
changed, network = create_or_update_network(conn, module, net_spec)
|
||||
result['changed'] = changed if changed else result['changed']
|
||||
|
||||
|
|
|
@ -160,6 +160,9 @@ def tripleo_resource_tags_to_dict(resource_tags):
|
|||
except ValueError:
|
||||
continue
|
||||
|
||||
if key == 'tripleo_net_idx':
|
||||
value = int(value)
|
||||
|
||||
tag_dict.update({key: value})
|
||||
|
||||
return tag_dict
|
||||
|
@ -211,7 +214,7 @@ def get_network_info(conn, network_id):
|
|||
|
||||
pop_defaults(net_dict)
|
||||
|
||||
return net_dict
|
||||
return tag_dict['tripleo_net_idx'], net_dict
|
||||
|
||||
|
||||
def get_subnet_info(conn, subnet_id):
|
||||
|
@ -284,21 +287,23 @@ def get_subnet_info(conn, subnet_id):
|
|||
|
||||
|
||||
def parse_net_resources(conn, net_resources):
|
||||
network_data = list()
|
||||
indexed_networks = dict()
|
||||
for net in net_resources:
|
||||
name = net.rpartition('Network')[0]
|
||||
net_entry = {'name': name, 'subnets': dict()}
|
||||
for res in net_resources[net]:
|
||||
res_dict = net_resources[net][res]
|
||||
if res_dict['resource_type'] == TYPE_NET:
|
||||
net_dict = get_network_info(conn, res_dict[RES_ID])
|
||||
idx, net_dict = get_network_info(conn, res_dict[RES_ID])
|
||||
net_entry.update(net_dict)
|
||||
if res_dict['resource_type'] == TYPE_SUBNET:
|
||||
subnet_name, subnet_dict = get_subnet_info(conn,
|
||||
res_dict[RES_ID])
|
||||
net_entry['subnets'].update({subnet_name: subnet_dict})
|
||||
|
||||
network_data.append(net_entry)
|
||||
indexed_networks[idx] = net_entry
|
||||
|
||||
network_data = [indexed_networks[i] for i in sorted(indexed_networks)]
|
||||
|
||||
return network_data
|
||||
|
||||
|
|
|
@ -49,10 +49,13 @@
|
|||
when:
|
||||
- network_data is undefined
|
||||
|
||||
- name: Create composable networks
|
||||
- name: Create/Update composable networks
|
||||
tripleo_composable_network:
|
||||
net_data: "{{ item }}"
|
||||
idx: "{{ idx }}"
|
||||
loop: "{{ network_data }}"
|
||||
loop_control:
|
||||
index_var: idx
|
||||
|
||||
- name: Populate environment
|
||||
tripleo_network_populate_environment:
|
||||
|
|
|
@ -25,18 +25,22 @@ from tripleo_ansible.tests import stubs
|
|||
class TestTripleoComposableNetwork(tests_base.TestCase):
|
||||
|
||||
def test_build_network_tag_field(self):
|
||||
idx = 3
|
||||
net_data = {'name': 'foo',
|
||||
'service_net_map_replace': 'replacement',
|
||||
'vip': True}
|
||||
expected = ['tripleo_network_name=foo',
|
||||
'tripleo_net_idx=3',
|
||||
'tripleo_service_net_map_replace=replacement',
|
||||
'tripleo_vip=true']
|
||||
result = plugin.build_network_tag_field(net_data)
|
||||
result = plugin.build_network_tag_field(net_data, idx)
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
idx = 1
|
||||
net_data = {'name': 'foo'}
|
||||
expected = ['tripleo_network_name=foo']
|
||||
result = plugin.build_network_tag_field(net_data)
|
||||
expected = ['tripleo_network_name=foo',
|
||||
'tripleo_net_idx=1']
|
||||
result = plugin.build_network_tag_field(net_data, idx)
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
def test_build_subnet_tag_field(self):
|
||||
|
@ -52,6 +56,7 @@ class TestTripleoComposableNetwork(tests_base.TestCase):
|
|||
self.assertEqual(expected, result)
|
||||
|
||||
def test_create_net_spec(self):
|
||||
idx = 3
|
||||
net_data = {'name': 'NetName'}
|
||||
overcloud_domain_name = 'example.com.'
|
||||
expected = {
|
||||
|
@ -62,10 +67,11 @@ class TestTripleoComposableNetwork(tests_base.TestCase):
|
|||
'shared': plugin.DEFAULT_SHARED,
|
||||
'provider:physical_network': 'netname',
|
||||
'provider:network_type': plugin.DEFAULT_NETWORK_TYPE,
|
||||
'tags': ['tripleo_network_name=NetName'],
|
||||
'tags': ['tripleo_network_name=NetName',
|
||||
'tripleo_net_idx=3'],
|
||||
}
|
||||
|
||||
result = plugin.create_net_spec(net_data, overcloud_domain_name)
|
||||
result = plugin.create_net_spec(net_data, overcloud_domain_name, idx)
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
def test_validate_network_update(self):
|
||||
|
|
|
@ -25,8 +25,10 @@ from tripleo_ansible.tests import stubs
|
|||
class TestTripleoOvercloudNetworkExtract(tests_base.TestCase):
|
||||
|
||||
def test_tripleo_resource_tags_to_dict(self):
|
||||
tags = ['foo=bar', 'baz=qux', 'tripleo_foo=bar', 'tripleo_baz=qux']
|
||||
expected = {'tripleo_foo': 'bar', 'tripleo_baz': 'qux'}
|
||||
tags = ['foo=bar', 'baz=qux', 'tripleo_foo=bar', 'tripleo_baz=qux',
|
||||
'tripleo_net_idx=3']
|
||||
expected = {'tripleo_foo': 'bar', 'tripleo_baz': 'qux',
|
||||
'tripleo_net_idx': 3}
|
||||
result = plugin.tripleo_resource_tags_to_dict(tags)
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
|
@ -69,14 +71,13 @@ class TestTripleoOvercloudNetworkExtract(tests_base.TestCase):
|
|||
mtu=1500,
|
||||
is_shared=False,
|
||||
is_admin_state_up=False,
|
||||
tags=['tripleo_service_net_map_replace=external']
|
||||
tags=['tripleo_net_idx=3',
|
||||
'tripleo_service_net_map_replace=external']
|
||||
)
|
||||
conn_mock.network.get_network.return_value = fake_network
|
||||
expected = {
|
||||
'name_lower': 'public',
|
||||
expected = (3, {'name_lower': 'public',
|
||||
'dns_domain': 'public.localdomain.',
|
||||
'service_net_map_replace': 'external',
|
||||
}
|
||||
'service_net_map_replace': 'external'})
|
||||
result = plugin.get_network_info(
|
||||
conn_mock, '132f871f-eaec-4fed-9475-0d54465e0f00')
|
||||
self.assertEqual(expected, result)
|
||||
|
@ -264,7 +265,7 @@ class TestTripleoOvercloudNetworkExtract(tests_base.TestCase):
|
|||
'physical_network': 'leaf1',
|
||||
}
|
||||
|
||||
mock_get_network.return_value = fake_network
|
||||
mock_get_network.return_value = (0, fake_network)
|
||||
mock_get_subnet.side_effect = [
|
||||
('storage', fake_subnet_storage),
|
||||
('leaf1', fake_subnet_storage_leaf1)]
|
||||
|
|
Loading…
Reference in New Issue