diff --git a/nova/objects/resource_provider.py b/nova/objects/resource_provider.py index d5fe044bb995..7896cfef6ab0 100644 --- a/nova/objects/resource_provider.py +++ b/nova/objects/resource_provider.py @@ -544,7 +544,11 @@ class InventoryList(base.ObjectListBase, base.NovaObject): string. """ if isinstance(res_class, six.string_types): - res_class = fields.ResourceClass.index(res_class) + try: + res_class = fields.ResourceClass.index(res_class) + except ValueError: + raise exception.NotFound("No such resource class '%s'" % + res_class) for inv_rec in self.objects: if fields.ResourceClass.index(inv_rec.resource_class) == res_class: diff --git a/nova/tests/functional/api/openstack/placement/gabbits/inventory.yaml b/nova/tests/functional/api/openstack/placement/gabbits/inventory.yaml index b21a6d13eadc..e594c3f3705a 100644 --- a/nova/tests/functional/api/openstack/placement/gabbits/inventory.yaml +++ b/nova/tests/functional/api/openstack/placement/gabbits/inventory.yaml @@ -239,6 +239,10 @@ tests: GET: /resource_providers/$ENVIRON['RP_UUID']/inventories/IPV4_ADDRESS status: 404 +- name: get invalid inventory class + GET: /resource_providers/$ENVIRON['RP_UUID']/inventories/HOUSE + status: 404 + - name: create another resource provider POST: /resource_providers request_headers: diff --git a/nova/tests/unit/objects/test_resource_provider.py b/nova/tests/unit/objects/test_resource_provider.py index 1dc4813f5a60..910b3f556bca 100644 --- a/nova/tests/unit/objects/test_resource_provider.py +++ b/nova/tests/unit/objects/test_resource_provider.py @@ -435,6 +435,12 @@ class TestInventory(test_objects._LocalTest): self.assertIsNotNone(found) self.assertEqual(24, found.total) + # Use an invalid string... + error = self.assertRaises(exception.NotFound, + inv_list.find, + 'HOUSE') + self.assertIn('No such resource class', str(error)) + class _TestAllocationNoDB(object): @mock.patch('nova.objects.Allocation._create_in_db',