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:
akhiljain23 2018-10-18 12:37:15 +05:30
parent df0f555f31
commit 7767c271a5
4 changed files with 69 additions and 2 deletions

View File

@ -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,

View File

@ -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 = (

View File

@ -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)

View File

@ -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.