diff --git a/nova/objects/resource_provider.py b/nova/objects/resource_provider.py index 30dc71e20801..7d0f460907f7 100644 --- a/nova/objects/resource_provider.py +++ b/nova/objects/resource_provider.py @@ -937,6 +937,13 @@ class Usage(base.NovaObject): 'usage': fields.NonNegativeIntegerField(), } + def obj_make_compatible(self, primitive, target_version): + super(Usage, self).obj_make_compatible(primitive, target_version) + target_version = versionutils.convert_version_to_tuple(target_version) + if target_version < (1, 1) and 'resource_class' in primitive: + rc = primitive['resource_class'] + rc_cache.raise_if_custom_resource_class_pre_v1_1(rc) + @staticmethod def _from_db_object(context, target, source): for field in target.fields: diff --git a/nova/tests/unit/objects/test_resource_provider.py b/nova/tests/unit/objects/test_resource_provider.py index bd0ba3ccc46b..75e2c01e9691 100644 --- a/nova/tests/unit/objects/test_resource_provider.py +++ b/nova/tests/unit/objects/test_resource_provider.py @@ -541,3 +541,13 @@ class TestAllocationListNoDB(test_objects._LocalTest, class TestRemoteAllocationListNoDB(test_objects._RemoteTest, _TestAllocationListNoDB): USES_DB = False + + +class TestUsageNoDB(test_objects._LocalTest): + USES_DB = False + + def test_v1_1_resource_class(self): + usage = objects.Usage(resource_class='foo') + self.assertRaises(ValueError, + usage.obj_to_primitive, + target_version='1.0')