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:
Lin Yang
2017-08-21 21:47:21 -07:00
parent a69faf00c4
commit c07b1fe383
5 changed files with 51 additions and 0 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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