Merge "Support all_tenants in show and delete"
This commit is contained in:
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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 = [
|
||||
|
@@ -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:
|
||||
|
@@ -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':
|
||||
|
Reference in New Issue
Block a user