From 040837834f7e7c1ba34c8f31212413283615ac5d Mon Sep 17 00:00:00 2001 From: tengqm Date: Mon, 26 Jan 2015 22:45:16 +0800 Subject: [PATCH] Fixed object listing logic The previous endless listing behavior was actually caused by the ignorance of 'marker' key. This patch fixes that. --- senlinclient/v1/client.py | 4 +- senlinclient/v1/models.py | 4 ++ senlinclient/v1/shell.py | 100 +++++++++++++++----------------------- 3 files changed, 44 insertions(+), 64 deletions(-) diff --git a/senlinclient/v1/client.py b/senlinclient/v1/client.py index 56bacc5c..22e789a9 100644 --- a/senlinclient/v1/client.py +++ b/senlinclient/v1/client.py @@ -55,9 +55,9 @@ class Client(object): print(self.auth.authorize(xport)) return xport - def list(self, cls, options=None): + def list(self, cls, **options): try: - return cls.list(self.session, path_args=None, **options) + return cls.list(self.session, **options) except exc.HttpException as ex: client_exc.parse_exception(ex) diff --git a/senlinclient/v1/models.py b/senlinclient/v1/models.py index 5a6b95de..d550cbd5 100644 --- a/senlinclient/v1/models.py +++ b/senlinclient/v1/models.py @@ -287,8 +287,10 @@ class Node(resource.Resource): physical_id = resource.prop('physical_id') cluster_id = resource.prop('cluster_id') profile_id = resource.prop('profile_id') + profile_name = resource.prop('profile_name') index = resource.prop('index', type=int) role = resource.prop('role') + init_time = resource.prop('init_time') created_time = resource.prop('created_time') updated_time = resource.prop('updated_time') deleted_time = resource.prop('deleted_time') @@ -304,8 +306,10 @@ class Node(resource.Resource): 'physical_id': self.physical_id, 'cluster_id': self.cluster_id, 'profile_id': self.profile_id, + 'profile_name': self.profile_name, 'index': self.index, 'role': self.role, + 'init_time': self.init_time, 'created_time': self.created_time, 'updated_time': self.updated_time, 'deleted_time': self.deleted_time, diff --git a/senlinclient/v1/shell.py b/senlinclient/v1/shell.py index c87660fb..cb076740 100644 --- a/senlinclient/v1/shell.py +++ b/senlinclient/v1/shell.py @@ -78,7 +78,7 @@ def do_profile_type_template(sc, args): #### PROFILES -@utils.arg('-s', '--show-deleted', default=False, action="store_true", +@utils.arg('-d', '--show-deleted', default=False, action="store_true", help=_('Include soft-deleted profiles if any.')) @utils.arg('-l', '--limit', metavar='', help=_('Limit the number of profiles returned.')) @@ -87,17 +87,13 @@ def do_profile_type_template(sc, args): def do_profile_list(sc, args=None): '''List profiles that meet the criteria.''' fields = ['id', 'name', 'type', 'permission', 'created_time'] - queries = {'show_deleted': False} - if args.limit: - queries['limit'] = args.limit - if args.marker: - queries['marker'] = args.marker - if args.show_deleted: - raw = args.show_deleted.lower() - opt = raw in ['true', 'yes', '1', 'ok'] - queries['show_deleted'] = opt + queries = { + 'show_deleted': args.show_deleted, + 'limit': args.limit, + 'marker': args.marker, + } - profiles = sc.list_short(models.Profile, queries) + profiles = sc.list(models.Profile, **queries) utils.print_list(profiles, fields, sortby_index=1) @@ -239,20 +235,18 @@ def do_policy_type_template(sc, args): 'ID.')) def do_cluster_list(sc, args=None): '''List the user's clusters.''' - queries = {} fields = ['id', 'cluster_name', 'status', 'created_time'] - if args: - queries = { - 'limit': args.limit, - 'marker': args.marker, - 'filters': utils.format_parameters(args.filters), - 'show_deleted': args.show_deleted, - 'show_nested': args.show_nested - } - if args.show_nested: - fields.append('parent') + queries = { + 'limit': args.limit, + 'marker': args.marker, + 'filters': utils.format_parameters(args.filters), + 'show_deleted': args.show_deleted, + 'show_nested': args.show_nested + } + if args.show_nested: + fields.append('parent') - clusters = sc.list(models.Cluster, queries) + clusters = sc.list(models.Cluster, **queries) utils.print_list(clusters, fields, sortby_index=3) @@ -510,27 +504,20 @@ def do_node_list(sc, args): '''Show list of nodes.''' fields = ['id', 'name', 'status', 'cluster_id', 'physical_id', - 'created_time'] + 'profile_name', 'init_time', 'created_time', 'updated_time', + 'deleted_time'] - queries = {'show_deleted': False} - if args.cluster: - queries['cluster_id'] = args.cluster - if args.filters: - queries['filters'] = utils.format_parameters(args.filters) - if args.sort_keys: - queries['sort_keys'] = args.sort_keys - if args.sort_dir: - queries['sort_dir'] = args.sort_dir - if args.limit: - queries['limit'] = args.limit - if args.marker: - queries['marker'] = args.marker - if args.show_deleted: - raw = args.show_deleted.lower() - opt = raw in ['true', 'yes', '1', 'ok'] - queries['show_deleted'] = opt + queries = { + 'show_deleted': args.show_deleted, + 'cluster_id': args.cluster, + 'filters': utils.format_parameters(args.filters), + 'sort_keys': args.sort_keys, + 'sort_dir': args.sort_dir, + 'limit': args.limit, + 'marker': args.marker, + } - nodes = sc.list_short(models.Node, queries) + nodes = sc.list(models.Node, **queries) utils.print_list(nodes, fields, sortby_index=5) @@ -743,27 +730,16 @@ def do_action_list(sc, args): def _short_target(obj): return obj.target[:8] + ' ...' - queries = {'show_deleted': False} + queries = { + 'show_deleted': args.show_deleted, + 'filters': utils.format_parameters(args.filters), + 'sort_keys': args.sort_keys, + 'sort_dir': args.sort_dir, + 'limit': args.limit, + 'marker': args.marker, + } - if args.filters: - queries['filters'] = utils.format_parameters(args.filters) - if args.sort_keys: - queries['sort_keys'] = args.sort_keys - if args.sort_dir: - queries['sort_dir'] = args.sort_dir - if args.limit: - queries['limit'] = args.limit - if args.marker: - queries['marker'] = args.marker - if args.show_deleted: - raw = args.show_deleted.lower() - opt = raw in ['true', 'yes', '1', 'ok'] - queries['show_deleted'] = opt - - try: - actions = sc.list_short(models.Action, queries) - except exc.HTTPNotFound as ex: - raise exc.CommandError(str(ex)) + actions = sc.list(models.Action, **queries) fields = ['id', 'name', 'action', 'status', 'target', 'depends_on', 'depended_by']