Add in_tree field to RequestGroup object

This patch adds new `in_tree` field to `RequestGroup` object.
This field is used to store the target compute node uuid.

Change-Id: Ic9444c60b3bba00c5a3b3c724c418c7629d41743
Blueprint: use-placement-in-tree
This commit is contained in:
Tetsuro Nakamura 2019-04-02 08:16:11 +00:00 committed by Tetsuro Nakamura
parent e25d59078e
commit f6667b05d2
3 changed files with 24 additions and 3 deletions

View File

@ -989,7 +989,8 @@ class RequestGroup(base.NovaObject):
"""
# Version 1.0: Initial version
# Version 1.1: add requester_id and provider_uuids fields
VERSION = '1.1'
# Version 1.2: add in_tree field
VERSION = '1.2'
fields = {
'use_same_provider': fields.BooleanField(default=True),
@ -1010,6 +1011,7 @@ class RequestGroup(base.NovaObject):
# NOTE(gibi): this can be more than one if this is the unnumbered
# request group (i.e. use_same_provider=False)
'provider_uuids': fields.ListOfUUIDField(default=[]),
'in_tree': fields.UUIDField(nullable=True, default=None),
}
def __init__(self, context=None, **kwargs):
@ -1054,6 +1056,9 @@ class RequestGroup(base.NovaObject):
super(RequestGroup, self).obj_make_compatible(
primitive, target_version)
target_version = versionutils.convert_version_to_tuple(target_version)
if target_version < (1, 2):
if 'in_tree' in primitive:
del primitive['in_tree']
if target_version < (1, 1):
if 'requester_id' in primitive:
del primitive['requester_id']

View File

@ -1120,7 +1120,7 @@ object_data = {
'PowerVMLiveMigrateData': '1.4-a745f4eda16b45e1bc5686a0c498f27e',
'Quotas': '1.3-40fcefe522111dddd3e5e6155702cf4e',
'QuotasNoOp': '1.3-347a039fc7cfee7b225b68b5181e0733',
'RequestGroup': '1.1-5a330f65df2d91356b1da19f10540ec8',
'RequestGroup': '1.2-b9f9db748fe8cde0573af69db771c5ce',
'RequestSpec': '1.12-25010470f219af9b6163f2a457a513f5',
'S3ImageMapping': '1.0-7dd7366a890d82660ed121de9092276e',
'SCSIDeviceBus': '1.0-61c1e89a00901069ab1cf2991681533b',

View File

@ -930,8 +930,9 @@ class TestRequestGroupObject(test.TestCase):
self.assertEqual(set(), rg.required_traits)
self.assertEqual(set(), rg.forbidden_traits)
self.assertEqual([], rg.aggregates)
self.assertIsNone(None, rg.requester_id)
self.assertIsNone(rg.requester_id)
self.assertEqual([], rg.provider_uuids)
self.assertIsNone(rg.in_tree)
def test_from_port_request(self):
port_resource_request = {
@ -982,9 +983,24 @@ class TestRequestGroupObject(test.TestCase):
requester_id=uuids.requester, provider_uuids=[uuids.rp1],
required_traits=set(['CUSTOM_PHYSNET_2']))
versions = ovo_base.obj_tree_get_versions('RequestGroup')
primitive = req_obj.obj_to_primitive(
target_version='1.2',
version_manifest=versions)['nova_object.data']
self.assertIn('in_tree', primitive)
self.assertIn('requester_id', primitive)
self.assertIn('provider_uuids', primitive)
self.assertIn('required_traits', primitive)
primitive = req_obj.obj_to_primitive(
target_version='1.1',
version_manifest=versions)['nova_object.data']
self.assertNotIn('in_tree', primitive)
self.assertIn('requester_id', primitive)
self.assertIn('provider_uuids', primitive)
self.assertIn('required_traits', primitive)
primitive = req_obj.obj_to_primitive(
target_version='1.0',
version_manifest=versions)['nova_object.data']
self.assertNotIn('in_tree', primitive)
self.assertNotIn('requester_id', primitive)
self.assertNotIn('provider_uuids', primitive)
self.assertIn('required_traits', primitive)