From e3deaebe9d60d8fdec09cf2507048d650165ea70 Mon Sep 17 00:00:00 2001 From: dixiaoli Date: Sun, 28 Feb 2016 01:53:17 +0800 Subject: [PATCH] Add OpenstackClient plugin for cluster members del This change implements the "openstack cluster members del" command Based on the existing senlin command: senlin cluster-node-del Change-Id: I5b1e9437f4e08c928a402598549338f2480300b1 Blueprint: senlin-support-python-openstackclient --- senlinclient/osc/v1/cluster.py | 28 +++++++++++++++++++ .../tests/unit/osc/v1/test_cluster.py | 26 +++++++++++++++++ setup.cfg | 1 + 3 files changed, 55 insertions(+) diff --git a/senlinclient/osc/v1/cluster.py b/senlinclient/osc/v1/cluster.py index 88af609..a41eaec 100644 --- a/senlinclient/osc/v1/cluster.py +++ b/senlinclient/osc/v1/cluster.py @@ -687,3 +687,31 @@ class ClusterNodeAdd(command.Command): node_ids = parsed_args.nodes.split(',') resp = senlin_client.cluster_add_nodes(parsed_args.cluster, node_ids) print('Request accepted by action: %s' % resp['action']) + + +class ClusterNodeDel(command.Command): + """Delete specified nodes from cluster.""" + log = logging.getLogger(__name__ + ".ClusterNodeDel") + + def get_parser(self, prog_name): + parser = super(ClusterNodeDel, self).get_parser(prog_name) + parser.add_argument( + '--nodes', + metavar='', + required=True, + help=_('Name or ID of nodes to be deleted; multiple nodes can be ' + 'separated with ","') + ) + parser.add_argument( + 'cluster', + metavar='', + help=_('Name or ID of cluster to operate on') + ) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + senlin_client = self.app.client_manager.clustering + node_ids = parsed_args.nodes.split(',') + resp = senlin_client.cluster_del_nodes(parsed_args.cluster, node_ids) + print('Request accepted by action: %s' % resp['action']) diff --git a/senlinclient/tests/unit/osc/v1/test_cluster.py b/senlinclient/tests/unit/osc/v1/test_cluster.py index b5fd1b4..9f6cf64 100644 --- a/senlinclient/tests/unit/osc/v1/test_cluster.py +++ b/senlinclient/tests/unit/osc/v1/test_cluster.py @@ -710,3 +710,29 @@ class TestClusterNodeAdd(TestCluster): self.mock_client.cluster_add_nodes.assert_called_with( 'my_cluster', ['node1', 'node2']) + + +class TestClusterNodeDel(TestCluster): + response = {"action": "8bb476c3-0f4c-44ee-9f64-c7b0260814de"} + + def setUp(self): + super(TestClusterNodeDel, self).setUp() + self.cmd = osc_cluster.ClusterNodeDel(self.app, None) + self.mock_client.cluster_del_nodes = mock.Mock( + return_value=self.response) + + def test_cluster_node_delete(self): + arglist = ['--nodes', 'node1', 'my_cluster'] + parsed_args = self.check_parser(self.cmd, arglist, []) + self.cmd.take_action(parsed_args) + self.mock_client.cluster_del_nodes.assert_called_with( + 'my_cluster', + ['node1']) + + def test_cluster_node_delete_multi(self): + arglist = ['--nodes', 'node1,node2', 'my_cluster'] + parsed_args = self.check_parser(self.cmd, arglist, []) + self.cmd.take_action(parsed_args) + self.mock_client.cluster_del_nodes.assert_called_with( + 'my_cluster', + ['node1', 'node2']) diff --git a/setup.cfg b/setup.cfg index 238af5b..71b679d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,6 +42,7 @@ openstack.clustering.v1 = cluster_update = senlinclient.osc.v1.cluster:UpdateCluster cluster_members_list = senlinclient.osc.v1.cluster:ClusterNodeList cluster_members_add = senlinclient.osc.v1.cluster:ClusterNodeAdd + cluster_members_del = senlinclient.osc.v1.cluster:ClusterNodeDel cluster_node_create = senlinclient.osc.v1.node:CreateNode cluster_node_delete = senlinclient.osc.v1.node:DeleteNode cluster_node_list = senlinclient.osc.v1.node:ListNode