Merge "Data source driver preserves data types"

This commit is contained in:
Zuul 2018-07-05 04:38:28 +00:00 committed by Gerrit Code Review
commit d6ea3cb42b
16 changed files with 131 additions and 119 deletions

View File

@ -17,6 +17,7 @@ from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import collections
import datetime
from functools import cmp_to_key
from functools import reduce
@ -635,7 +636,7 @@ class DataSourceDriver(data_service.DataService):
for tup in table_state:
d = {}
d['data'] = tup
d['data'] = utils.tuple_to_congress(tup)
results.append(d)
return results
@ -748,7 +749,13 @@ class DataSourceDriver(data_service.DataService):
# Reads a VALUE object and returns (result_rows, h)
if extract_fn is None:
extract_fn = lambda x: x
return utils.value_to_congress(extract_fn(obj))
value = extract_fn(obj)
# preserve type if possible; convert to str if not Hashable
if isinstance(value, collections.Hashable):
return value
else:
return str(value)
@classmethod
def _compare_subtranslator(cls, x, y):
@ -837,8 +844,7 @@ class DataSourceDriver(data_service.DataService):
if subtrans[cls.TRANSLATION_TYPE] == cls.VALUE:
extract_fn = subtrans.get(cls.EXTRACT_FN, None)
converted_items = tuple([(utils.value_to_congress(k),
cls._extract_value(v, extract_fn))
converted_items = tuple([(k, cls._extract_value(v, extract_fn))
for k, v in obj.items()])
if id_col:
h = cls._compute_id(id_col, obj, converted_items)
@ -969,7 +975,7 @@ class DataSourceDriver(data_service.DataService):
col = fieldtranslator.get(cls.COL,
fieldtranslator[cls.FIELDNAME])
if col in hdict_row:
new_row.append(utils.value_to_congress(hdict_row[col]))
new_row.append(hdict_row[col])
if id_col:
h = cls._compute_id(id_col, obj, new_row)

View File

@ -28,7 +28,6 @@ import six
from congress.datasources import datasource_driver
from congress.datasources import datasource_utils
from congress.datasources import murano_classes
from congress import utils
logger = logging.getLogger(__name__)
@ -341,10 +340,10 @@ class MuranoDriver(datasource_driver.PollingDataSourceDriver,
return
for item in value:
self.state[self.PROPERTIES].add(
(obj_id, key, utils.value_to_congress(item)))
(obj_id, key, item))
else:
self.state[self.PROPERTIES].add(
(obj_id, key, utils.value_to_congress(value)))
(obj_id, key, value))
def _add_relationships(self, obj_id, key, value):
"""Add a set of (obj_id, value, key) to relationships table.

View File

@ -2142,11 +2142,13 @@ class DseRuntime (Runtime, data_service.DataService):
to_del = data[1]
result = []
for row in to_del:
formula = compile.Literal.create_from_table_tuple(table, row)
formula = compile.Literal.create_from_table_tuple(
table, utils.tuple_to_congress(row))
event = compile.Event(formula=formula, insert=False)
result.append(event)
for row in to_add:
formula = compile.Literal.create_from_table_tuple(table, row)
formula = compile.Literal.create_from_table_tuple(
table, utils.tuple_to_congress(row))
event = compile.Event(formula=formula, insert=True)
result.append(event)
self.receive_data_update(publisher, table, result)
@ -2168,7 +2170,8 @@ class DseRuntime (Runtime, data_service.DataService):
LOG.debug("received full data msg for %s:%s. %s",
publisher, table, utility.iterstr(data))
# Use a generator to avoid instantiating all these Facts at once.
facts = (compile.Fact(table, row) for row in data)
facts = (compile.Fact(table, utils.tuple_to_congress(row))
for row in data)
self.initialize_tables([table], facts, target=publisher)
def receive_data_update(self, publisher, table, data):

View File

@ -82,7 +82,7 @@ class TestCinderDriver(base.TestCase):
'name': 'alice',
'bootable': 'true',
'created_at': '2014-10-12T06:54:55.000000',
'volume_type': 'None',
'volume_type': None,
'encrypted': True,
'availability_zone': 'nova2',
'replication_status': 'r_status2',
@ -103,16 +103,16 @@ class TestCinderDriver(base.TestCase):
self.assertEqual({('8bf2eddb-0e1a-46f9-a49a-853f8016f476', '1',
'b75055d5f0834d99ae874f085cf95272', 'available',
'foo', 'bar', 'false', '2014-10-09T12:16:23.000000',
'lvmdriver-1', 'False', 'nova1', 'r_status1',
'True', '3b890e8a-7881-4430-b087-9e9e642e5e0d',
'lvmdriver-1', False, 'nova1', 'r_status1',
True, '3b890e8a-7881-4430-b087-9e9e642e5e0d',
'b4c36f7a-ac1b-41a6-9e83-03a6c1149669',
'7aa9787f-285d-4d22-8211-e20af07f1044',
'm_status1'),
('7cd8f73d-3243-49c9-a25b-a77ceb6ad1fa', '1',
'6e14edb203a84aa6a5a6a90872cbae79', 'creating',
'wonder', 'alice', 'true',
'2014-10-12T06:54:55.000000', 'None',
'True', 'nova2', 'r_status2', 'False',
'2014-10-12T06:54:55.000000', None,
True, 'nova2', 'r_status2', False,
'658b5663-9e83-406b-8b81-4a50cafaa2d6',
'bf789ec1-b4a2-4ea0-94f4-4a6ebcc00ad8',
'960ec54c-c2a4-4e4c-8192-8b1d9eb65fae',
@ -122,12 +122,12 @@ class TestCinderDriver(base.TestCase):
self.assertEqual({('8bf2eddb-0e1a-46f9-a49a-853f8016f476',
'a4fda93b-06e0-4743-8117-bc8bcecd651b',
'ab4db356-253d-4fab-bfa0-e3626c0b8405',
'None',
None,
'/dev/vda'),
('8bf2eddb-0e1a-46f9-a49a-853f8016f476',
'b4fda93b-06e0-4743-8117-bc8bcecd651b',
'bb4db356-253d-4fab-bfa0-e3626c0b8405',
'None',
None,
'/dev/vdb')},
self.driver.state['attachments'])
@ -166,14 +166,14 @@ class TestCinderDriver(base.TestCase):
'state': 'up',
'updated_at': '2014-10-10T06:25:08.000000',
'host': 'openstack@lvmdriver-1',
'disabled_reason': 'None'}),
'disabled_reason': None}),
ResponseObj({'status': 'enabled',
'binary': 'cinder-scheduler',
'zone': 'nova',
'state': 'up',
'updated_at': '2014-10-10T06:25:08.000000',
'host': 'openstack',
'disabled_reason': 'None'})]
'disabled_reason': None})]
service_list = self.driver._translate_services(services_data)
self.assertIsNotNone(service_list)
@ -181,10 +181,10 @@ class TestCinderDriver(base.TestCase):
self.assertEqual({('enabled', 'cinder-scheduler', 'nova',
'up', '2014-10-10T06:25:08.000000',
'openstack@lvmdriver-1', 'None'),
'openstack@lvmdriver-1', None),
('enabled', 'cinder-scheduler', 'nova',
'up', '2014-10-10T06:25:08.000000',
'openstack', 'None')},
'openstack', None)},
self.driver.state['services'])
def test_execute(self):

View File

@ -289,7 +289,7 @@ EXPECTED_STATE = {
'services': set([
('88f61682-d78e-410f-88ee-1e0eabbbc7da',
'8da5477d-340e-4bb4-808a-54d9f72017d1', 'rails-postgres',
0, 'None', 'turtle')]),
0, None, 'turtle')]),
}

View File

@ -520,14 +520,14 @@ class TestDatasourceDriver(base.TestCase):
rows, k = datasource_driver.DataSourceDriver.convert_obj(resp,
translator)
k1 = self.compute_hash((1, 'a', 'b', 'True'))
k1 = self.compute_hash((1, 'a', 'b', True))
self.assertEqual(4, len(rows))
self.assertEqual(k1, k)
self.assertIn(('testtable', (k, 1)), rows)
self.assertIn(('testtable', (k, 'a')), rows)
self.assertIn(('testtable', (k, 'b')), rows)
self.assertIn(('testtable', (k, 'True')), rows)
self.assertIn(('testtable', (k, True)), rows)
def test_convert_list_with_id_function(self):
# Test a single LIST with an id function
@ -545,7 +545,7 @@ class TestDatasourceDriver(base.TestCase):
self.assertIn(('testtable', (k, 1)), rows)
self.assertIn(('testtable', (k, 'a')), rows)
self.assertIn(('testtable', (k, 'b')), rows)
self.assertIn(('testtable', (k, 'True')), rows)
self.assertIn(('testtable', (k, True)), rows)
def test_convert_list_without_id(self):
# Test a single LIST without an id_column
@ -560,7 +560,7 @@ class TestDatasourceDriver(base.TestCase):
self.assertIn(('testtable', (1,)), rows)
self.assertIn(('testtable', ('a',)), rows)
self.assertIn(('testtable', ('b',)), rows)
self.assertIn(('testtable', ('True',)), rows)
self.assertIn(('testtable', (True,)), rows)
def test_convert_list_with_sublist(self):
# Test a single LIST with an id_column
@ -576,7 +576,7 @@ class TestDatasourceDriver(base.TestCase):
k1 = self.compute_hash((1, 2, 3))
k2 = self.compute_hash(('a', 'b', 'c'))
k3 = self.compute_hash(('True', 'False'))
k3 = self.compute_hash((True, False))
k = self.compute_hash((k1, k2, k3))
self.assertEqual(11, len(rows))
@ -587,8 +587,8 @@ class TestDatasourceDriver(base.TestCase):
self.assertIn(('subtable', (k2, 'a')), rows)
self.assertIn(('subtable', (k2, 'b')), rows)
self.assertIn(('subtable', (k2, 'c')), rows)
self.assertIn(('subtable', (k3, 'True')), rows)
self.assertIn(('subtable', (k3, 'False')), rows)
self.assertIn(('subtable', (k3, True)), rows)
self.assertIn(('subtable', (k3, False)), rows)
self.assertIn(('testtable', (k, k1)), rows)
self.assertIn(('testtable', (k, k2)), rows)
self.assertIn(('testtable', (k, k3)), rows)
@ -627,7 +627,7 @@ class TestDatasourceDriver(base.TestCase):
self.assertEqual(1, len(rows))
self.assertIsNone(k)
self.assertEqual([('testtable', ('FOO', 'None'))], rows)
self.assertEqual([('testtable', ('FOO', None))], rows)
def test_convert_recursive_hdict_single_fields_default_col(self):
# Test simple fields inside of an HDICT using the default col name.

View File

@ -90,7 +90,7 @@ class TestGlanceV2Driver(base.TestCase):
u'2014-10-01T20:28:07Z',
u'ami',
u'4dfdcf14a20940799d89c7a5e7345978',
'False',
False,
0,
0,
u'4eada48c2843d2a262c814ddc92ecf2c',
@ -108,14 +108,14 @@ class TestGlanceV2Driver(base.TestCase):
u'2014-10-01T20:28:09Z',
u'qcow2',
u'4dfdcf14a20940799d89c7a5e7345978',
'False',
False,
0,
0,
u'9e486c3bf76219a6a37add392e425b36',
209649664,
u'/v2/images/c42736e7-8b09-4906-abd2-d6dc8673c297/file',
'None',
'None',
None,
None,
u'/v2/schemas/image',
u'public')]),
'tags': set([

View File

@ -107,7 +107,7 @@ class TestIronicDriver(base.TestCase):
'512', 'x86_64', '10', '1')]),
'chassises': set([
('89a15e07-5c80-48a4-b440-9c61ddb7e652',
'2015-01-13T06:52:01+00:00', 'None')]),
'2015-01-13T06:52:01+00:00', None)]),
'active_hosts': set([
('pxe_ipmitool', 'localhost'),
('pxe_ssh', 'localhost'),
@ -116,7 +116,7 @@ class TestIronicDriver(base.TestCase):
('9cf035f0-351c-43d5-8968-f9fe2c41787b',
'89a15e07-5c80-48a4-b440-9c61ddb7e652',
'power on',
'False',
False,
'pxe_ssh',
'2520745f-b4da-4e10-9d32-84451cfa8b33',
'2015-01-13T06:52:02+00:00',
@ -125,17 +125,17 @@ class TestIronicDriver(base.TestCase):
('7a95ebf5-f213-4427-b669-010438f43e87',
'89a15e07-5c80-48a4-b440-9c61ddb7e652',
'power off',
'False',
False,
'pxe_ssh',
'None',
None,
'2015-01-13T06:52:04+00:00',
'None',
None,
'2015-02-10T07:55:24+00:00')]),
'ports': set([
('49f3205a-db1e-4497-9371-6011ef572981',
'7a95ebf5-f213-4427-b669-010438f43e87',
'52:54:00:98:f2:4e', '',
'2015-01-13T06:52:05+00:00', 'None'),
'2015-01-13T06:52:05+00:00', None),
('43190aae-d5fe-444f-9d50-155fca4bad82',
'9cf035f0-351c-43d5-8968-f9fe2c41787b',
'52:54:00:7f:e7:2e',

View File

@ -86,11 +86,11 @@ class TestKeystoneDriver(base.TestCase):
self.assertEqual(2, len(user_list))
# Check an individual user entry
self.assertIn(('alice', 'alice foo', 'True',
self.assertIn(('alice', 'alice foo', True,
'019b18a15f2a44c1880d57704b2c4009',
'00f2c34a156c40058004ee8eb3320e04',
'alice@foo.com'), user_list)
self.assertIn(('bob', 'bob bar', 'False',
self.assertIn(('bob', 'bob bar', False,
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
'bob@bar.edu'), user_list)
@ -117,10 +117,10 @@ class TestKeystoneDriver(base.TestCase):
self.assertEqual(2, len(tenants_list))
# Check an individual role entry
self.assertIn(('True', 'accounting team', 'accounting',
self.assertIn((True, 'accounting team', 'accounting',
'00000000000000000000000000000001'),
tenants_list)
self.assertIn(('False', 'eng team', 'eng',
self.assertIn((False, 'eng team', 'eng',
'00000000000000000000000000000002'),
tenants_list)

View File

@ -102,10 +102,10 @@ class TestKeystoneDriver(base.TestCase):
# Check an individual user entry
self.assertIn(('00f2c34a156c40058004ee8eb3320e04',
'alice', 'True', '019b18a15f2a44c1880d57704b2c4009',
'alice', True, '019b18a15f2a44c1880d57704b2c4009',
'default'), user_list)
self.assertIn(('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
'bob', 'False', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'bob', False, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'default'), user_list)
def test_list_roles(self):
@ -130,9 +130,9 @@ class TestKeystoneDriver(base.TestCase):
self.assertEqual(2, len(domains_list))
# Check an individual role entry
self.assertIn(('False', 'domain 2', 'test domain',
self.assertIn((False, 'domain 2', 'test domain',
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'), domains_list)
self.assertIn(('True', 'domain 1', 'default',
self.assertIn((True, 'domain 1', 'default',
'1fbe4e6fedb34050ad56c6e5dd225998'), domains_list)
def test_list_projects(self):
@ -144,9 +144,9 @@ class TestKeystoneDriver(base.TestCase):
self.assertEqual(2, len(projects_list))
# Check an individual role entry
self.assertIn(('True', 'accounting team', 'accounting', 'default',
self.assertIn((True, 'accounting team', 'accounting', 'default',
'00000000000000000000000000000001'), projects_list)
self.assertIn(('False', 'eng team', 'eng', 'default',
self.assertIn((False, 'eng team', 'eng', 'default',
'00000000000000000000000000000002'), projects_list)
def test_execute(self):

View File

@ -83,9 +83,9 @@ class TestMistralDriver(base.TestCase):
u'',
u'<default-project>',
u'2017-10-12 20:06:58',
u'None',
None,
u"---\nversion: '2.0'\n\nstd.create_instance:\n...",
u'None'),
None),
(u'std.delete_instance',
u'55f43e39-89aa-43e6-9eec-526b5aa932b9',
u'public',
@ -93,9 +93,9 @@ class TestMistralDriver(base.TestCase):
u'',
u'<default-project>',
u'2017-10-12 20:06:58',
u'None',
None,
u'---\nversion: "2.0"\n\nstd.delete_instance:\n...',
u'None')},
None)},
self.driver.state['workflows'])
def test_list_actions(self):
@ -132,7 +132,7 @@ class TestMistralDriver(base.TestCase):
u'health_monitor, action_region="", body=null',
u'2017-10-13 20:06:56',
u'2017-10-13 23:06:56',
u'False',
False,
u'action definition',
u'Updates a load balancer health monitor.',
u'public'),
@ -140,9 +140,9 @@ class TestMistralDriver(base.TestCase):
u'neutron.update_health_monitor',
u'health_monitor, action_region="", body=null',
u'2017-10-12 20:06:56',
u'None',
u'True',
u'None',
None,
True,
None,
u'Updates a load balancer health monitor.',
u'public')},
self.driver.state['actions'])
@ -204,7 +204,7 @@ class TestMistralDriver(base.TestCase):
self.assertEqual({(u'5c377055-5590-479a-beec-3d4a47a2dfb6',
u'nova.servers_delete',
u'None',
None,
u'std.delete_instance',
u'f40a0a20-958d-4948-b0c0-e1961649f2e2',
u'delete_vm',
@ -212,7 +212,7 @@ class TestMistralDriver(base.TestCase):
u'{"server": 1}',
u'2017-12-19 22:56:50',
u'2017-12-19 22:56:50',
u'True',
True,
u'ERROR',
u'')},
self.driver.state['action_executions'])

View File

@ -563,10 +563,10 @@ expected_service_properties = [
(u'76b9ca88-c668-4e37-a830-5845adc10b0e', u'ipAddresses', '10.0.11.3'),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e', u'ipAddresses', '172.24.4.4'),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e',
u'networks.useFlatNetwork', 'False'),
u'networks.useFlatNetwork', False),
(u'769af50c-9629-4694-b623-e9b392941279', u'name', 'MySqlDB'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9',
u'networks.useEnvironmentNetwork', 'True'),
u'networks.useEnvironmentNetwork', True),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9',
u'floatingIpAddress', '172.24.4.4'),
(u'fda74653-8b66-42e2-be16-12ebc87d7570', u'dbPassword', 'Passw0rd.'),
@ -585,15 +585,15 @@ expected_service_properties = [
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9', u'ipAddresses', '10.0.11.4'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9', u'name', 'woydqi7nn7ipc2'),
(u'fda74653-8b66-42e2-be16-12ebc87d7570', u'name', 'PetClinic'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9', u'assignFloatingIp', 'True'),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e', u'assignFloatingIp', 'True'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9', u'assignFloatingIp', True),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e', u'assignFloatingIp', True),
(u'769af50c-9629-4694-b623-e9b392941279', u'password', 'Passw0rd.'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9', u'flavor', 'm1.small'),
(u'fda74653-8b66-42e2-be16-12ebc87d7570', u'dbName', 'pet_db'),
(u'c52dda24-38d6-4f2f-9184-abca0beaa6e9',
u'networks.useFlatNetwork', 'False'),
u'networks.useFlatNetwork', False),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e',
u'networks.useEnvironmentNetwork', 'True'),
u'networks.useEnvironmentNetwork', True),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e', u'availabilityZone', 'nova'),
(u'76b9ca88-c668-4e37-a830-5845adc10b0e',
u'floatingIpAddress', '172.24.4.4'),
@ -604,7 +604,7 @@ expected_service_properties = [
]
expected_package_properties = [
(u'4b9c6a24c2e64f928156e0c87324c394', u'is_public', 'False'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'is_public', False),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'tags', 'connection'),
(u'884b764c0ce6439d8566b3b2da967687', u'created', '2015-03-23T21:28:58'),
(u'884b764c0ce6439d8566b3b2da967687', u'tags', 'SQL'),
@ -617,7 +617,7 @@ expected_package_properties = [
(u'5add5a561da341c4875495c5887957a8', u'created', '2015-03-24T18:26:32'),
(u'884b764c0ce6439d8566b3b2da967687', u'name', 'MySQL'),
(u'884b764c0ce6439d8566b3b2da967687', u'tags', 'Database'),
(u'5add5a561da341c4875495c5887957a8', u'enabled', 'True'),
(u'5add5a561da341c4875495c5887957a8', u'enabled', True),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'tags', 'Pages'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'tags', 'Database'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'type', 'Application'),
@ -627,9 +627,9 @@ expected_package_properties = [
(u'5add5a561da341c4875495c5887957a8', u'fully_qualified_name',
'io.murano.databases'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'author', 'Mirantis, Inc'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'is_public', 'False'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'is_public', False),
(u'4b9c6a24c2e64f928156e0c87324c394', u'tags', 'SQL'),
(u'884b764c0ce6439d8566b3b2da967687', u'enabled', 'True'),
(u'884b764c0ce6439d8566b3b2da967687', u'enabled', True),
(u'4b9c6a24c2e64f928156e0c87324c394', u'updated', '2015-03-23T21:29:10'),
(u'884b764c0ce6439d8566b3b2da967687', u'fully_qualified_name',
'io.murano.databases.MySql'),
@ -638,31 +638,31 @@ expected_package_properties = [
'io.murano.databases.PostgreSql'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'tags', 'Java'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'tags', 'Postgre'),
(u'a7d64980999948dc96401cdce5ae2141', u'is_public', 'False'),
(u'a7d64980999948dc96401cdce5ae2141', u'is_public', False),
(u'a7d64980999948dc96401cdce5ae2141', u'type', 'Application'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'name', 'PostgreSQL'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'tags', 'Linux'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'author', 'Mirantis, Inc'),
(u'5add5a561da341c4875495c5887957a8', u'is_public', 'False'),
(u'5add5a561da341c4875495c5887957a8', u'is_public', False),
(u'5add5a561da341c4875495c5887957a8', u'tags', 'SQL'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'author', 'Mirantis, Inc'),
(u'5add5a561da341c4875495c5887957a8', u'class_definitions',
'io.murano.databases.SqlDatabase'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'updated', '2015-03-23T21:26:56'),
(u'5add5a561da341c4875495c5887957a8', u'tags', 'RDBMS'),
(u'a7d64980999948dc96401cdce5ae2141', u'enabled', 'True'),
(u'a7d64980999948dc96401cdce5ae2141', u'enabled', True),
(u'5add5a561da341c4875495c5887957a8', u'updated', '2015-03-24T18:26:32'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'class_definitions',
'io.murano.apps.java.PetClinic'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'enabled', 'True'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'enabled', True),
(u'a7d64980999948dc96401cdce5ae2141', u'class_definitions',
'io.murano.apps.apache.Tomcat'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'created', '2015-03-24T18:25:24'),
(u'5add5a561da341c4875495c5887957a8', u'author', 'Mirantis, Inc'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'is_public', 'False'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'is_public', False),
(u'884b764c0ce6439d8566b3b2da967687', u'class_definitions',
'io.murano.databases.MySql'),
(u'884b764c0ce6439d8566b3b2da967687', u'is_public', 'False'),
(u'884b764c0ce6439d8566b3b2da967687', u'is_public', False),
(u'884b764c0ce6439d8566b3b2da967687', u'tags', 'RDBMS'),
(u'a7d64980999948dc96401cdce5ae2141', u'author', 'Mirantis, Inc'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'name', 'Git'),
@ -673,13 +673,13 @@ expected_package_properties = [
(u'4b9c6a24c2e64f928156e0c87324c394', u'class_definitions',
'io.murano.databases.PostgreSql'),
(u'a7d64980999948dc96401cdce5ae2141', u'tags', 'Pages'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'enabled', 'True'),
(u'4b9c6a24c2e64f928156e0c87324c394', u'enabled', True),
(u'a7d64980999948dc96401cdce5ae2141', u'tags', 'Server'),
(u'a7d64980999948dc96401cdce5ae2141', u'updated', '2015-03-23T21:28:11'),
(u'884b764c0ce6439d8566b3b2da967687', u'updated', '2015-03-23T21:28:58'),
(u'a7d64980999948dc96401cdce5ae2141', u'name', 'Apache Tomcat'),
(u'884b764c0ce6439d8566b3b2da967687', u'author', 'Mirantis, Inc'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'enabled', 'True'),
(u'9f7c9e2ed8f9462a8f9037032ab64755', u'enabled', True),
(u'a7d64980999948dc96401cdce5ae2141', u'created', '2015-03-23T21:28:11'),
(u'3ff58cdfeb27487fb3127fb8fd45109c', u'created', '2015-03-23T21:26:56'),
(u'5add5a561da341c4875495c5887957a8', u'name', 'SQL Library'),

View File

@ -316,16 +316,16 @@ class TestNeutronV2Driver(base.TestCase):
('3c0eb3a3-4d16-4b1b-b327-44417182d0bb',
'feee0a965cc34274917fb753623dd57d', 'private-subnet',
'63ce8fbb-12e9-4ecd-9b56-1bbf8b51217d', 4, '10.0.0.0/24',
'10.0.0.1', 'True', 'None', 'None'),
'10.0.0.1', True, None, None),
('aa9ad4f7-baf0-4a41-85c3-1cc8a3066db6', '',
'meta-f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'6743ff85-2cfd-48a7-9d3f-472cd418783e', 4,
'169.254.169.252/30',
'169.254.169.253', 'True', 'None', 'None'),
'169.254.169.253', True, None, None),
('10d20df9-e8ba-4756-ba30-d573ceb2e99a',
'feee0a965cc34274917fb753623dd57d', '',
'ecdea1af-7197-43c8-b3b0-34d90f72a2a8', 4, '1.1.1.0/24',
'1.1.1.1', 'True', 'None', 'None')]),
'1.1.1.1', True, None, None)]),
'floating_ips': set([
("2f245a7b-796b-4f26-9cf9-9e82d248fda7",
"d23abc8d-2991-4a55-ba98-2aaea84cc72f",
@ -333,68 +333,68 @@ class TestNeutronV2Driver(base.TestCase):
"376da547-b977-4cfe-9cba-275c80debf57", "10.0.0.3",
"172.24.4.228", "ce705c24-c1ef-408a-bda3-7bbd946164ab",
"ACTIVE"),
("61cea855-49cb-4846-997d-801b70c71bdd", 'None',
("61cea855-49cb-4846-997d-801b70c71bdd", None,
"4969c491a3c74ee4af974e6d800c62de",
"376da547-b977-4cfe-9cba-275c80debf57", 'None',
"172.24.4.227", 'None', "DOWN")]),
"376da547-b977-4cfe-9cba-275c80debf57", None,
"172.24.4.227", None, "DOWN")]),
'routers':
set([('f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'feee0a965cc34274917fb753623dd57d', 'DOWN', 'True',
'myrouter', 'False')]),
'feee0a965cc34274917fb753623dd57d', 'DOWN', True,
'myrouter', False)]),
'dns_nameservers':
set([('3c0eb3a3-4d16-4b1b-b327-44417182d0bb', '8.8.8.8')]),
'security_group_rules':
set([('e0239062-4243-4798-865f-7055f03786d6',
'e70cf243-3389-4f80-82dc-92a3ec1f2d2a',
'feee0a965cc34274917fb753623dd57d', 'None', 'egress',
'IPv4', 'None', 'None', 'None', 'None'),
'feee0a965cc34274917fb753623dd57d', None, 'egress',
'IPv4', None, None, None, None),
('a268fc32-1a59-4154-9a7c-f453ef92560c',
'ed7fd9f6-e390-448a-9f5f-8dd4659282f7', '', 'None',
'egress', 'IPv6', 'None', 'None', 'None', 'None'),
'ed7fd9f6-e390-448a-9f5f-8dd4659282f7', '', None,
'egress', 'IPv6', None, None, None, None),
('a268fc32-1a59-4154-9a7c-f453ef92560c',
'1d943e83-e4e6-472a-9655-f74eb22f3668', '', 'None',
'egress', 'IPv4', 'None', 'None', 'None', 'None'),
'1d943e83-e4e6-472a-9655-f74eb22f3668', '', None,
'egress', 'IPv4', None, None, None, None),
('a268fc32-1a59-4154-9a7c-f453ef92560c',
'30be5ee1-5b0a-4929-aca5-0c25f1c6b733', '',
'a268fc32-1a59-4154-9a7c-f453ef92560c', 'ingress',
'IPv4', 'None', 'None', 'None', 'None'),
'IPv4', None, None, None, None),
('e0239062-4243-4798-865f-7055f03786d6',
'8a81fecc-ecc7-48ca-bccc-195799667e23',
'feee0a965cc34274917fb753623dd57d',
'e0239062-4243-4798-865f-7055f03786d6', 'ingress',
'IPv6', 'None', 'None', 'None', 'None'),
'IPv6', None, None, None, None),
('a268fc32-1a59-4154-9a7c-f453ef92560c',
'639995b8-c3ac-44a3-a4f3-c74f9172ad54', '',
'a268fc32-1a59-4154-9a7c-f453ef92560c', 'ingress',
'IPv6', 'None', 'None', 'None', 'None'),
'IPv6', None, None, None, None),
('e0239062-4243-4798-865f-7055f03786d6',
'8f4d9e99-1fe8-4816-9f07-c4ecddea9427',
'feee0a965cc34274917fb753623dd57d',
'e0239062-4243-4798-865f-7055f03786d6',
'ingress', 'IPv4', 'None', 'None', 'None', 'None'),
'ingress', 'IPv4', None, None, None, None),
('e0239062-4243-4798-865f-7055f03786d6',
'eca1df0f-b222-4208-8f96-8a8024fd6834',
'feee0a965cc34274917fb753623dd57d', 'None', 'egress',
'IPv6', 'None', 'None', 'None', 'None')]),
'feee0a965cc34274917fb753623dd57d', None, 'egress',
'IPv6', None, None, None, None)]),
'ports':
set([('c58c3246-6c2e-490a-b4d9-3b8d5191b465',
'feee0a965cc34274917fb753623dd57d', '',
'63ce8fbb-12e9-4ecd-9b56-1bbf8b51217d',
'fa:16:3e:08:31:6e', 'True', 'DOWN',
'fa:16:3e:08:31:6e', True, 'DOWN',
'f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'network:router_interface'),
('87f8933a-9582-48d8-ad16-9abf6e545002', '', '',
'6743ff85-2cfd-48a7-9d3f-472cd418783e',
'fa:16:3e:b7:78:e8', 'True', 'DOWN',
'fa:16:3e:b7:78:e8', True, 'DOWN',
'f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'network:router_interface'),
('eb50003b-a081-4533-92aa-1cbd97f526a8',
'feee0a965cc34274917fb753623dd57d', '',
'63ce8fbb-12e9-4ecd-9b56-1bbf8b51217d',
'fa:16:3e:af:56:fa', 'True', 'DOWN', '', ''),
'fa:16:3e:af:56:fa', True, 'DOWN', '', ''),
('04627c85-3553-436c-a7c5-0a64f5b87bb9', '', '',
'ecdea1af-7197-43c8-b3b0-34d90f72a2a8',
'fa:16:3e:f3:19:e5', 'True', 'DOWN',
'fa:16:3e:f3:19:e5', True, 'DOWN',
'f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'network:router_gateway')]),
'allocation_pools':
@ -412,7 +412,7 @@ class TestNeutronV2Driver(base.TestCase):
'e0239062-4243-4798-865f-7055f03786d6')]),
'external_gateway_infos':
set([('f42dc4f1-f371-48cc-95be-cf1b97112ab8',
'ecdea1af-7197-43c8-b3b0-34d90f72a2a8', 'True')]),
'ecdea1af-7197-43c8-b3b0-34d90f72a2a8', True)]),
'fixed_ips':
set([('c58c3246-6c2e-490a-b4d9-3b8d5191b465', '10.0.0.1',
'3c0eb3a3-4d16-4b1b-b327-44417182d0bb'),
@ -426,10 +426,10 @@ class TestNeutronV2Driver(base.TestCase):
'networks':
set([('ecdea1af-7197-43c8-b3b0-34d90f72a2a8',
'feee0a965cc34274917fb753623dd57d', 'public',
'ACTIVE', 'True', 'False'),
'ACTIVE', True, False),
('63ce8fbb-12e9-4ecd-9b56-1bbf8b51217d',
'feee0a965cc34274917fb753623dd57d', 'private',
'ACTIVE', 'True', 'False')]),
'ACTIVE', True, False)]),
'security_groups':
set([('e0239062-4243-4798-865f-7055f03786d6',
'feee0a965cc34274917fb753623dd57d', 'default',

View File

@ -154,30 +154,30 @@ class TestNeutronV2QosDriver(base.TestCase):
'feee0a965cc34274917fb753623dd57d',
'ysm',
'',
'False')]),
False)]),
'rules':
set([('be50b732-4508-4a94-9c3c-8dc4b96a2b43',
'015f3dc8-7d3e-4598-8996-0597328c4db5',
100,
'egress',
'minimum_bandwidth',
'None',
'None',
'None'),
None,
None,
None),
('be50b732-4508-4a94-9c3c-8dc4b96a2b43',
'6be91937-b9ec-4209-a430-0c2694df1095',
'None',
'None',
None,
None,
'dscp_marking',
10,
'None',
'None'),
None,
None),
('be50b732-4508-4a94-9c3c-8dc4b96a2b43',
'9daaa87a-5441-49ef-8f25-2810d37c3a60',
'None',
None,
'egress',
'bandwidth_limit',
'None',
None,
500,
100)])}

View File

@ -86,8 +86,8 @@ class TestNovaDriver(base.TestCase):
tenant_id)
self.assertEqual('2', image_id)
self.assertEqual('1', flavor_id)
self.assertEqual('None', zone)
self.assertEqual('None', host_name)
self.assertEqual(None, zone)
self.assertEqual(None, host_name)
elif id == '9012':
self.assertEqual("sample-server3", name)
@ -221,7 +221,7 @@ class TestNovaDriver(base.TestCase):
self.driver._translate_services(service_list)
expected_ret = {
1: [1, 'nova-compute', 'nova', 'nova1', 'enabled', 'up',
'2015-07-28T08:28:37.000000', 'None'],
'2015-07-28T08:28:37.000000', None],
2: [2, 'nova-schedule', 'nova', 'nova1', 'disabled', 'up',
'2015-07-28T08:28:38.000000', 'daily maintenance']
}

View File

@ -76,6 +76,10 @@ def value_to_congress(value):
return str(value)
def tuple_to_congress(value_tuple):
return tuple(value_to_congress(v) for v in value_tuple)
# Note(thread-safety): blocking function
def create_datasource_policy(bus, datasource, engine):
# Get the schema for the datasource using