Support filtering servers in list_servers using arbitrary parameters
Any parameter recognized by Nova API server can now be used, such as 'changes-since', 'deleted', etc., without having to define it in Shade. Change-Id: I4949a0baee08534f1b4822cb26793b2316c87333
This commit is contained in:

committed by
Monty Taylor

parent
d9ce1c1a41
commit
240f5911d2
@@ -2033,7 +2033,8 @@ class OpenStackCloud(_normalize.Normalizer):
|
||||
return self._normalize_secgroups(
|
||||
self._get_and_munchify('security_groups', data))
|
||||
|
||||
def list_servers(self, detailed=False, all_projects=False, bare=False):
|
||||
def list_servers(self, detailed=False, all_projects=False, bare=False,
|
||||
filters=None):
|
||||
"""List all available servers.
|
||||
|
||||
:param detailed: Whether or not to add detailed additional information.
|
||||
@@ -2044,6 +2045,7 @@ class OpenStackCloud(_normalize.Normalizer):
|
||||
server record. Defaults to False, meaning the addresses
|
||||
dict will be populated as needed from neutron. Setting
|
||||
to True implies detailed = False.
|
||||
:param filters: Additional query parameters passed to the API server.
|
||||
|
||||
:returns: A list of server ``munch.Munch``.
|
||||
|
||||
@@ -2063,18 +2065,20 @@ class OpenStackCloud(_normalize.Normalizer):
|
||||
self._servers = self._list_servers(
|
||||
detailed=detailed,
|
||||
all_projects=all_projects,
|
||||
bare=bare)
|
||||
bare=bare,
|
||||
filters=filters)
|
||||
self._servers_time = time.time()
|
||||
finally:
|
||||
self._servers_lock.release()
|
||||
return self._servers
|
||||
|
||||
def _list_servers(self, detailed=False, all_projects=False, bare=False):
|
||||
def _list_servers(self, detailed=False, all_projects=False, bare=False,
|
||||
filters=None):
|
||||
error_msg = "Error fetching server list on {cloud}:{region}:".format(
|
||||
cloud=self.name,
|
||||
region=self.region_name)
|
||||
|
||||
params = {}
|
||||
params = filters or {}
|
||||
if all_projects:
|
||||
params['all_tenants'] = True
|
||||
data = self._compute_client.get(
|
||||
|
@@ -167,6 +167,28 @@ class TestShade(base.RequestsMockTestCase):
|
||||
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_servers_filters(self):
|
||||
'''This test verifies that when list_servers is called with
|
||||
`filters` dict that it passes it to nova.'''
|
||||
self.register_uris([
|
||||
dict(method='GET',
|
||||
uri=self.get_mock_url(
|
||||
'compute', 'public', append=['servers', 'detail'],
|
||||
qs_elements=[
|
||||
'deleted=True',
|
||||
'changes-since=2014-12-03T00:00:00Z'
|
||||
]),
|
||||
complete_qs=True,
|
||||
json={'servers': []}),
|
||||
])
|
||||
|
||||
self.cloud.list_servers(filters={
|
||||
'deleted': True,
|
||||
'changes-since': '2014-12-03T00:00:00Z'
|
||||
})
|
||||
|
||||
self.assert_calls()
|
||||
|
||||
def test_iterate_timeout_bad_wait(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
|
Reference in New Issue
Block a user