summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Washenberger <mark.washenberger@rackspace.com>2011-10-24 15:18:06 -0400
committerMark Washenberger <mark.washenberger@rackspace.com>2011-10-24 15:18:06 -0400
commit86b10119ca3649411c50ac3700a934efe40a09e5 (patch)
tree3770433c992d689d67eb8ddbfad2a8a0e5152ac1
parent022afb9b0686f9d7af128f1a19927867cf08a180 (diff)
downloadnova-86b10119ca3649411c50ac3700a934efe40a09e5.tar.gz
nova-86b10119ca3649411c50ac3700a934efe40a09e5.tar.xz
nova-86b10119ca3649411c50ac3700a934efe40a09e5.zip
Server metadata must support server uuids.
Change-Id: I933e8aebce94867e4d23c13d978032b0ae99b896
-rw-r--r--nova/compute/api.py10
-rw-r--r--nova/tests/api/openstack/test_server_metadata.py12
2 files changed, 20 insertions, 2 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 2305c09ab..57e0d9edd 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -1528,13 +1528,21 @@ class API(base.Base):
floating_address=address,
fixed_address=fixed_ip_addrs[0])
+ def _get_native_instance_id(self, context, instance_id):
+ """If an instance id is a UUID, convert it to a native ID."""
+ if utils.is_uuid_like(instance_id):
+ instance_id = self.get(context, instance_id)['id']
+ return instance_id
+
def get_instance_metadata(self, context, instance_id):
"""Get all metadata associated with an instance."""
+ instance_id = self._get_native_instance_id(context, instance_id)
rv = self.db.instance_metadata_get(context, instance_id)
return dict(rv.iteritems())
def delete_instance_metadata(self, context, instance_id, key):
"""Delete the given metadata item from an instance."""
+ instance_id = self._get_native_instance_id(context, instance_id)
self.db.instance_metadata_delete(context, instance_id, key)
def update_instance_metadata(self, context, instance_id,
@@ -1545,6 +1553,8 @@ class API(base.Base):
`metadata` argument will be deleted.
"""
+ instance_id = self._get_native_instance_id(context, instance_id)
+
if delete:
_metadata = metadata
else:
diff --git a/nova/tests/api/openstack/test_server_metadata.py b/nova/tests/api/openstack/test_server_metadata.py
index bcacc2388..109a73dc3 100644
--- a/nova/tests/api/openstack/test_server_metadata.py
+++ b/nova/tests/api/openstack/test_server_metadata.py
@@ -39,6 +39,9 @@ def return_create_instance_metadata(context, server_id, metadata, delete):
def return_server_metadata(context, server_id):
+ if not isinstance(server_id, int):
+ msg = 'id %s must be int in return server metadata' % server_id
+ raise Exception(msg)
return stub_server_metadata()
@@ -70,6 +73,10 @@ def return_server(context, server_id):
return {'id': server_id}
+def return_server_by_uuid(context, server_uuid):
+ return {'id': 1}
+
+
def return_server_nonexistant(context, server_id):
raise exception.InstanceNotFound()
@@ -80,13 +87,14 @@ class ServerMetaDataTest(test.TestCase):
super(ServerMetaDataTest, self).setUp()
fakes.stub_out_key_pair_funcs(self.stubs)
self.stubs.Set(nova.db.api, 'instance_get', return_server)
- self.stubs.Set(nova.db, 'instance_get_by_uuid', return_server)
+ self.stubs.Set(nova.db.api, 'instance_get_by_uuid',
+ return_server_by_uuid)
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_server_metadata)
self.controller = server_metadata.Controller()
- self.uuid = utils.gen_uuid()
+ self.uuid = str(utils.gen_uuid())
self.url = '/v1.1/fake/servers/%s/metadata' % self.uuid
def test_index(self):