diff options
| author | Kan <kansks@cn.ibm.com> | 2016-01-06 03:33:10 +0000 |
|---|---|---|
| committer | Kan <kansks@cn.ibm.com> | 2016-02-03 05:18:35 +0000 |
| commit | 4d14aced921de0b27fcb01677ecfa55a58b8a76c (patch) | |
| tree | 071a7af05defa56c80464b4c552620591dd92a8b | |
| parent | fe422e57abd001c3a1ccd6add4cf4a3d45ef927e (diff) | |
| download | python-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.py | 16 | ||||
| -rw-r--r-- | ironicclient/tests/unit/v1/test_node_shell.py | 21 | ||||
| -rw-r--r-- | ironicclient/v1/node.py | 7 | ||||
| -rw-r--r-- | ironicclient/v1/node_shell.py | 7 | ||||
| -rw-r--r-- | releasenotes/notes/list-nodes-by-driver-b1e1e1018077089b.yaml | 3 |
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. |
