diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-11-11 19:21:28 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-11-11 19:21:28 +0000 |
| commit | b9086d3ad2da90f31001c082d371c8b972ca767b (patch) | |
| tree | d111ebffbf09f942b6e7030363d3c97c20992254 /nova | |
| parent | 314539cce77846a7fe9ff7dc52d6291fcc34814e (diff) | |
| parent | 255a363f78ffd193a4915169d44b85dfeb2c9579 (diff) | |
| download | nova-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.py | 9 | ||||
| -rw-r--r-- | nova/compute/api.py | 29 | ||||
| -rw-r--r-- | nova/tests/test_compute.py | 26 |
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', |
