Add list composed node command
Add new command 'rsd node list' to list all composed node with brief info, like: $ openstack rsd node list +----------+------+--------------------------------------+-------------+ | Identity | Name | UUID | Description | +----------+------+--------------------------------------+-------------+ | 2 | Test | fd011520-86a2-11e7-b4d4-5d323196a3e4 | None | +----------+------+--------------------------------------+-------------+ Change-Id: Ie6ef9aebf45c5f2bb1e0d93c86b5f9a70a600b13
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import prettytable
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
|
||||||
@@ -41,3 +42,12 @@ def extract_attr(redfish_obj):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def print_dict(obj_list, field_names):
|
||||||
|
pt = prettytable.PrettyTable(field_names=field_names)
|
||||||
|
|
||||||
|
for element in obj_list:
|
||||||
|
pt.add_row([element.get(i.lower(), None) for i in field_names])
|
||||||
|
|
||||||
|
return pt
|
||||||
|
|||||||
@@ -80,3 +80,13 @@ class ShowNode(command.Command):
|
|||||||
rsd_client = self.app.client_manager.rsd
|
rsd_client = self.app.client_manager.rsd
|
||||||
node_detail = rsd_client.node.show(parsed_args.node)
|
node_detail = rsd_client.node.show(parsed_args.node)
|
||||||
print("{0}".format(json.dumps(node_detail, indent=2)))
|
print("{0}".format(json.dumps(node_detail, indent=2)))
|
||||||
|
|
||||||
|
|
||||||
|
class ListNode(command.Command):
|
||||||
|
_description = "List all composed nodes"
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
self.log.debug("take_action(%s)", parsed_args)
|
||||||
|
rsd_client = self.app.client_manager.rsd
|
||||||
|
node_list = rsd_client.node.list()
|
||||||
|
print(node_list)
|
||||||
|
|||||||
@@ -51,3 +51,25 @@ class NodeTest(testtools.TestCase):
|
|||||||
result = self.mgr.show('1')
|
result = self.mgr.show('1')
|
||||||
expected = fakes.FAKE_NODE_PYTHON_DICT
|
expected = fakes.FAKE_NODE_PYTHON_DICT
|
||||||
self.assertEqual(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
|
def test_list_node(self):
|
||||||
|
mock_node_collection = mock.Mock()
|
||||||
|
mock_node_collection.members_identities = ('/redfish/v1/Nodes/1',)
|
||||||
|
self.mgr.client.get_node_collection.return_value = mock_node_collection
|
||||||
|
self.mgr.client.get_node.return_value = fakes.FakeNode()
|
||||||
|
|
||||||
|
expected = '+----------+------+--------------------------------------'\
|
||||||
|
'+------------------+\n'\
|
||||||
|
'| Identity | Name | UUID '\
|
||||||
|
'| Description |\n'\
|
||||||
|
'+----------+------+--------------------------------------'\
|
||||||
|
'+------------------+\n'\
|
||||||
|
'| 1 | Test | fd011520-86a2-11e7-b4d4-5d323196a3e4 '\
|
||||||
|
'| Node for testing |\n'\
|
||||||
|
'+----------+------+--------------------------------------'\
|
||||||
|
'+------------------+'
|
||||||
|
|
||||||
|
result = self.mgr.list()
|
||||||
|
self.mgr.client.get_node_collection.assert_called_once()
|
||||||
|
self.mgr.client.get_node.assert_called_once_with('/redfish/v1/Nodes/1')
|
||||||
|
self.assertEqual(str(result), expected)
|
||||||
|
|||||||
@@ -40,3 +40,11 @@ class NodeManager(base.Manager):
|
|||||||
def show(self, node_id):
|
def show(self, node_id):
|
||||||
node = self.client.get_node(self._get_node_uri(node_id))
|
node = self.client.get_node(self._get_node_uri(node_id))
|
||||||
return utils.extract_attr(node)
|
return utils.extract_attr(node)
|
||||||
|
|
||||||
|
def list(self):
|
||||||
|
node_collection = self.client.get_node_collection()
|
||||||
|
nodes = [utils.extract_attr(self.client.get_node(node_uri))
|
||||||
|
for node_uri in node_collection.members_identities]
|
||||||
|
node_info_table = utils.print_dict(
|
||||||
|
nodes, ["Identity", "Name", "UUID", "Description"])
|
||||||
|
return node_info_table
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ openstack.rsd.v1 =
|
|||||||
rsd_node_compose = rsdclient.osc.v1.node:ComposeNode
|
rsd_node_compose = rsdclient.osc.v1.node:ComposeNode
|
||||||
rsd_node_delete = rsdclient.osc.v1.node:DeleteNode
|
rsd_node_delete = rsdclient.osc.v1.node:DeleteNode
|
||||||
rsd_node_show = rsdclient.osc.v1.node:ShowNode
|
rsd_node_show = rsdclient.osc.v1.node:ShowNode
|
||||||
|
rsd_node_list = rsdclient.osc.v1.node:ListNode
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
all-files = 1
|
all-files = 1
|
||||||
|
|||||||
Reference in New Issue
Block a user