Merge "Client: Pass bay_uuid to Service Read/Write API"
This commit is contained in:
commit
6ee3293270
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue