summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2019-05-23 03:13:33 +0000
committerGerrit Code Review <review@openstack.org>2019-05-23 03:13:33 +0000
commitbdbd0df064b57c07fa6f54fbd1c2fdbce154d4c0 (patch)
treedadc0818c980dac763fd595658037a9b0bb7a674
parentdfb84228a2748bed82f9b83c1209d5e2e0557bfa (diff)
parentf78a4706d3522e64fd45daaf5e68c017c55c5240 (diff)
downloadpython-novaclient-bdbd0df064b57c07fa6f54fbd1c2fdbce154d4c0.tar.gz
Merge "Allow passing negative values for the locked search_opt in cs.servers.list"
-rw-r--r--novaclient/tests/unit/v2/test_servers.py17
-rw-r--r--novaclient/v2/servers.py9
2 files changed, 24 insertions, 2 deletions
diff --git a/novaclient/tests/unit/v2/test_servers.py b/novaclient/tests/unit/v2/test_servers.py
index 43dbf2c2..5410f1b3 100644
--- a/novaclient/tests/unit/v2/test_servers.py
+++ b/novaclient/tests/unit/v2/test_servers.py
@@ -76,6 +76,15 @@ class ServersTest(utils.FixturedTestCase):
for s in sl:
self.assertIsInstance(s, servers.Server)
+ def test_filter_servers_unlocked(self):
+ # calling the cs.servers.list python binding
+ # will fail before 2.73 microversion.
+ e = self.assertRaises(exceptions.UnsupportedAttribute,
+ self.cs.servers.list,
+ search_opts={'locked': False})
+ self.assertIn("'locked' argument is only allowed since "
+ "microversion 2.73.", six.text_type(e))
+
def test_list_servers_undetailed(self):
sl = self.cs.servers.list(detailed=False)
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
@@ -1726,3 +1735,11 @@ class ServersV273Test(ServersV268Test):
e = self.assertRaises(TypeError,
s.lock, reason='blah')
self.assertIn("unexpected keyword argument 'reason'", six.text_type(e))
+
+ def test_filter_servers_unlocked(self):
+ # support locked=False
+ sl = self.cs.servers.list(search_opts={'locked': False})
+ self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called('GET', '/servers/detail?locked=False')
+ for s in sl:
+ self.assertIsInstance(s, servers.Server)
diff --git a/novaclient/v2/servers.py b/novaclient/v2/servers.py
index 2f14f43d..3f003c93 100644
--- a/novaclient/v2/servers.py
+++ b/novaclient/v2/servers.py
@@ -866,9 +866,14 @@ class ServerManager(base.BootingManagerWithFind):
search_opts = {}
qparams = {}
-
+ # In microversion 2.73 we added ``locked`` filtering option
+ # for listing server details.
+ if ('locked' in search_opts and
+ self.api_version < api_versions.APIVersion('2.73')):
+ raise exceptions.UnsupportedAttribute("locked", "2.73")
for opt, val in search_opts.items():
- if val:
+ # support locked=False from 2.73 microversion
+ if val or (opt == 'locked' and val is False):
if isinstance(val, six.text_type):
val = val.encode('utf-8')
qparams[opt] = val