From 22e46a66a64bc20034956be4c1c20e0284c7cacb Mon Sep 17 00:00:00 2001 From: tengqm Date: Fri, 23 Jan 2015 16:38:10 +0800 Subject: [PATCH] Added node list command and fixed related errors --- senlinclient/v1/shell.py | 127 +++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 52 deletions(-) diff --git a/senlinclient/v1/shell.py b/senlinclient/v1/shell.py index e7d3f986..15526e68 100644 --- a/senlinclient/v1/shell.py +++ b/senlinclient/v1/shell.py @@ -93,9 +93,16 @@ def do_profile_list(sc, args=None): if args.marker: queries['marker'] = args.marker if args.show_deleted: - queries['show_deleted'] = str(bool(args.show_deleted)) + raw = args.show_deleted.lower() + opt = raw in ['true', 'yes', '1', 'ok'] + queries['show_deleted'] = opt + + try: + profiles = sc.list_short(models.Profile, queries) + except exc.HTTPNotFound: + msg = _('No node matching criteria is found') + raise exc.CommandError(msg) - profiles = sc.list_short(models.Profile, queries) if profiles: utils.print_list(profiles, fields, sortby_index=1) @@ -126,7 +133,7 @@ def do_profile_create(sc, args): 'tags': utils.format_parameters(args.tags), } - profile = sc.create(models.Profile, params) + profile, _ = sc.create(models.Profile, params) if profile: print("Profile created: %s" % profile.id) @@ -227,6 +234,10 @@ def do_policy_type_template(sc, args): 'This can be specified multiple times, or once with ' 'parameters separated by a semicolon.'), action='append') +@utils.arg('-k', '--sort-keys', metavar='', + help=_('Name of keys used for sorting the returned events.')) +@utils.arg('-d', '--sort-dir', metavar='', + help=_('Direction for sorting, where DIR can be "asc" or "desc".')) @utils.arg('-l', '--limit', metavar='', help=_('Limit the number of clusters returned.')) @utils.arg('-m', '--marker', metavar='', @@ -237,11 +248,13 @@ def do_cluster_list(sc, args=None): 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} + 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') @@ -480,6 +493,56 @@ def do_cluster_policy_update(sc, args): #### NODES +@utils.arg('-c', '--cluster', default=None, + help=_('ID or name of cluster for nodes to list.')) +@utils.arg('-s', '--show-deleted', default=False, action="store_true", + help=_('Include soft-deleted nodes if any.')) +@utils.arg('-f', '--filters', metavar='', + help=_('Filter parameters to apply on returned nodes. ' + 'This can be specified multiple times, or once with ' + 'parameters separated by a semicolon.'), + action='append') +@utils.arg('-k', '--sort-keys', metavar='', + help=_('Name of keys used for sorting the returned events.')) +@utils.arg('-d', '--sort-dir', metavar='', + help=_('Direction for sorting, where DIR can be "asc" or "desc".')) +@utils.arg('-l', '--limit', metavar='', + help=_('Limit the number of nodes returned.')) +@utils.arg('-m', '--marker', metavar='', + help=_('Only return nodes that appear after the given node ID.')) +def do_node_list(sc, args): + '''Show list of nodes.''' + + fields = ['id', 'name', 'status', 'cluster_id', 'physical_id', + 'created_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 + + try: + nodes = sc.list_short(models.Node, queries) + except exc.HTTPNotFound: + msg = _('No node matching criteria is found') + raise exc.CommandError(msg) + + utils.print_list(nodes, fields, sortby_index=5) + + @utils.arg('-c', '--cluster', metavar='', help=_('Cluster Id for this node.')) @utils.arg('-p', '--profile', metavar='', @@ -503,8 +566,9 @@ def do_node_create(sc, args): 'tags': utils.format_parameters(args.tags), } - sc.create(models.Node, params) - do_node_list(sc) + node, resp = sc.create(models.Node, params) + print(_('Action NODE_CREATE(%s) scheduled for ' + 'node %s') % (resp['action_id'], resp['id'])) @utils.arg('id', metavar='', nargs='+', @@ -523,7 +587,7 @@ def do_node_delete(sc, args): if failure_count == len(args.id): msg = _('Failed to delete any of the specified nodes.') raise exc.CommandError(msg) - do_node_list(sc) + print('Request accepted') @utils.arg('-n', '--name', metavar='', @@ -581,47 +645,6 @@ def do_node_join(sc, args): do_node_list(sc) -@utils.arg('-c', '--cluster', default=None, - help=_('ID or name of cluster for nodes to list.')) -@utils.arg('-s', '--show-deleted', default=False, action="store_true", - help=_('Include soft-deleted nodes if any.')) -@utils.arg('-f', '--filters', metavar='', - help=_('Filter parameters to apply on returned nodes. ' - 'This can be specified multiple times, or once with ' - 'parameters separated by a semicolon.'), - action='append') -@utils.arg('-l', '--limit', metavar='', - help=_('Limit the number of nodes returned.')) -@utils.arg('-m', '--marker', metavar='', - help=_('Only return nodes that appear after the given node ID.')) -@utils.arg('-g', '--global-project', action='store_true', default=False, - help=_('List nodes from all projects. Operation only authorized ' - 'for users who match the policy in policy file.')) -def do_node_list(sc, args): - '''Show list of nodes.''' - fields = ['id', 'name', 'status', 'cluster_id', 'physical_id', - 'created_time'] - if args.global_project: - fields.insert(2, 'project') - - queries = { - 'cluster_id': args.cluster, - 'show_deleted': args.show_deleted, - 'filters': utils.format_parameters(args.filters), - 'limit': args.limit, - 'marker': args.marker, - 'global_project': args.global_project, - } - - try: - nodes = sc.list(models.Node, queries) - except exc.HTTPNotFound: - msg = _('No node matching criteria is found') - raise exc.CommandError(msg) - - utils.print_list(nodes, fields, sortby_index=5) - - @utils.arg('id', metavar='', help=_('Name or ID of the node to show the details for.')) def do_node_show(sc, args):