Merge "Add create/delete reservation provider"

This commit is contained in:
Zuul 2018-10-18 17:21:04 +00:00 committed by Gerrit Code Review
commit 4fb27d38f3
2 changed files with 102 additions and 0 deletions

View File

@ -200,3 +200,88 @@ class TestPlacementClient(tests.TestCase):
self.assertRaises(
exceptions.ResourceProviderDeletionFailed,
self.client.delete_resource_provider, rp_uuid)
@mock.patch('keystoneauth1.session.Session.request')
def test_create_reservation_provider(self, kss_req):
host_uuid = uuidutils.generate_uuid()
host_name = "compute-1"
rp_uuid = uuidutils.generate_uuid()
rp_name = "blazar_compute-1"
get_json_mock = {
'resource_providers': [
{
'uuid': host_uuid,
'name': host_name,
'generation': 0,
'parent_provider_uuid': None
}
]
}
post_json_mock = {'uuid': rp_uuid,
'name': rp_name,
'generation': 0,
'parent_provider_uuid': host_uuid}
mock_call1 = fake_requests.FakeResponse(
200, content=json.dumps(get_json_mock))
mock_call2 = fake_requests.FakeResponse(
200, content=json.dumps(post_json_mock))
kss_req.side_effect = [mock_call1, mock_call2]
self.client.create_reservation_provider(host_name)
expected_url_get = "/resource_providers?name=%s" % host_name
kss_req.assert_any_call(
expected_url_get, 'GET',
endpoint_filter={'service_type': 'placement',
'interface': 'public'},
headers={'accept': 'application/json'},
microversion=PLACEMENT_MICROVERSION, raise_exc=False)
expected_url_post = "/resource_providers"
kss_req.assert_any_call(
expected_url_post, 'POST',
endpoint_filter={'service_type': 'placement',
'interface': 'public'},
json={'name': 'blazar_compute-1',
'parent_provider_uuid': host_uuid},
headers={'accept': 'application/json'},
microversion=PLACEMENT_MICROVERSION, raise_exc=False)
@mock.patch('keystoneauth1.session.Session.request')
def test_delete_reservation_provider(self, kss_req):
host_uuid = uuidutils.generate_uuid()
host_name = "compute-1"
rp_uuid = uuidutils.generate_uuid()
rp_name = "blazar_compute-1"
get_json_mock = {
'resource_providers': [
{
'uuid': rp_uuid,
'name': rp_name,
'generation': 0,
'parent_provider_uuid': host_uuid
}
]
}
mock_call1 = fake_requests.FakeResponse(
200, content=json.dumps(get_json_mock))
mock_call2 = fake_requests.FakeResponse(200)
kss_req.side_effect = [mock_call1, mock_call2]
self.client.delete_reservation_provider(host_name)
expected_url_get = "/resource_providers?name=%s" % rp_name
kss_req.assert_any_call(
expected_url_get, 'GET',
endpoint_filter={'service_type': 'placement',
'interface': 'public'},
headers={'accept': 'application/json'},
microversion=PLACEMENT_MICROVERSION, raise_exc=False)
expected_url_post = "/resource_providers/%s" % rp_uuid
kss_req.assert_any_call(
expected_url_post, 'DELETE',
endpoint_filter={'service_type': 'placement',
'interface': 'public'},
headers={'accept': 'application/json'},
microversion=PLACEMENT_MICROVERSION, raise_exc=False)

View File

@ -177,3 +177,20 @@ class BlazarPlacementClient(object):
}
LOG.error(msg, args)
raise exceptions.ResourceProviderDeletionFailed(uuid=rp_uuid)
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)
host_uuid = host_rp['uuid']
rp_name = "blazar_" + host_name
reservation_rp = self.create_resource_provider(
rp_name, parent_uuid=host_uuid)
return reservation_rp
def delete_reservation_provider(self, host_name):
"""Delete the reservation provider, the child of the given host"""
rp_name = "blazar_" + host_name
rp = self.get_resource_provider(rp_name)
rp_uuid = rp['uuid']
self.delete_resource_provider(rp_uuid)