From 41efc33338064f349890e7ee3528eb95a9804b8b Mon Sep 17 00:00:00 2001 From: Tetsuro Nakamura Date: Tue, 5 Feb 2019 10:27:58 +0000 Subject: [PATCH] Raise error if resource provider is not found On reservation provider creation, dict key error occurred if the host resource provider is not found, which is difficult to debug. This patch changes it to raise a more understandable one, ResourceProviderNotFound error. Change-Id: Id9a23a3fd92597c87dcdfba7b8e73e720b0ab656 Related-Bug: #1814594 --- blazar/tests/utils/openstack/test_placement.py | 10 ++++++++++ blazar/utils/openstack/placement.py | 3 +++ 2 files changed, 13 insertions(+) diff --git a/blazar/tests/utils/openstack/test_placement.py b/blazar/tests/utils/openstack/test_placement.py index be9896cc..b5cecc84 100644 --- a/blazar/tests/utils/openstack/test_placement.py +++ b/blazar/tests/utils/openstack/test_placement.py @@ -269,6 +269,16 @@ class TestPlacementClient(tests.TestCase): headers={'accept': 'application/json'}, microversion=PLACEMENT_MICROVERSION, raise_exc=False) + @mock.patch('keystoneauth1.session.Session.request') + def test_create_reservation_provider_fail(self, kss_req): + host_name = "compute-1" + get_json_mock = {'resource_providers': []} + kss_req.return_value = fake_requests.FakeResponse( + 200, content=json.dumps(get_json_mock)) + self.assertRaises( + exceptions.ResourceProviderNotFound, + self.client.create_reservation_provider, host_name) + @mock.patch('keystoneauth1.session.Session.request') def test_delete_reservation_provider(self, kss_req): host_uuid = uuidutils.generate_uuid() diff --git a/blazar/utils/openstack/placement.py b/blazar/utils/openstack/placement.py index a06ed948..4d2f9176 100644 --- a/blazar/utils/openstack/placement.py +++ b/blazar/utils/openstack/placement.py @@ -185,6 +185,9 @@ class BlazarPlacementClient(object): def create_reservation_provider(self, host_name): """Create a reservation provider as a child of the given host""" host_rp = self.get_resource_provider(host_name) + if host_rp is None: + raise exceptions.ResourceProviderNotFound( + resource_provider=host_name) host_uuid = host_rp['uuid'] rp_name = "blazar_" + host_name