Add servers.addresses table in nova driver
This commit will add servers.addresses table that will contain fields: server_id, network_name, address, version, mac_address and address_type of servers. Which will inturn help in mapping with Tacker VNF instances via IP address of instances. Change-Id: I22dfcaed1ac7a1da41636a49585ef30e0eaabba7 Partially-Implements: blueprint add-tacker-datasource-driver
This commit is contained in:
parent
df0f555f31
commit
7767c271a5
|
@ -15,6 +15,11 @@
|
|||
|
||||
"""Schema change history
|
||||
|
||||
date: 2018-10-18
|
||||
changes:
|
||||
|
||||
- Added the `servers.addresses` table for server address information.
|
||||
|
||||
date: 2018-03-15
|
||||
changes:
|
||||
|
||||
|
@ -53,6 +58,7 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
HYPERVISORS = "hypervisors"
|
||||
SERVICES = 'services'
|
||||
AVAILABILITY_ZONES = "availability_zones"
|
||||
ADDRESSES = SERVERS + ".addresses"
|
||||
TAGS = "tags"
|
||||
|
||||
value_trans_str = ds_utils.typed_value_trans(data_types.Str)
|
||||
|
@ -67,6 +73,14 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
except Exception:
|
||||
return str(x)
|
||||
|
||||
def extract_addresses(addresses):
|
||||
addresses_list = []
|
||||
for network_name, net_detail in addresses.items():
|
||||
for address in net_detail:
|
||||
address['network_name'] = network_name
|
||||
addresses_list.append(address)
|
||||
return addresses_list
|
||||
|
||||
servers_translator = {
|
||||
'translation-type': 'HDICT',
|
||||
'table-name': SERVERS,
|
||||
|
@ -100,6 +114,37 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
'desc': ('The hostname of hypervisor where the server is '
|
||||
'running'),
|
||||
'col': 'host_name', 'translator': value_trans_str},
|
||||
{'fieldname': 'addresses',
|
||||
'translator': {'translation-type': 'HDICT',
|
||||
'table-name': ADDRESSES,
|
||||
'parent-key': 'id',
|
||||
'parent-col-name': 'server_id',
|
||||
'parent-key-desc': 'UUID of server',
|
||||
'objects-extract-fn': extract_addresses,
|
||||
'selector-type': 'DICT_SELECTOR',
|
||||
'in-list': True,
|
||||
'field-translators':
|
||||
({'fieldname': 'network_name',
|
||||
'desc': ('Name of attached network to '
|
||||
'server'),
|
||||
'translator': value_trans_str},
|
||||
{'fieldname': 'addr',
|
||||
'desc': 'IP address of the server',
|
||||
'col': 'address',
|
||||
'translator': value_trans_str},
|
||||
{'fieldname': 'version',
|
||||
'desc': ('Internet Protocol Version of '
|
||||
'network'),
|
||||
'translator': value_trans_int},
|
||||
{'fieldname': 'OS-EXT-IPS-MAC:mac_addr',
|
||||
'desc': ('MAC address associated to the '
|
||||
'IP of the server'),
|
||||
'col': 'mac_address',
|
||||
'translator': value_trans_str},
|
||||
{'fieldname': 'OS-EXT-IPS:type',
|
||||
'desc': 'IP address type',
|
||||
'col': 'address_type',
|
||||
'translator': value_trans_str})}},
|
||||
{'fieldname': 'tags',
|
||||
'translator': {'translation-type': 'LIST',
|
||||
'table-name': TAGS,
|
||||
|
|
|
@ -110,7 +110,8 @@ class NovaFakeClient(mock.MagicMock):
|
|||
self.availability_zones.list.return_value = self.get_zone_list()
|
||||
|
||||
def get_mock_server(self, id, name, host_id, status, tenant_id, user_id,
|
||||
flavor, image, zone=None, host_name=None, tags=None):
|
||||
flavor, image, zone=None, host_name=None,
|
||||
addresses=None, tags=None):
|
||||
server = mock.MagicMock()
|
||||
server.id = id
|
||||
server.hostId = host_id
|
||||
|
@ -120,6 +121,7 @@ class NovaFakeClient(mock.MagicMock):
|
|||
server.name = name
|
||||
server.image = image
|
||||
server.flavor = flavor
|
||||
server.addresses = addresses if addresses else {}
|
||||
server.tags = tags if tags else []
|
||||
if zone is not None:
|
||||
setattr(server, 'OS-EXT-AZ:availability_zone', zone)
|
||||
|
@ -141,7 +143,12 @@ class NovaFakeClient(mock.MagicMock):
|
|||
'BUILD',
|
||||
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
||||
'33ea0494-2bdf-4382-a445-9068997430b9',
|
||||
{"id": "1"}, {"id": "2"}, 'default', 'host1'))
|
||||
{"id": "1"}, {"id": "2"}, 'default', 'host1',
|
||||
{'net_mgmt': [{
|
||||
'addr': '192.168.0.60',
|
||||
'version': 4,
|
||||
'OS-EXT-IPS-MAC:mac_addr': '11:11:11:11',
|
||||
'OS-EXT-IPS:type': 'fixed'}]}))
|
||||
|
||||
server_two = (
|
||||
self.get_mock_server('5678', 'sample-server2',
|
||||
|
@ -150,6 +157,7 @@ class NovaFakeClient(mock.MagicMock):
|
|||
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
||||
'33ea0494-2bdf-4382-a445-9068997430b9',
|
||||
{"id": "1"}, {"id": "2"},
|
||||
addresses={'net1': []},
|
||||
tags=['tag1', 'tag2']))
|
||||
|
||||
server_three = (
|
||||
|
|
|
@ -113,6 +113,12 @@ class TestNovaDriver(base.TestCase):
|
|||
self.assertIn(('9012', 'tag2'), server_tag_tuples)
|
||||
self.assertIn(('9012', 'tag3'), server_tag_tuples)
|
||||
|
||||
server_addresses_tuples = self.driver.state[self.driver.ADDRESSES]
|
||||
self.assertEqual(len(server_addresses_tuples), 1)
|
||||
self.assertIn(('1234', 'net_mgmt', '192.168.0.60', 4, '11:11:11:11',
|
||||
'fixed'),
|
||||
server_addresses_tuples)
|
||||
|
||||
def test_flavors(self):
|
||||
flavor_raw = self.nova.flavors.list(detailed=True)
|
||||
self.driver._translate_flavors(flavor_raw)
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
prelude: >
|
||||
features:
|
||||
- |
|
||||
The new table servers.addresses will be available under
|
||||
Congress driver for Nova. Which will consist of fields namely,
|
||||
server_id, network_name, address, version, mac_address and
|
||||
address_type.
|
Loading…
Reference in New Issue