Add delete composed node command

Add new command 'rsd node delete' to allow user to delete composed
node(s) by specifying node ID.

Change-Id: If0f8bf80ab5a48b2fb85d2082d85973006a28a9b
This commit is contained in:
Lin Yang 2017-08-17 16:37:30 -07:00
parent d043f3be0c
commit fd3fb28906
4 changed files with 45 additions and 2 deletions

View File

@ -39,3 +39,24 @@ class ComposeNode(command.Command):
rsd_client.node.compose(args)
print("Request to compose node %s was accepted"
% parsed_args.name)
class DeleteNode(command.Command):
_description = "Delete a Node"
def get_parser(self, prog_name):
parser = super(DeleteNode, self).get_parser(prog_name)
parser.add_argument(
'node',
nargs='+',
metavar='<node>',
help='ID of the node(s) to delete.')
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)", parsed_args)
rsd_client = self.app.client_manager.rsd
for node in parsed_args.node:
rsd_client.node.delete(node)
print("Node {0} has been deleted.".format(node))

View File

@ -24,12 +24,21 @@ class ClusterManagerTest(testtools.TestCase):
def setUp(self):
super(ClusterManagerTest, self).setUp()
self.client = mock.Mock()
self.client._nodes_path = '/redfish/v1/Nodes'
self.mgr = node.NodeManager(self.client)
def test_compose(self):
def test_compose_node(self):
mock_node_collection = mock.Mock()
self.client.get_node_collection.return_value = mock_node_collection
self.mgr.compose({'Name': 'fake_name'})
self.mgr.client.get_node_collection.assert_called_once()
mock_node_collection.compose_node.assert_called_once_with(
{'Name': 'fake_name'})
def test_delete_node(self):
node_id = '1'
mock_node = mock.Mock()
self.client.get_node.return_value = mock_node
self.mgr.delete(node_id)
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
mock_node.delete_node.assert_called_once()

View File

@ -13,6 +13,8 @@
# under the License.
#
import os
from rsdclient.common import base
@ -20,7 +22,17 @@ class NodeManager(base.Manager):
# resource_class = Node
_resource_name = 'nodes'
def __init__(self, *args, **kwargs):
super(NodeManager, self).__init__(*args, **kwargs)
self.nodes_path = self.client._nodes_path
def _get_node_uri(self, node_id):
return os.path.join(self.nodes_path, node_id)
def compose(self, properites):
# TODO(lin.yang): should return id of new composed node, like
# 'redfish/v1/Nodes/1'
return self.client.get_node_collection().compose_node(properites)
def delete(self, node_id):
self.client.get_node(self._get_node_uri(node_id)).delete_node()

View File

@ -28,7 +28,8 @@ openstack.cli.extension =
rsd = rsdclient.osc.plugin
openstack.rsd.v1 =
rsd_compose = rsdclient.osc.v1.node:ComposeNode
rsd_node_compose = rsdclient.osc.v1.node:ComposeNode
rsd_node_delete = rsdclient.osc.v1.node:DeleteNode
[build_sphinx]
all-files = 1