return additional detail about servers
Introduce a new parameter `detailed` to `list_servers`, `search_servers`, and `get_server`. When True, `list_servers` will call `meta.get_hostvars_from_server` for each server. This does not modify the default behavior (`detailed=False`) of these methods. Change-Id: I919fd2ec20515c2b13eee02a75623c6ce6d7d273
This commit is contained in:
parent
631a8e53e9
commit
e941434e4f
@ -1049,8 +1049,8 @@ class OpenStackCloud(object):
|
||||
groups = self.list_security_groups()
|
||||
return _utils._filter_list(groups, name_or_id, filters)
|
||||
|
||||
def search_servers(self, name_or_id=None, filters=None):
|
||||
servers = self.list_servers()
|
||||
def search_servers(self, name_or_id=None, filters=None, detailed=False):
|
||||
servers = self.list_servers(detailed=detailed)
|
||||
return _utils._filter_list(servers, name_or_id, filters)
|
||||
|
||||
def search_images(self, name_or_id=None, filters=None):
|
||||
@ -1256,7 +1256,7 @@ class OpenStackCloud(object):
|
||||
"Unavailable feature: security groups"
|
||||
)
|
||||
|
||||
def list_servers(self):
|
||||
def list_servers(self, detailed=False):
|
||||
"""List all available servers.
|
||||
|
||||
:returns: A list of server dicts.
|
||||
@ -1273,17 +1273,24 @@ class OpenStackCloud(object):
|
||||
# blocking.
|
||||
if self._servers_lock.acquire(len(self._servers) == 0):
|
||||
try:
|
||||
self._servers = self._list_servers()
|
||||
self._servers = self._list_servers(detailed=detailed)
|
||||
self._servers_time = time.time()
|
||||
finally:
|
||||
self._servers_lock.release()
|
||||
return self._servers
|
||||
|
||||
def _list_servers(self):
|
||||
def _list_servers(self, detailed=False):
|
||||
try:
|
||||
return meta.obj_list_to_dict(
|
||||
self.manager.submitTask(_tasks.ServerList())
|
||||
)
|
||||
servers = meta.obj_list_to_dict(
|
||||
self.manager.submitTask(_tasks.ServerList()))
|
||||
|
||||
if detailed:
|
||||
return [
|
||||
meta.get_hostvars_from_server(self, server)
|
||||
for server in servers
|
||||
]
|
||||
else:
|
||||
return servers
|
||||
except Exception as e:
|
||||
raise OpenStackCloudException(
|
||||
"Error fetching server list: %s" % e)
|
||||
@ -1651,7 +1658,7 @@ class OpenStackCloud(object):
|
||||
return _utils._get_entity(
|
||||
self.search_security_groups, name_or_id, filters)
|
||||
|
||||
def get_server(self, name_or_id=None, filters=None):
|
||||
def get_server(self, name_or_id=None, filters=None, detailed=False):
|
||||
"""Get a server by name or ID.
|
||||
|
||||
:param name_or_id: Name or ID of the server.
|
||||
@ -1670,7 +1677,9 @@ class OpenStackCloud(object):
|
||||
found.
|
||||
|
||||
"""
|
||||
return _utils._get_entity(self.search_servers, name_or_id, filters)
|
||||
searchfunc = functools.partial(self.search_servers,
|
||||
detailed=detailed)
|
||||
return _utils._get_entity(searchfunc, name_or_id, filters)
|
||||
|
||||
def get_server_by_id(self, id):
|
||||
return meta.obj_to_dict(
|
||||
|
@ -13,6 +13,7 @@
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
import munch
|
||||
|
||||
import glanceclient
|
||||
from heatclient import client as heat_client
|
||||
@ -398,3 +399,37 @@ class TestShade(base.TestCase):
|
||||
r = self.cloud._get_record('mickey.domain', 'mickey')
|
||||
self.assertIsNotNone(r)
|
||||
self.assertDictEqual(record1, r)
|
||||
|
||||
@mock.patch.object(shade._tasks.ServerList, 'main')
|
||||
def test_list_servers(self, mock_serverlist):
|
||||
'''This test verifies that calling list_servers results in a call
|
||||
to the ServerList task.'''
|
||||
mock_serverlist.return_value = [
|
||||
munch.Munch({'name': 'testserver',
|
||||
'id': '1'})
|
||||
]
|
||||
|
||||
r = self.cloud.list_servers()
|
||||
self.assertEquals(1, len(r))
|
||||
self.assertEquals('testserver', r[0]['name'])
|
||||
|
||||
@mock.patch.object(shade._tasks.ServerList, 'main')
|
||||
@mock.patch('shade.meta.get_hostvars_from_server')
|
||||
def test_list_servers_detailed(self,
|
||||
mock_get_hostvars_from_server,
|
||||
mock_serverlist):
|
||||
'''This test verifies that when list_servers is called with
|
||||
`detailed=True` that it calls `get_hostvars_from_server` for each
|
||||
server in the list.'''
|
||||
mock_serverlist.return_value = ['server1', 'server2']
|
||||
mock_get_hostvars_from_server.side_effect = [
|
||||
{'name': 'server1', 'id': '1'},
|
||||
{'name': 'server2', 'id': '2'},
|
||||
]
|
||||
|
||||
r = self.cloud.list_servers(detailed=True)
|
||||
|
||||
self.assertEquals(2, len(r))
|
||||
self.assertEquals(len(r), mock_get_hostvars_from_server.call_count)
|
||||
self.assertEquals('server1', r[0]['name'])
|
||||
self.assertEquals('server2', r[1]['name'])
|
||||
|
Loading…
Reference in New Issue
Block a user