From bdbde5abb9eb4133314c90fc3ecb0eec5641bc8b Mon Sep 17 00:00:00 2001 From: Vilobh Meshram Date: Mon, 28 Sep 2015 23:36:09 -0700 Subject: [PATCH] Client: Pass bay_uuid to Service Read/Write API Add bay_uuid to Service Read/Write API's. This patch makes changes to the magnum client. Fix to modify API's at controller level has already been proposed. The API's modified at the contoller level are update, delete, get_one, detail, get_all. This change is needed to construct objects from bay. Change-Id: Ic3c924576cce09b051bc2faa965455b8943216b8 Partially-Implements: bp objects-from-bay --- magnumclient/tests/test_shell_args.py | 8 +++--- magnumclient/tests/v1/test_services.py | 39 ++++++++++++++++++-------- magnumclient/tests/v1/test_shell.py | 16 +++++++++-- magnumclient/v1/services.py | 19 +++++++------ magnumclient/v1/shell.py | 9 ++++-- 5 files changed, 61 insertions(+), 30 deletions(-) diff --git a/magnumclient/tests/test_shell_args.py b/magnumclient/tests/test_shell_args.py index d642373b..80bc5a4d 100644 --- a/magnumclient/tests/test_shell_args.py +++ b/magnumclient/tests/test_shell_args.py @@ -628,13 +628,13 @@ class TestCommandLineArgument(utils.TestCase): @mock.patch('magnumclient.v1.services.ServiceManager.delete') def test_coe_service_delete_success(self, mock_delete): - self._test_arg_success('coe-service-delete xxx') + self._test_arg_success('coe-service-delete xxx zzz') self.assertTrue(mock_delete.called) self.assertEqual(1, mock_delete.call_count) @mock.patch('magnumclient.v1.services.ServiceManager.delete') def test_coe_service_delete_multiple_id_success(self, mock_delete): - self._test_arg_success('coe-service-delete xxx xyz') + self._test_arg_success('coe-service-delete xxx xyz zzz') self.assertTrue(mock_delete.called) self.assertEqual(2, mock_delete.call_count) @@ -645,7 +645,7 @@ class TestCommandLineArgument(utils.TestCase): @mock.patch('magnumclient.v1.services.ServiceManager.get') def test_coe_service_show_success(self, mock_show): - self._test_arg_success('coe-service-show xxx') + self._test_arg_success('coe-service-show xxx zzz') self.assertTrue(mock_show.called) @mock.patch('magnumclient.v1.services.ServiceManager.get') @@ -655,7 +655,7 @@ class TestCommandLineArgument(utils.TestCase): @mock.patch('magnumclient.v1.services.ServiceManager.update') def test_coe_service_update_success(self, mock_update): - self._test_arg_success('coe-service-update xxx replace xxx=xxx') + self._test_arg_success('coe-service-update xxx zzz replace xxx=xxx') self.assertTrue(mock_update.called) self.assertEqual(1, mock_update.call_count) diff --git a/magnumclient/tests/v1/test_services.py b/magnumclient/tests/v1/test_services.py index 4afe18d9..5a392154 100644 --- a/magnumclient/tests/v1/test_services.py +++ b/magnumclient/tests/v1/test_services.py @@ -57,7 +57,7 @@ fake_responses = { CREATE_SVC, ), }, - '/v1/services/%s' % SERVICE1['id']: + '/v1/services/%s/%s' % (SERVICE1['id'], SERVICE1['bay_uuid']): { 'GET': ( {}, @@ -72,7 +72,7 @@ fake_responses = { UPDATED_SVC, ), }, - '/v1/services/%s' % SERVICE1['name']: + '/v1/services/%s/%s' % (SERVICE1['name'], SERVICE1['bay_uuid']): { 'GET': ( {}, @@ -106,21 +106,25 @@ class ServiceManagerTest(testtools.TestCase): self.assertThat(services, matchers.HasLength(2)) def test_coe_service_show_by_id(self): - service = self.mgr.get(SERVICE1['id']) + service = self.mgr.get(SERVICE1['id'], SERVICE1['bay_uuid']) expect = [ - ('GET', '/v1/services/%s' % SERVICE1['id'], {}, None) + ('GET', '/v1/services/%s/%s' % (SERVICE1['id'], + SERVICE1['bay_uuid']), {}, None) ] self.assertEqual(expect, self.api.calls) self.assertEqual(SERVICE1['name'], service.name) + self.assertEqual(SERVICE1['bay_uuid'], service.bay_uuid) self.assertEqual(SERVICE1['ip'], service.ip) def test_coe_service_show_by_name(self): - service = self.mgr.get(SERVICE1['name']) + service = self.mgr.get(SERVICE1['name'], SERVICE1['bay_uuid']) expect = [ - ('GET', '/v1/services/%s' % SERVICE1['name'], {}, None) + ('GET', '/v1/services/%s/%s' % (SERVICE1['name'], + SERVICE1['bay_uuid']), {}, None) ] self.assertEqual(expect, self.api.calls) self.assertEqual(SERVICE1['name'], service.name) + self.assertEqual(SERVICE1['bay_uuid'], service.bay_uuid) self.assertEqual(SERVICE1['ip'], service.ip) def test_coe_service_create(self): @@ -141,17 +145,23 @@ class ServiceManagerTest(testtools.TestCase): self.assertEqual([], self.api.calls) def test_coe_service_delete_by_id(self): - service = self.mgr.delete(SERVICE1['id']) + service = self.mgr.delete(SERVICE1['id'], SERVICE1['bay_uuid']) expect = [ - ('DELETE', '/v1/services/%s' % SERVICE1['id'], {}, None), + ('DELETE', '/v1/services/%s/%s' % (SERVICE1['id'], + SERVICE1['bay_uuid']), + {}, + None), ] self.assertEqual(expect, self.api.calls) self.assertIsNone(service) def test_coe_service_delete_by_name(self): - service = self.mgr.delete(SERVICE1['name']) + service = self.mgr.delete(SERVICE1['name'], SERVICE1['bay_uuid']) expect = [ - ('DELETE', '/v1/services/%s' % SERVICE1['name'], {}, None), + ('DELETE', '/v1/services/%s/%s' % (SERVICE1['name'], + SERVICE1['bay_uuid']), + {}, + None), ] self.assertEqual(expect, self.api.calls) self.assertIsNone(service) @@ -160,9 +170,14 @@ class ServiceManagerTest(testtools.TestCase): patch = {'op': 'replace', 'value': NEW_SELECTOR, 'path': '/selector'} - service = self.mgr.update(service_id=SERVICE1['id'], patch=patch) + service = self.mgr.update(service_id=SERVICE1['id'], + bay_uuid=SERVICE1['bay_uuid'], + patch=patch) expect = [ - ('PATCH', '/v1/services/%s' % SERVICE1['id'], {}, patch), + ('PATCH', '/v1/services/%s/%s' % (SERVICE1['id'], + SERVICE1['bay_uuid']), + {}, + patch), ] self.assertEqual(expect, self.api.calls) self.assertEqual(NEW_SELECTOR, service.selector) diff --git a/magnumclient/tests/v1/test_shell.py b/magnumclient/tests/v1/test_shell.py index 2314d320..9b15b6ba 100644 --- a/magnumclient/tests/v1/test_shell.py +++ b/magnumclient/tests/v1/test_shell.py @@ -572,6 +572,8 @@ class ShellTest(base.TestCase): args = mock.MagicMock() service_id = 'id' args.service = service_id + bay_uuid = 'uuid' + args.bay = bay_uuid op = 'replace' args.op = op attributes = 'manifest={}' @@ -581,25 +583,33 @@ class ShellTest(base.TestCase): shell.magnum_utils.args_array_to_patch.return_value = patch shell.do_coe_service_update(client_mock, args) - client_mock.services.update.assert_called_once_with(service_id, patch) + client_mock.services.update.assert_called_once_with(service_id, + bay_uuid, + patch) def test_do_coe_service_delete(self): client_mock = mock.MagicMock() args = mock.MagicMock() service_id = 'id' + bay_uuid = 'uuid' args.services = [service_id] + args.bay = bay_uuid shell.do_coe_service_delete(client_mock, args) - client_mock.services.delete.assert_called_once_with(service_id) + client_mock.services.delete.assert_called_once_with(service_id, + bay_uuid) def test_do_coe_service_show(self): client_mock = mock.MagicMock() args = mock.MagicMock() service_id = 'id' + bay_uuid = 'uuid' args.service = service_id + args.bay = bay_uuid shell.do_coe_service_show(client_mock, args) - client_mock.services.get.assert_called_once_with(service_id) + client_mock.services.get.assert_called_once_with(service_id, + bay_uuid) def test_do_container_create(self): client_mock = mock.MagicMock() diff --git a/magnumclient/v1/services.py b/magnumclient/v1/services.py index a422ac3d..ff45f43e 100644 --- a/magnumclient/v1/services.py +++ b/magnumclient/v1/services.py @@ -28,8 +28,11 @@ class ServiceManager(base.Manager): resource_class = Service @staticmethod - def _path(id=None): - return '/v1/services/%s' % id if id else '/v1/services' + def _path(id=None, bay_uuid=None): + if id and bay_uuid: + return '/v1/services/%s/%s' % (id, bay_uuid) + else: + return '/v1/services' def list(self, marker=None, limit=None, sort_key=None, sort_dir=None, detail=False): @@ -75,9 +78,9 @@ class ServiceManager(base.Manager): return self._list_pagination(self._path(path), "services", limit=limit) - def get(self, service_id): + def get(self, service_id, bay_uuid): try: - return self._list(self._path(service_id))[0] + return self._list(self._path(service_id, bay_uuid))[0] except IndexError: return None @@ -91,8 +94,8 @@ class ServiceManager(base.Manager): "Key must be in %s" % ",".join(CREATION_ATTRIBUTES)) return self._create(self._path(), new) - def delete(self, service_id): - return self._delete(self._path(service_id)) + def delete(self, service_id, bay_uuid): + return self._delete(self._path(service_id, bay_uuid)) - def update(self, service_id, patch): - return self._update(self._path(service_id), patch) + def update(self, service_id, bay_uuid, patch): + return self._update(self._path(service_id, bay_uuid), patch) diff --git a/magnumclient/v1/shell.py b/magnumclient/v1/shell.py index 8eb602f8..5e30eeab 100644 --- a/magnumclient/v1/shell.py +++ b/magnumclient/v1/shell.py @@ -562,6 +562,7 @@ def do_coe_service_create(cs, args): @utils.arg('service', metavar='', help="UUID or name of service") +@utils.arg('bay', metavar='', help="UUID of Bay") @utils.arg( 'op', metavar='', @@ -583,7 +584,7 @@ def do_coe_service_update(cs, args): with open(p['value'], 'r') as f: p['value'] = f.read() - service = cs.services.update(args.service, patch) + service = cs.services.update(args.service, args.bay, patch) _show_coe_service(service) @@ -591,11 +592,12 @@ def do_coe_service_update(cs, args): metavar='', nargs='+', help='ID or name of the (service)s to delete.') +@utils.arg('bay', metavar='', help="UUID of Bay") def do_coe_service_delete(cs, args): """Delete specified coe service(s).""" for service in args.services: try: - cs.services.delete(service) + cs.services.delete(service, args.bay) except Exception as e: print("Delete for service %(service)s failed: %(e)s" % {'service': service, 'e': e}) @@ -604,9 +606,10 @@ def do_coe_service_delete(cs, args): @utils.arg('service', metavar='', help='ID or name of the service to show.') +@utils.arg('bay', metavar='', help="UUID of Bay") def do_coe_service_show(cs, args): """Show details about the given coe service.""" - service = cs.services.get(args.service) + service = cs.services.get(args.service, args.bay) _show_coe_service(service)