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

This commit is contained in:
Jenkins 2015-10-05 15:23:58 +00:00 committed by Gerrit Code Review
commit 1b4049ceb8
5 changed files with 53 additions and 31 deletions

View File

@ -484,13 +484,13 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.pods.PodManager.delete')
def test_pod_delete_success(self, mock_delete):
self._test_arg_success('pod-delete xxx')
self._test_arg_success('pod-delete xxx zzz')
self.assertTrue(mock_delete.called)
self.assertEqual(1, mock_delete.call_count)
@mock.patch('magnumclient.v1.pods.PodManager.delete')
def test_pod_delete_multiple_id_success(self, mock_delete):
self._test_arg_success('pod-delete xxx xyz')
self._test_arg_success('pod-delete xxx xyz zzz')
self.assertTrue(mock_delete.called)
self.assertEqual(2, mock_delete.call_count)
@ -501,7 +501,7 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.pods.PodManager.update')
def test_pod_update_success(self, mock_update):
self._test_arg_success('pod-update xxx replace xxx=xxx')
self._test_arg_success('pod-update xxx zzz replace xxx=xxx')
self.assertTrue(mock_update.called)
self.assertEqual(1, mock_update.call_count)
@ -512,7 +512,7 @@ class TestCommandLineArgument(utils.TestCase):
@mock.patch('magnumclient.v1.pods.PodManager.get')
def test_pod_show_success(self, mock_show):
self._test_arg_success('pod-show xxx')
self._test_arg_success('pod-show xxx zzz')
self.assertTrue(mock_show.called)
@mock.patch('magnumclient.v1.pods.PodManager.get')

View File

@ -57,7 +57,7 @@ fake_responses = {
CREATE_POD,
),
},
'/v1/pods/%s' % POD1['id']:
'/v1/pods/%s/%s' % (POD1['id'], POD1['bay_uuid']):
{
'GET': (
{},
@ -72,7 +72,7 @@ fake_responses = {
UPDATED_POD,
),
},
'/v1/pods/%s' % POD1['name']:
'/v1/pods/%s/%s' % (POD1['name'], POD1['bay_uuid']):
{
'GET': (
{},
@ -106,21 +106,25 @@ class PodManagerTest(testtools.TestCase):
self.assertThat(pods, matchers.HasLength(2))
def test_pod_show_by_id(self):
pod = self.mgr.get(POD1['id'])
pod = self.mgr.get(POD1['id'], POD1['bay_uuid'])
expect = [
('GET', '/v1/pods/%s' % POD1['id'], {}, None)
('GET', '/v1/pods/%s/%s' % (POD1['id'],
POD1['bay_uuid']), {}, None)
]
self.assertEqual(expect, self.api.calls)
self.assertEqual(POD1['name'], pod.name)
self.assertEqual(POD1['bay_uuid'], pod.bay_uuid)
self.assertEqual(POD1['desc'], pod.desc)
def test_pod_show_by_name(self):
pod = self.mgr.get(POD1['name'])
pod = self.mgr.get(POD1['name'], POD1['bay_uuid'])
expect = [
('GET', '/v1/pods/%s' % POD1['name'], {}, None)
('GET', '/v1/pods/%s/%s' % (POD1['name'],
POD1['bay_uuid']), {}, None)
]
self.assertEqual(expect, self.api.calls)
self.assertEqual(POD1['name'], pod.name)
self.assertEqual(POD1['bay_uuid'], pod.bay_uuid)
self.assertEqual(POD1['desc'], pod.desc)
def test_pod_create(self):
@ -141,17 +145,19 @@ class PodManagerTest(testtools.TestCase):
self.assertEqual([], self.api.calls)
def test_pod_delete_by_id(self):
pod = self.mgr.delete(POD1['id'])
pod = self.mgr.delete(POD1['id'], POD1['bay_uuid'])
expect = [
('DELETE', '/v1/pods/%s' % POD1['id'], {}, None),
('DELETE', '/v1/pods/%s/%s' % (POD1['id'],
POD1['bay_uuid']), {}, None),
]
self.assertEqual(expect, self.api.calls)
self.assertIsNone(pod)
def test_pod_delete_by_name(self):
pod = self.mgr.delete(POD1['name'])
pod = self.mgr.delete(POD1['name'], POD1['bay_uuid'])
expect = [
('DELETE', '/v1/pods/%s' % POD1['name'], {}, None),
('DELETE', '/v1/pods/%s/%s' % (POD1['name'],
POD1['bay_uuid']), {}, None),
]
self.assertEqual(expect, self.api.calls)
self.assertIsNone(pod)
@ -160,9 +166,12 @@ class PodManagerTest(testtools.TestCase):
patch = {'op': 'replace',
'value': NEW_DESCR,
'path': '/description'}
pod = self.mgr.update(id=POD1['id'], patch=patch)
pod = self.mgr.update(id=POD1['id'],
bay_uuid=POD1['bay_uuid'],
patch=patch)
expect = [
('PATCH', '/v1/pods/%s' % POD1['id'], {}, patch),
('PATCH', '/v1/pods/%s/%s' % (POD1['id'],
POD1['bay_uuid']), {}, patch),
]
self.assertEqual(expect, self.api.calls)
self.assertEqual(NEW_DESCR, pod.description)

View File

@ -435,6 +435,8 @@ class ShellTest(base.TestCase):
args = mock.MagicMock()
pod_id = 'id'
args.pod = pod_id
bay_uuid = 'uuid'
args.bay = bay_uuid
op = 'add'
args.op = op
attributes = "labels={'name': 'value'}"
@ -444,25 +446,30 @@ class ShellTest(base.TestCase):
shell.magnum_utils.args_array_to_patch.return_value = patch
shell.do_pod_update(client_mock, args)
client_mock.pods.update.assert_called_once_with(pod_id, patch)
client_mock.pods.update.assert_called_once_with(pod_id,
bay_uuid,
patch)
def test_do_pod_delete(self):
client_mock = mock.MagicMock()
args = mock.MagicMock()
pod_id = 'id'
bay_uuid = 'uuid'
args.pods = [pod_id]
args.bay = bay_uuid
shell.do_pod_delete(client_mock, args)
client_mock.pods.delete.assert_called_once_with(pod_id)
client_mock.pods.delete.assert_called_once_with(pod_id, bay_uuid)
def test_do_pod_show(self):
client_mock = mock.MagicMock()
args = mock.MagicMock()
pod_id = 'id'
args.pod = pod_id
bay_uuid = 'uuid'
args.bay = bay_uuid
shell.do_pod_show(client_mock, args)
client_mock.pods.get.assert_called_once_with(pod_id)
client_mock.pods.get.assert_called_once_with(pod_id, bay_uuid)
def test_do_rc_list(self):
client_mock = mock.MagicMock()

View File

@ -29,8 +29,11 @@ class PodManager(base.Manager):
resource_class = Pod
@staticmethod
def _path(id=None):
return '/v1/pods/%s' % id if id else '/v1/pods'
def _path(id=None, bay_uuid=None):
if id and bay_uuid:
return '/v1/pods/%s/%s' % (id, bay_uuid)
else:
return '/v1/pods'
def list(self, limit=None, marker=None, sort_key=None,
sort_dir=None, detail=False):
@ -76,9 +79,9 @@ class PodManager(base.Manager):
return self._list_pagination(self._path(path), "pods",
limit=limit)
def get(self, id):
def get(self, id, bay_uuid):
try:
return self._list(self._path(id))[0]
return self._list(self._path(id, bay_uuid))[0]
except IndexError:
return None
@ -92,8 +95,8 @@ class PodManager(base.Manager):
"Key must be in %s" % ",".join(CREATION_ATTRIBUTES))
return self._create(self._path(), new)
def delete(self, id):
return self._delete(self._path(id))
def delete(self, id, bay_uuid):
return self._delete(self._path(id, bay_uuid))
def update(self, id, patch):
return self._update(self._path(id), patch)
def update(self, id, bay_uuid, patch):
return self._update(self._path(id, bay_uuid), patch)

View File

@ -412,6 +412,7 @@ def do_pod_create(cs, args):
@utils.arg('pod', metavar='<pod-id>', help="UUID or name of pod")
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
@utils.arg(
'op',
metavar='<op>',
@ -433,7 +434,7 @@ def do_pod_update(cs, args):
with open(p['value'], 'r') as f:
p['value'] = f.read()
pod = cs.pods.update(args.pod, patch)
pod = cs.pods.update(args.pod, args.bay, patch)
_show_pod(pod)
@ -441,11 +442,12 @@ def do_pod_update(cs, args):
metavar='<pods>',
nargs='+',
help='ID or name of the (pod)s to delete.')
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
def do_pod_delete(cs, args):
"""Delete specified pod."""
for pod in args.pods:
try:
cs.pods.delete(pod)
cs.pods.delete(pod, args.bay)
except Exception as e:
print("Delete for pod %(pod)s failed: %(e)s" %
{'pod': pod, 'e': e})
@ -455,9 +457,10 @@ def do_pod_delete(cs, args):
@utils.arg('pod',
metavar='<pod>',
help='ID or name of the pod to show.')
@utils.arg('bay', metavar='<bay-uuid>', help="UUID of Bay")
def do_pod_show(cs, args):
"""Show details about the given pod."""
pod = cs.pods.get(args.pod)
pod = cs.pods.get(args.pod, args.bay)
_show_pod(pod)