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')
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)
@ -657,7 +657,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')
@ -667,7 +667,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)

View File

@ -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)

View File

@ -606,6 +606,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={}'
@ -615,25 +617,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()

View File

@ -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)

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('bay', metavar='<bay-uuid>', help="UUID of Bay")
@utils.arg(
'op',
metavar='<op>',
@ -627,7 +628,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)
@ -635,11 +636,12 @@ def do_coe_service_update(cs, args):
metavar='<services>',
nargs='+',
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):
"""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})
@ -648,9 +650,10 @@ def do_coe_service_delete(cs, args):
@utils.arg('service',
metavar='<service>',
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):
"""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)