Add tags table to nova driver
Straight forward change, backward compatible change to support microsegmentation use case. Useful for many other use cases. Change-Id: Ie7ef9bf39ab9992c9c39c0740a2f28c119c64bfc
This commit is contained in:
parent
8bdf2e6fa1
commit
b7b1a82f67
|
@ -13,6 +13,17 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
"""Schema version history
|
||||||
|
|
||||||
|
version: 2.1
|
||||||
|
date: 2017-10-01
|
||||||
|
changes:
|
||||||
|
- Added the tags table for server tags information.
|
||||||
|
|
||||||
|
version: 2.0
|
||||||
|
Initial schema version.
|
||||||
|
"""
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
@ -35,6 +46,7 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
||||||
HOSTS = "hosts"
|
HOSTS = "hosts"
|
||||||
SERVICES = 'services'
|
SERVICES = 'services'
|
||||||
AVAILABILITY_ZONES = "availability_zones"
|
AVAILABILITY_ZONES = "availability_zones"
|
||||||
|
TAGS = "tags"
|
||||||
|
|
||||||
# This is the most common per-value translator, so define it once here.
|
# This is the most common per-value translator, so define it once here.
|
||||||
value_trans = {'translation-type': 'VALUE'}
|
value_trans = {'translation-type': 'VALUE'}
|
||||||
|
@ -79,7 +91,16 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
||||||
{'fieldname': 'OS-EXT-SRV-ATTR:hypervisor_hostname',
|
{'fieldname': 'OS-EXT-SRV-ATTR:hypervisor_hostname',
|
||||||
'desc': ('The hostname of hypervisor where the server is '
|
'desc': ('The hostname of hypervisor where the server is '
|
||||||
'running'),
|
'running'),
|
||||||
'col': 'host_name', 'translator': value_trans})}
|
'col': 'host_name', 'translator': value_trans},
|
||||||
|
{'fieldname': 'tags',
|
||||||
|
'translator': {'translation-type': 'LIST',
|
||||||
|
'table-name': TAGS,
|
||||||
|
'parent-key': 'id',
|
||||||
|
'parent-col-name': 'server_id',
|
||||||
|
'parent-key-desc': 'UUID of server',
|
||||||
|
'val-col': 'tag',
|
||||||
|
'val-col-desc': 'server tag string',
|
||||||
|
'translator': value_trans}})}
|
||||||
|
|
||||||
flavors_translator = {
|
flavors_translator = {
|
||||||
'translation-type': 'HDICT',
|
'translation-type': 'HDICT',
|
||||||
|
|
|
@ -38,7 +38,7 @@ class NovaFakeClient(mock.MagicMock):
|
||||||
self.availability_zones.list.return_value = self.get_zone_list()
|
self.availability_zones.list.return_value = self.get_zone_list()
|
||||||
|
|
||||||
def get_mock_server(self, id, name, host_id, status, tenant_id, user_id,
|
def get_mock_server(self, id, name, host_id, status, tenant_id, user_id,
|
||||||
flavor, image, zone=None, host_name=None):
|
flavor, image, zone=None, host_name=None, tags=None):
|
||||||
server = mock.MagicMock()
|
server = mock.MagicMock()
|
||||||
server.id = id
|
server.id = id
|
||||||
server.hostId = host_id
|
server.hostId = host_id
|
||||||
|
@ -48,6 +48,7 @@ class NovaFakeClient(mock.MagicMock):
|
||||||
server.name = name
|
server.name = name
|
||||||
server.image = image
|
server.image = image
|
||||||
server.flavor = flavor
|
server.flavor = flavor
|
||||||
|
server.tags = tags if tags else []
|
||||||
if zone is not None:
|
if zone is not None:
|
||||||
setattr(server, 'OS-EXT-AZ:availability_zone', zone)
|
setattr(server, 'OS-EXT-AZ:availability_zone', zone)
|
||||||
else:
|
else:
|
||||||
|
@ -76,7 +77,8 @@ class NovaFakeClient(mock.MagicMock):
|
||||||
'ACTIVE',
|
'ACTIVE',
|
||||||
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
||||||
'33ea0494-2bdf-4382-a445-9068997430b9',
|
'33ea0494-2bdf-4382-a445-9068997430b9',
|
||||||
{"id": 1}, {"id": 2}))
|
{"id": 1}, {"id": 2},
|
||||||
|
tags=['tag1', 'tag2']))
|
||||||
|
|
||||||
server_three = (
|
server_three = (
|
||||||
self.get_mock_server(9012, 'sample-server3',
|
self.get_mock_server(9012, 'sample-server3',
|
||||||
|
@ -84,7 +86,8 @@ class NovaFakeClient(mock.MagicMock):
|
||||||
'ACTIVE',
|
'ACTIVE',
|
||||||
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
'50e14867-7c64-4ec9-be8d-ed2470ca1d24',
|
||||||
'33ea0494-2bdf-4382-a445-9068997430b9',
|
'33ea0494-2bdf-4382-a445-9068997430b9',
|
||||||
{"id": 1}, {"id": 2}, 'foo', 'host2'))
|
{"id": 1}, {"id": 2}, 'foo', 'host2',
|
||||||
|
tags=['tag1', 'tag2', 'tag3']))
|
||||||
|
|
||||||
return [server_one, server_two, server_three]
|
return [server_one, server_two, server_three]
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,17 @@ class TestNovaDriver(base.TestCase):
|
||||||
self.assertEqual('foo', zone)
|
self.assertEqual('foo', zone)
|
||||||
self.assertEqual('host2', host_name)
|
self.assertEqual('host2', host_name)
|
||||||
|
|
||||||
|
server_tag_tuples = self.driver.state[self.driver.TAGS]
|
||||||
|
|
||||||
|
self.assertEqual(len(server_tag_tuples), 5)
|
||||||
|
|
||||||
|
self.assertIn((5678, 'tag1'), server_tag_tuples)
|
||||||
|
self.assertIn((5678, 'tag2'), server_tag_tuples)
|
||||||
|
|
||||||
|
self.assertIn((9012, 'tag1'), server_tag_tuples)
|
||||||
|
self.assertIn((9012, 'tag2'), server_tag_tuples)
|
||||||
|
self.assertIn((9012, 'tag3'), server_tag_tuples)
|
||||||
|
|
||||||
def test_flavors(self):
|
def test_flavors(self):
|
||||||
flavor_raw = self.nova.flavors.list(detailed=True)
|
flavor_raw = self.nova.flavors.list(detailed=True)
|
||||||
self.driver._translate_flavors(flavor_raw)
|
self.driver._translate_flavors(flavor_raw)
|
||||||
|
|
Loading…
Reference in New Issue