From 5d69610b94a21ec50f8e3a3bbf5608cbab895842 Mon Sep 17 00:00:00 2001 From: Andriy Popovych Date: Mon, 27 Jul 2015 23:12:43 +0300 Subject: [PATCH] Support for 'node-all' option in label command Explicitly manage all nodes in label commands To prevent messing up user's environment label management commands must require --nodes-all parameter when they want to apply actions to labels on all nodes. Change-Id: I6f11e9311cc7987286eb03c1e3318115f8c76797 Closes-Bug: #1477642 --- fuelclient/commands/node.py | 20 ++++++++++++++++---- fuelclient/tests/v2/unit/cli/test_node.py | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/fuelclient/commands/node.py b/fuelclient/commands/node.py index 28aec0fe..154992ca 100644 --- a/fuelclient/commands/node.py +++ b/fuelclient/commands/node.py @@ -192,17 +192,23 @@ class NodeLabelSet(NodeMixIn, base.BaseCommand): nargs='+', help='List of labels for create or update') - parser.add_argument( + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument( '-n', '--nodes', nargs='+', help='Create or update labels only for specific nodes') + group.add_argument( + '--nodes-all', + action='store_true', + help='Create or update labels for all nodes') return parser def take_action(self, parsed_args): + nodes_ids = None if parsed_args.nodes_all else parsed_args.nodes data = self.client.set_labels_for_nodes( - labels=parsed_args.labels, node_ids=parsed_args.nodes) + labels=parsed_args.labels, node_ids=nodes_ids) msg = "Labels have been updated on nodes: {0} \n".format( ','.join(data)) self.app.stdout.write(msg) @@ -219,17 +225,23 @@ class NodeLabelDelete(NodeMixIn, base.BaseCommand): nargs='+', help='List of labels keys for delete') - parser.add_argument( + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument( '-n', '--nodes', nargs='+', help='Delete labels only for specific nodes') + group.add_argument( + '--nodes-all', + action='store_true', + help='Create or update labels for all nodes') return parser def take_action(self, parsed_args): + nodes_ids = None if parsed_args.nodes_all else parsed_args.nodes data = self.client.delete_labels_for_nodes( - labels_keys=parsed_args.labels_keys, node_ids=parsed_args.nodes) + labels_keys=parsed_args.labels_keys, node_ids=nodes_ids) msg = "Labels have been deleted on nodes: {0} \n".format( ','.join(data)) self.app.stdout.write(msg) diff --git a/fuelclient/tests/v2/unit/cli/test_node.py b/fuelclient/tests/v2/unit/cli/test_node.py index d0f900b9..25ef4f83 100644 --- a/fuelclient/tests/v2/unit/cli/test_node.py +++ b/fuelclient/tests/v2/unit/cli/test_node.py @@ -146,7 +146,7 @@ class TestNodeCommand(test_engine.BaseCLITest): def test_node_label_set_for_all_nodes(self): labels = ['key_1=val_1', 'key_2=val_2'] - args = 'node label set {labels}'.format( + args = 'node label set {labels} --nodes-all'.format( labels=' '.join(labels)) self.exec_command(args) @@ -169,7 +169,7 @@ class TestNodeCommand(test_engine.BaseCLITest): def test_node_label_delete_for_all_nodes(self): labels_keys = ['key_1', 'key_2'] - args = 'node label delete {labels_keys}'.format( + args = 'node label delete {labels_keys} --nodes-all'.format( labels_keys=' '.join(labels_keys)) self.exec_command(args)