summaryrefslogtreecommitdiffstats
path: root/nova/db
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-05-28 23:12:07 -0400
committerDan Prince <dan.prince@rackspace.com>2011-05-28 23:12:07 -0400
commitccf522daaca0d4136c072c1905dd9fbaa1dfb2e9 (patch)
tree7218ac1f7502c6c46445595f81676b73ae36e372 /nova/db
parenta9278909cbb6d5ea9283231dbd6efc67b812abff (diff)
downloadnova-ccf522daaca0d4136c072c1905dd9fbaa1dfb2e9.tar.gz
nova-ccf522daaca0d4136c072c1905dd9fbaa1dfb2e9.tar.xz
nova-ccf522daaca0d4136c072c1905dd9fbaa1dfb2e9.zip
Fixes to the SQLAlchmeny API such that metadata is saved on an instance_update.
Added integration test to test that instance metadata is updated on a rebuild.
Diffstat (limited to 'nova/db')
-rw-r--r--nova/db/sqlalchemy/api.py22
1 files changed, 13 insertions, 9 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index e4dda5c12..1a7cae6e9 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -771,6 +771,15 @@ def fixed_ip_update(context, address, values):
###################
+def _metadata_refs(metadata_dict):
+ metadata_refs = []
+ if metadata_dict:
+ for k, v in metadata_dict.iteritems():
+ metadata_ref = models.InstanceMetadata()
+ metadata_ref['key'] = k
+ metadata_ref['value'] = v
+ metadata_refs.append(metadata_ref)
+ return metadata_refs
@require_context
@@ -780,15 +789,7 @@ def instance_create(context, values):
context - request context object
values - dict containing column values.
"""
- metadata = values.get('metadata')
- metadata_refs = []
- if metadata:
- for k, v in metadata.iteritems():
- metadata_ref = models.InstanceMetadata()
- metadata_ref['key'] = k
- metadata_ref['value'] = v
- metadata_refs.append(metadata_ref)
- values['metadata'] = metadata_refs
+ values['metadata'] = _metadata_refs(values.get('metadata'))
instance_ref = models.Instance()
instance_ref.update(values)
@@ -1010,6 +1011,9 @@ def instance_set_state(context, instance_id, state, description=None):
@require_context
def instance_update(context, instance_id, values):
session = get_session()
+ metadata = values.get('metadata')
+ if metadata:
+ values['metadata'] = _metadata_refs(values.get('metadata'))
with session.begin():
instance_ref = instance_get(context, instance_id, session=session)
instance_ref.update(values)