summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKan <kansks@cn.ibm.com>2016-01-06 03:33:10 +0000
committerKan <kansks@cn.ibm.com>2016-02-03 05:18:35 +0000
commit4d14aced921de0b27fcb01677ecfa55a58b8a76c (patch)
tree071a7af05defa56c80464b4c552620591dd92a8b
parentfe422e57abd001c3a1ccd6add4cf4a3d45ef927e (diff)
downloadpython-ironicclient-4d14aced921de0b27fcb01677ecfa55a58b8a76c.tar.gz
Add CLI to list nodes using the same driver.
Add CLI function to list nodes using the same driver. Change-Id: I3ee3dd4fd52931a4eebb6ff037d83eb95e4fb1ba Partial-Bug: #1530626 Depends-On: I998d6a0a6da44487d5ba90dafd417d81d1c7e504
-rw-r--r--ironicclient/tests/unit/v1/test_node.py16
-rw-r--r--ironicclient/tests/unit/v1/test_node_shell.py21
-rw-r--r--ironicclient/v1/node.py7
-rw-r--r--ironicclient/v1/node_shell.py7
-rw-r--r--releasenotes/notes/list-nodes-by-driver-b1e1e1018077089b.yaml3
5 files changed, 52 insertions, 2 deletions
diff --git a/ironicclient/tests/unit/v1/test_node.py b/ironicclient/tests/unit/v1/test_node.py
index 2c09f9d..6562756 100644
--- a/ironicclient/tests/unit/v1/test_node.py
+++ b/ironicclient/tests/unit/v1/test_node.py
@@ -160,6 +160,13 @@ fake_responses = {
{"nodes": [NODE1]},
)
},
+ '/v1/nodes/?driver=fake':
+ {
+ 'GET': (
+ {},
+ {"nodes": [NODE1]},
+ )
+ },
'/v1/nodes/detail?instance_uuid=%s' % NODE2['instance_uuid']:
{
'GET': (
@@ -521,6 +528,15 @@ class NodeManagerTest(testtools.TestCase):
self.assertRaises(KeyError, self.mgr.list,
provision_state="test")
+ def test_node_list_driver(self):
+ nodes = self.mgr.list(driver="fake")
+ expect = [
+ ('GET', '/v1/nodes/?driver=fake', {}, None),
+ ]
+ self.assertEqual(expect, self.api.calls)
+ self.assertThat(nodes, HasLength(1))
+ self.assertEqual(NODE1['uuid'], getattr(nodes[0], 'uuid'))
+
def test_node_list_no_maintenance(self):
nodes = self.mgr.list(maintenance=False)
expect = [
diff --git a/ironicclient/tests/unit/v1/test_node_shell.py b/ironicclient/tests/unit/v1/test_node_shell.py
index 288f667..1d142e8 100644
--- a/ironicclient/tests/unit/v1/test_node_shell.py
+++ b/ironicclient/tests/unit/v1/test_node_shell.py
@@ -530,7 +530,7 @@ class NodeShellTest(utils.BaseTestCase):
def _get_client_mock_args(self, node=None, associated=None,
maintenance=None, marker=None, limit=None,
sort_dir=None, sort_key=None, detail=False,
- fields=None, provision_state=None):
+ fields=None, provision_state=None, driver=None):
args = mock.MagicMock()
args.node = node
args.associated = associated
@@ -542,6 +542,7 @@ class NodeShellTest(utils.BaseTestCase):
args.sort_key = sort_key
args.detail = detail
args.fields = fields
+ args.driver = driver
return args
@@ -579,6 +580,24 @@ class NodeShellTest(utils.BaseTestCase):
provision_state='wait call-back',
detail=True)
+ def test_do_node_list_driver(self):
+ client_mock = mock.MagicMock()
+ args = self._get_client_mock_args(driver='fake',
+ detail=False)
+
+ n_shell.do_node_list(client_mock, args)
+ client_mock.node.list.assert_called_once_with(driver='fake',
+ detail=False)
+
+ def test_do_node_list_detail_driver(self):
+ client_mock = mock.MagicMock()
+ args = self._get_client_mock_args(driver='fake',
+ detail=True)
+
+ n_shell.do_node_list(client_mock, args)
+ client_mock.node.list.assert_called_once_with(driver='fake',
+ detail=True)
+
def test_do_node_list_sort_key(self):
client_mock = mock.MagicMock()
args = self._get_client_mock_args(sort_key='created_at',
diff --git a/ironicclient/v1/node.py b/ironicclient/v1/node.py
index 0c13c4a..408a9c2 100644
--- a/ironicclient/v1/node.py
+++ b/ironicclient/v1/node.py
@@ -42,7 +42,7 @@ class NodeManager(base.CreateManager):
def list(self, associated=None, maintenance=None, marker=None, limit=None,
detail=False, sort_key=None, sort_dir=None, fields=None,
- provision_state=None):
+ provision_state=None, driver=None):
"""Retrieve a list of nodes.
:param associated: Optional. Either a Boolean or a string
@@ -80,6 +80,9 @@ class NodeManager(base.CreateManager):
of the resource to be returned. Can not be used
when 'detail' is set.
+ :param driver: Optional. String value to get only nodes using that
+ driver.
+
:returns: A list of nodes.
"""
@@ -98,6 +101,8 @@ class NodeManager(base.CreateManager):
filters.append('maintenance=%s' % maintenance)
if provision_state is not None:
filters.append('provision_state=%s' % provision_state)
+ if driver is not None:
+ filters.append('driver=%s' % driver)
path = ''
if detail:
diff --git a/ironicclient/v1/node_shell.py b/ironicclient/v1/node_shell.py
index 16b4aa3..1939eb6 100644
--- a/ironicclient/v1/node_shell.py
+++ b/ironicclient/v1/node_shell.py
@@ -98,6 +98,10 @@ def do_node_show(cc, args):
metavar='<provision-state>',
help="List nodes in specified provision state.")
@cliutils.arg(
+ '--driver',
+ metavar='<driver>',
+ help="List nodes using specified driver.")
+@cliutils.arg(
'--detail',
dest='detail',
action='store_true',
@@ -124,6 +128,9 @@ def do_node_list(cc, args):
if args.provision_state is not None:
params['provision_state'] = args.provision_state
+ if args.driver is not None:
+ params['driver'] = args.driver
+
if args.detail:
fields = res_fields.NODE_DETAILED_RESOURCE.fields
field_labels = res_fields.NODE_DETAILED_RESOURCE.labels
diff --git a/releasenotes/notes/list-nodes-by-driver-b1e1e1018077089b.yaml b/releasenotes/notes/list-nodes-by-driver-b1e1e1018077089b.yaml
new file mode 100644
index 0000000..6768b8c
--- /dev/null
+++ b/releasenotes/notes/list-nodes-by-driver-b1e1e1018077089b.yaml
@@ -0,0 +1,3 @@
+---
+features:
+ - Add support for filtering nodes using the same driver in list command.