This branch implements the openstack-api-hostid blueprint: "Openstack API support for hostId".
This commit is contained in:
@@ -40,4 +40,5 @@
|
||||
<ueno.nachi@lab.ntt.co.jp> <openstack@lab.ntt.co.jp>
|
||||
<vishvananda@gmail.com> <root@mirror.nasanebula.net>
|
||||
<vishvananda@gmail.com> <root@ubuntu>
|
||||
<naveedm9@gmail.com> <naveed.massjouni@rackspace.com>
|
||||
<vishvananda@gmail.com> <vishvananda@yahoo.com>
|
||||
|
||||
@@ -46,7 +46,7 @@ Monty Taylor <mordred@inaugust.com>
|
||||
MORITA Kazutaka <morita.kazutaka@gmail.com>
|
||||
Muneyuki Noguchi <noguchimn@nttdata.co.jp>
|
||||
Nachi Ueno <ueno.nachi@lab.ntt.co.jp>
|
||||
Naveed Massjouni <naveed.massjouni@rackspace.com>
|
||||
Naveed Massjouni <naveedm9@gmail.com>
|
||||
Nirmal Ranganathan <nirmal.ranganathan@rackspace.com>
|
||||
Paul Voccio <paul@openstack.org>
|
||||
Ricardo Carrillo Cruz <emaildericky@gmail.com>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import traceback
|
||||
|
||||
@@ -71,14 +72,16 @@ def _translate_detail_keys(inst):
|
||||
public_ips = utils.get_from_path(inst, 'fixed_ip/floating_ips/address')
|
||||
inst_dict['addresses']['public'] = public_ips
|
||||
|
||||
inst_dict['hostId'] = ''
|
||||
|
||||
# Return the metadata as a dictionary
|
||||
metadata = {}
|
||||
for item in inst['metadata']:
|
||||
metadata[item['key']] = item['value']
|
||||
inst_dict['metadata'] = metadata
|
||||
|
||||
inst_dict['hostId'] = ''
|
||||
if inst['host']:
|
||||
inst_dict['hostId'] = hashlib.sha224(inst['host']).hexdigest()
|
||||
|
||||
return dict(server=inst_dict)
|
||||
|
||||
|
||||
|
||||
@@ -297,11 +297,45 @@ class ServersTest(test.TestCase):
|
||||
i = 0
|
||||
for s in res_dict['servers']:
|
||||
self.assertEqual(s['id'], i)
|
||||
self.assertEqual(s['hostId'], '')
|
||||
self.assertEqual(s['name'], 'server%d' % i)
|
||||
self.assertEqual(s['imageId'], 10)
|
||||
self.assertEqual(s['metadata']['seq'], i)
|
||||
i += 1
|
||||
|
||||
def test_get_all_server_details_with_host(self):
|
||||
'''
|
||||
We want to make sure that if two instances are on the same host, then
|
||||
they return the same hostId. If two instances are on different hosts,
|
||||
they should return different hostId's. In this test, there are 5
|
||||
instances - 2 on one host and 3 on another.
|
||||
'''
|
||||
|
||||
def stub_instance(id, user_id=1):
|
||||
return Instance(id=id, state=0, image_id=10, user_id=user_id,
|
||||
display_name='server%s' % id, host='host%s' % (id % 2))
|
||||
|
||||
def return_servers_with_host(context, user_id=1):
|
||||
return [stub_instance(i) for i in xrange(5)]
|
||||
|
||||
self.stubs.Set(nova.db.api, 'instance_get_all_by_user',
|
||||
return_servers_with_host)
|
||||
|
||||
req = webob.Request.blank('/v1.0/servers/detail')
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
res_dict = json.loads(res.body)
|
||||
|
||||
server_list = res_dict['servers']
|
||||
host_ids = [server_list[0]['hostId'], server_list[1]['hostId']]
|
||||
self.assertTrue(host_ids[0] and host_ids[1])
|
||||
self.assertNotEqual(host_ids[0], host_ids[1])
|
||||
|
||||
for i, s in enumerate(res_dict['servers']):
|
||||
self.assertEqual(s['id'], i)
|
||||
self.assertEqual(s['hostId'], host_ids[i % 2])
|
||||
self.assertEqual(s['name'], 'server%d' % i)
|
||||
self.assertEqual(s['imageId'], 10)
|
||||
|
||||
def test_server_pause(self):
|
||||
FLAGS.allow_admin_api = True
|
||||
body = dict(server=dict(
|
||||
|
||||
Reference in New Issue
Block a user