summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2011-11-11 19:21:28 +0000
committerGerrit Code Review <review@openstack.org>2011-11-11 19:21:28 +0000
commitb9086d3ad2da90f31001c082d371c8b972ca767b (patch)
treed111ebffbf09f942b6e7030363d3c97c20992254 /nova
parent314539cce77846a7fe9ff7dc52d6291fcc34814e (diff)
parent255a363f78ffd193a4915169d44b85dfeb2c9579 (diff)
downloadnova-b9086d3ad2da90f31001c082d371c8b972ca767b.tar.gz
nova-b9086d3ad2da90f31001c082d371c8b972ca767b.tar.xz
nova-b9086d3ad2da90f31001c082d371c8b972ca767b.zip
Merge "Converting metadata calls to use instance objects"
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/server_metadata.py9
-rw-r--r--nova/compute/api.py29
-rw-r--r--nova/tests/test_compute.py26
3 files changed, 42 insertions, 22 deletions
diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py
index 2d156efbb..4145898c1 100644
--- a/nova/api/openstack/server_metadata.py
+++ b/nova/api/openstack/server_metadata.py
@@ -32,7 +32,8 @@ class Controller(object):
def _get_metadata(self, context, server_id):
try:
- meta = self.compute_api.get_instance_metadata(context, server_id)
+ server = self.compute_api.get(context, server_id)
+ meta = self.compute_api.get_instance_metadata(context, server)
except exception.InstanceNotFound:
msg = _('Server does not exist')
raise exc.HTTPNotFound(explanation=msg)
@@ -106,8 +107,9 @@ class Controller(object):
def _update_instance_metadata(self, context, server_id, metadata,
delete=False):
try:
+ server = self.compute_api.get(context, server_id)
return self.compute_api.update_instance_metadata(context,
- server_id,
+ server,
metadata,
delete)
@@ -146,7 +148,8 @@ class Controller(object):
raise exc.HTTPNotFound(explanation=msg)
try:
- self.compute_api.delete_instance_metadata(context, server_id, id)
+ server = self.compute_api.get(context, server_id)
+ self.compute_api.delete_instance_metadata(context, server, id)
except exception.InstanceNotFound:
msg = _('Server does not exist')
raise exc.HTTPNotFound(explanation=msg)
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 6dcf7bd1d..7da29eeea 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -1232,8 +1232,8 @@ class API(base.Base):
migration_ref = self.db.migration_get_by_instance_and_status(context,
instance['uuid'], 'finished')
if not migration_ref:
- raise exception.MigrationNotFoundByStatus(instance_id=instance_id,
- status='finished')
+ raise exception.MigrationNotFoundByStatus(
+ instance_id=instance['id'], status='finished')
self.update(context,
instance['id'],
@@ -1568,24 +1568,16 @@ 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):
+ def get_instance_metadata(self, context, instance):
"""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)
+ rv = self.db.instance_metadata_get(context, instance['id'])
return dict(rv.iteritems())
- def delete_instance_metadata(self, context, instance_id, key):
+ def delete_instance_metadata(self, context, instance, 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)
+ self.db.instance_metadata_delete(context, instance['id'], key)
- def update_instance_metadata(self, context, instance_id,
+ def update_instance_metadata(self, context, instance,
metadata, delete=False):
"""Updates or creates instance metadata.
@@ -1593,14 +1585,13 @@ class API(base.Base):
`metadata` argument will be deleted.
"""
- instance_id = self._get_native_instance_id(context, instance_id)
-
if delete:
_metadata = metadata
else:
- _metadata = self.get_instance_metadata(context, instance_id)
+ _metadata = self.get_instance_metadata(context, instance)
_metadata.update(metadata)
self._check_metadata_properties_quota(context, _metadata)
- self.db.instance_metadata_update(context, instance_id, _metadata, True)
+ self.db.instance_metadata_update(context, instance['id'],
+ _metadata, True)
return _metadata
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index 2bf726697..d74c96757 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -1632,6 +1632,32 @@ class ComputeAPITestCase(BaseTestCase):
db.instance_destroy(c, instance_id3)
db.instance_destroy(c, instance_id4)
+ def test_instance_metadata(self):
+ """Test searching instances by state"""
+ _context = context.get_admin_context()
+ instance_id = self._create_instance({'metadata': {'key1': 'value1'}})
+ instance = self.compute_api.get(_context, instance_id)
+
+ metadata = self.compute_api.get_instance_metadata(_context, instance)
+ self.assertEqual(metadata, {'key1': 'value1'})
+
+ self.compute_api.update_instance_metadata(_context, instance,
+ {'key2': 'value2'})
+ metadata = self.compute_api.get_instance_metadata(_context, instance)
+ self.assertEqual(metadata, {'key1': 'value1', 'key2': 'value2'})
+
+ new_metadata = {'key2': 'bah', 'key3': 'value3'}
+ self.compute_api.update_instance_metadata(_context, instance,
+ new_metadata, delete=True)
+ metadata = self.compute_api.get_instance_metadata(_context, instance)
+ self.assertEqual(metadata, new_metadata)
+
+ self.compute_api.delete_instance_metadata(_context, instance, 'key2')
+ metadata = self.compute_api.get_instance_metadata(_context, instance)
+ self.assertEqual(metadata, {'key3': 'value3'})
+
+ db.instance_destroy(_context, instance_id)
+
@staticmethod
def _parse_db_block_device_mapping(bdm_ref):
attr_list = ('delete_on_termination', 'device_name', 'no_device',