Merge "Support all_tenants in show and delete"

This commit is contained in:
Jenkins
2017-07-28 03:46:56 +00:00
committed by Gerrit Code Review
5 changed files with 70 additions and 13 deletions

View File

@@ -120,7 +120,11 @@ class Manager(object):
return object_list
def _list(self, url, response_key=None, obj_class=None, body=None):
def _list(self, url, response_key=None, obj_class=None, body=None,
qparams=None):
if qparams:
url = "%s?%s" % (url, urlparse.urlencode(qparams))
resp, body = self.api.json_request('GET', url)
if obj_class is None:

View File

@@ -181,12 +181,20 @@ class ShowContainer(command.ShowOne):
'container',
metavar='<container>',
help='ID or name of the container to show.')
parser.add_argument(
'--all-tenants',
action="store_true",
default=False,
help='Show container(s) in all tenant by name.')
return parser
def take_action(self, parsed_args):
client = _get_client(self, parsed_args)
container = parsed_args.container
container = client.containers.get(container)
opts = {}
opts['id'] = parsed_args.container
opts['all_tenants'] = parsed_args.all_tenants
opts = zun_utils.remove_null_parms(**opts)
container = client.containers.get(**opts)
columns = _container_columns(container)
return columns, utils.get_item_properties(container, columns)
@@ -259,15 +267,24 @@ class DeleteContainer(command.Command):
'--force',
action='store_true',
help='Force delete the container.')
parser.add_argument(
'--all-tenants',
action="store_true",
default=False,
help='Delete container(s) in all tenant by name.')
return parser
def take_action(self, parsed_args):
client = _get_client(self, parsed_args)
containers = parsed_args.container
force = getattr(parsed_args, 'force')
for container in containers:
opts = {}
opts['id'] = container
opts['force'] = parsed_args.force
opts['all_tenants'] = parsed_args.all_tenants
opts = zun_utils.remove_null_parms(**opts)
try:
client.containers.delete(container, force)
client.containers.delete(**opts)
print(_('Request to delete container %s has been accepted.')
% container)
except Exception as e:

View File

@@ -56,6 +56,7 @@ del CREATE_CONTAINER1['uuid']
force_delete1 = False
force_delete2 = True
all_tenants = True
signal = "SIGTERM"
name = "new-name"
timeout = 10
@@ -155,6 +156,13 @@ fake_responses = {
None,
),
},
'/v1/containers/%s?all_tenants=%s' % (CONTAINER1['id'], all_tenants):
{
'DELETE': (
{},
None,
),
},
'/v1/containers/%s/stop?timeout=10' % CONTAINER1['id']:
{
'POST': (
@@ -411,7 +419,7 @@ class ContainerManagerTest(testtools.TestCase):
self.assertTrue(containers)
def test_containers_delete(self):
containers = self.mgr.delete(CONTAINER1['id'], force_delete1)
containers = self.mgr.delete(CONTAINER1['id'], force=force_delete1)
expect = [
('DELETE', '/v1/containers/%s?force=%s' % (CONTAINER1['id'],
force_delete1),
@@ -421,7 +429,7 @@ class ContainerManagerTest(testtools.TestCase):
self.assertIsNone(containers)
def test_containers_delete_with_force(self):
containers = self.mgr.delete(CONTAINER1['id'], force_delete2)
containers = self.mgr.delete(CONTAINER1['id'], force=force_delete2)
expect = [
('DELETE', '/v1/containers/%s?force=%s' % (CONTAINER1['id'],
force_delete2),
@@ -430,6 +438,16 @@ class ContainerManagerTest(testtools.TestCase):
self.assertEqual(expect, self.api.calls)
self.assertIsNone(containers)
def test_containers_delete_with_all_tenants(self):
containers = self.mgr.delete(CONTAINER1['id'], all_tenants=all_tenants)
expect = [
('DELETE', '/v1/containers/%s?all_tenants=%s' % (CONTAINER1['id'],
all_tenants),
{}, None)
]
self.assertEqual(expect, self.api.calls)
self.assertIsNone(containers)
def test_containers_stop(self):
containers = self.mgr.stop(CONTAINER1['id'], timeout)
expect = [

View File

@@ -90,9 +90,10 @@ class ContainerManager(base.Manager):
"containers",
limit=limit)
def get(self, id):
def get(self, id, **kwargs):
try:
return self._list(self._path(id))[0]
return self._list(self._path(id),
qparams=kwargs)[0]
except IndexError:
return None
@@ -106,9 +107,9 @@ class ContainerManager(base.Manager):
"Key must be in %s" % ','.join(CREATION_ATTRIBUTES))
return self._create(self._path(), new)
def delete(self, id, force):
def delete(self, id, **kwargs):
return self._delete(self._path(id),
qparams={'force': force})
qparams=kwargs)
def _action(self, id, action, method='POST', qparams=None, **kwargs):
if qparams:

View File

@@ -176,11 +176,20 @@ def do_list(cs, args):
@utils.arg('-f', '--force',
action='store_true',
help='Force delete the container.')
@utils.arg('--all-tenants',
action="store_true",
default=False,
help='Delete container(s) in all tenant by name.')
def do_delete(cs, args):
"""Delete specified containers."""
for container in args.containers:
opts = {}
opts['id'] = container
opts['force'] = args.force
opts['all_tenants'] = args.all_tenants
opts = zun_utils.remove_null_parms(**opts)
try:
cs.containers.delete(container, args.force)
cs.containers.delete(**opts)
print("Request to delete container %s has been accepted." %
container)
except Exception as e:
@@ -199,9 +208,17 @@ def do_delete(cs, args):
help='Print representation of the container.'
'The choices of the output format is json,table,yaml.'
'Defaults to table.')
@utils.arg('--all-tenants',
action="store_true",
default=False,
help='Show container(s) in all tenant by name.')
def do_show(cs, args):
"""Show details of a container."""
container = cs.containers.get(args.container)
opts = {}
opts['id'] = args.container
opts['all_tenants'] = args.all_tenants
opts = zun_utils.remove_null_parms(**opts)
container = cs.containers.get(**opts)
if args.format == 'json':
print(json.dumps(container._info, indent=4, sort_keys=True))
elif args.format == 'yaml':