Merge "Client: Pass bay_uuid to Service Read/Write API"

This commit is contained in:
Jenkins 2015-10-05 15:23:59 +00:00 committed by Gerrit Code Review
commit 6ee3293270
5 changed files with 61 additions and 30 deletions

View File

@ -640,13 +640,13 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.services.ServiceManager.delete') @mock.patch('magnumclient.v1.services.ServiceManager.delete')
def test_coe_service_delete_success(self, mock_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.assertTrue(mock_delete.called)
self.assertEqual(1, mock_delete.call_count) self.assertEqual(1, mock_delete.call_count)
@mock.patch('magnumclient.v1.services.ServiceManager.delete') @mock.patch('magnumclient.v1.services.ServiceManager.delete')
def test_coe_service_delete_multiple_id_success(self, mock_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.assertTrue(mock_delete.called)
self.assertEqual(2, mock_delete.call_count) self.assertEqual(2, mock_delete.call_count)
@ -657,7 +657,7 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.services.ServiceManager.get') @mock.patch('magnumclient.v1.services.ServiceManager.get')
def test_coe_service_show_success(self, mock_show): 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) self.assertTrue(mock_show.called)
@mock.patch('magnumclient.v1.services.ServiceManager.get') @mock.patch('magnumclient.v1.services.ServiceManager.get')
@ -667,7 +667,7 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.services.ServiceManager.update') @mock.patch('magnumclient.v1.services.ServiceManager.update')
def test_coe_service_update_success(self, mock_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.assertTrue(mock_update.called)
self.assertEqual(1, mock_update.call_count) self.assertEqual(1, mock_update.call_count)

View File

@ -57,7 +57,7 @@ fake_responses = {
CREATE_SVC, CREATE_SVC,
), ),
}, },
'/v1/services/%s' % SERVICE1['id']: '/v1/services/%s/%s' % (SERVICE1['id'], SERVICE1['bay_uuid']):
{ {
'GET': ( 'GET': (
{}, {},
@ -72,7 +72,7 @@ fake_responses = {
UPDATED_SVC, UPDATED_SVC,
), ),
}, },
'/v1/services/%s' % SERVICE1['name']: '/v1/services/%s/%s' % (SERVICE1['name'], SERVICE1['bay_uuid']):
{ {
'GET': ( 'GET': (
{}, {},
@ -106,21 +106,25 @@ class ServiceManagerTest(testtools.TestCase):
self.assertThat(services, matchers.HasLength(2)) self.assertThat(services, matchers.HasLength(2))
def test_coe_service_show_by_id(self): def test_coe_service_show_by_id(self):
service = self.mgr.get(SERVICE1['id']) service = self.mgr.get(SERVICE1['id'], SERVICE1['bay_uuid'])
expect = [ 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(expect, self.api.calls)
self.assertEqual(SERVICE1['name'], service.name) self.assertEqual(SERVICE1['name'], service.name)
self.assertEqual(SERVICE1['bay_uuid'], service.bay_uuid)
self.assertEqual(SERVICE1['ip'], service.ip) self.assertEqual(SERVICE1['ip'], service.ip)
def test_coe_service_show_by_name(self): def test_coe_service_show_by_name(self):
service = self.mgr.get(SERVICE1['name']) service = self.mgr.get(SERVICE1['name'], SERVICE1['bay_uuid'])
expect = [ 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(expect, self.api.calls)
self.assertEqual(SERVICE1['name'], service.name) self.assertEqual(SERVICE1['name'], service.name)
self.assertEqual(SERVICE1['bay_uuid'], service.bay_uuid)
self.assertEqual(SERVICE1['ip'], service.ip) self.assertEqual(SERVICE1['ip'], service.ip)
def test_coe_service_create(self): def test_coe_service_create(self):
@ -141,17 +145,23 @@ class ServiceManagerTest(testtools.TestCase):
self.assertEqual([], self.api.calls) self.assertEqual([], self.api.calls)
def test_coe_service_delete_by_id(self): def test_coe_service_delete_by_id(self):
service = self.mgr.delete(SERVICE1['id']) service = self.mgr.delete(SERVICE1['id'], SERVICE1['bay_uuid'])
expect = [ 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.assertEqual(expect, self.api.calls)
self.assertIsNone(service) self.assertIsNone(service)
def test_coe_service_delete_by_name(self): def test_coe_service_delete_by_name(self):
service = self.mgr.delete(SERVICE1['name']) service = self.mgr.delete(SERVICE1['name'], SERVICE1['bay_uuid'])
expect = [ 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.assertEqual(expect, self.api.calls)
self.assertIsNone(service) self.assertIsNone(service)
@ -160,9 +170,14 @@ class ServiceManagerTest(testtools.TestCase):
patch = {'op': 'replace', patch = {'op': 'replace',
'value': NEW_SELECTOR, 'value': NEW_SELECTOR,
'path': '/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 = [ 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(expect, self.api.calls)
self.assertEqual(NEW_SELECTOR, service.selector) self.assertEqual(NEW_SELECTOR, service.selector)

View File

@ -606,6 +606,8 @@ class ShellTest(base.TestCase):
args = mock.MagicMock() args = mock.MagicMock()
service_id = 'id' service_id = 'id'
args.service = service_id args.service = service_id
bay_uuid = 'uuid'
args.bay = bay_uuid
op = 'replace' op = 'replace'
args.op = op args.op = op
attributes = 'manifest={}' attributes = 'manifest={}'
@ -615,25 +617,33 @@ class ShellTest(base.TestCase):
shell.magnum_utils.args_array_to_patch.return_value = patch shell.magnum_utils.args_array_to_patch.return_value = patch
shell.do_coe_service_update(client_mock, args) 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): def test_do_coe_service_delete(self):
client_mock = mock.MagicMock() client_mock = mock.MagicMock()
args = mock.MagicMock() args = mock.MagicMock()
service_id = 'id' service_id = 'id'
bay_uuid = 'uuid'
args.services = [service_id] args.services = [service_id]
args.bay = bay_uuid
shell.do_coe_service_delete(client_mock, args) 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): def test_do_coe_service_show(self):
client_mock = mock.MagicMock() client_mock = mock.MagicMock()
args = mock.MagicMock() args = mock.MagicMock()
service_id = 'id' service_id = 'id'
bay_uuid = 'uuid'
args.service = service_id args.service = service_id
args.bay = bay_uuid
shell.do_coe_service_show(client_mock, args) 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): def test_do_container_create(self):
client_mock = mock.MagicMock() client_mock = mock.MagicMock()

View File

@ -28,8 +28,11 @@ class ServiceManager(base.Manager):
resource_class = Service resource_class = Service
@staticmethod @staticmethod
def _path(id=None): def _path(id=None, bay_uuid=None):
return '/v1/services/%s' % id if id else '/v1/services' 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, def list(self, marker=None, limit=None, sort_key=None,
sort_dir=None, detail=False): sort_dir=None, detail=False):
@ -75,9 +78,9 @@ class ServiceManager(base.Manager):
return self._list_pagination(self._path(path), "services", return self._list_pagination(self._path(path), "services",
limit=limit) limit=limit)
def get(self, service_id): def get(self, service_id, bay_uuid):
try: try:
return self._list(self._path(service_id))[0] return self._list(self._path(service_id, bay_uuid))[0]
except IndexError: except IndexError:
return None return None
@ -91,8 +94,8 @@ class ServiceManager(base.Manager):
"Key must be in %s" % ",".join(CREATION_ATTRIBUTES)) "Key must be in %s" % ",".join(CREATION_ATTRIBUTES))
return self._create(self._path(), new) return self._create(self._path(), new)
def delete(self, service_id): def delete(self, service_id, bay_uuid):
return self._delete(self._path(service_id)) return self._delete(self._path(service_id, bay_uuid))
def update(self, service_id, patch): def update(self, service_id, bay_uuid, patch):
return self._update(self._path(service_id), patch) return self._update(self._path(service_id, bay_uuid), patch)

View File

@ -606,6 +606,7 @@ def do_coe_service_create(cs, args):
@utils.arg('service', metavar='<service>', help="UUID or name of service") @utils.arg('service', metavar='<service>', help="UUID or name of service")
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
@utils.arg( @utils.arg(
'op', 'op',
metavar='<op>', metavar='<op>',
@ -627,7 +628,7 @@ def do_coe_service_update(cs, args):
with open(p['value'], 'r') as f: with open(p['value'], 'r') as f:
p['value'] = f.read() p['value'] = f.read()
service = cs.services.update(args.service, patch) service = cs.services.update(args.service, args.bay, patch)
_show_coe_service(service) _show_coe_service(service)
@ -635,11 +636,12 @@ def do_coe_service_update(cs, args):
metavar='<services>', metavar='<services>',
nargs='+', nargs='+',
help='ID or name of the (service)s to delete.') help='ID or name of the (service)s to delete.')
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
def do_coe_service_delete(cs, args): def do_coe_service_delete(cs, args):
"""Delete specified coe service(s).""" """Delete specified coe service(s)."""
for service in args.services: for service in args.services:
try: try:
cs.services.delete(service) cs.services.delete(service, args.bay)
except Exception as e: except Exception as e:
print("Delete for service %(service)s failed: %(e)s" % print("Delete for service %(service)s failed: %(e)s" %
{'service': service, 'e': e}) {'service': service, 'e': e})
@ -648,9 +650,10 @@ def do_coe_service_delete(cs, args):
@utils.arg('service', @utils.arg('service',
metavar='<service>', metavar='<service>',
help='ID or name of the service to show.') help='ID or name of the service to show.')
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
def do_coe_service_show(cs, args): def do_coe_service_show(cs, args):
"""Show details about the given coe service.""" """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) _show_coe_service(service)