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
|
||||
# under the License.
|
||||
|
||||
import prettytable
|
||||
import six
|
||||
|
||||
|
||||
@@ -41,3 +42,12 @@ def extract_attr(redfish_obj):
|
||||
return None
|
||||
|
||||
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
|
||||
node_detail = rsd_client.node.show(parsed_args.node)
|
||||
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')
|
||||
expected = fakes.FAKE_NODE_PYTHON_DICT
|
||||
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):
|
||||
node = self.client.get_node(self._get_node_uri(node_id))
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user