summaryrefslogtreecommitdiffstats
path: root/nova/compute
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-08-08 16:38:14 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-08-08 16:38:14 -0400
commit61cf3721ce94d7f2458e4e469cbee3333f954588 (patch)
tree378e9f184ce5150e9fbe5041c535a0b00bde210e /nova/compute
parent047f6e0351c21ff2caff903731e61f10ac38e59d (diff)
cleaning up instance metadata api code
Diffstat (limited to 'nova/compute')
-rw-r--r--nova/compute/api.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index d2c08678b..646290e57 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -1175,11 +1175,20 @@ class API(base.Base):
"""Delete the given metadata item from an instance."""
self.db.instance_metadata_delete(context, instance_id, key)
- def update_or_create_instance_metadata(self, context, instance_id,
- metadata):
- """Updates or creates instance metadata."""
- combined_metadata = self.get_instance_metadata(context, instance_id)
- combined_metadata.update(metadata)
- self._check_metadata_properties_quota(context, combined_metadata)
- self.db.instance_metadata_update_or_create(context, instance_id,
- metadata)
+ def update_instance_metadata(self, context, instance_id,
+ metadata, delete=False):
+ """Updates or creates instance metadata.
+
+ If delete is True, metadata items that are not specified in the
+ `metadata` argument will be deleted.
+
+ """
+ if not delete:
+ _metadata = self.get_instance_metadata(context, instance_id)
+ _metadata.update(metadata)
+ else:
+ _metadata = metadata
+
+ self._check_metadata_properties_quota(context, _metadata)
+
+ self.db.instance_metadata_update(context, instance_id, _metadata, True)