]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add a DB API to swap two resources between stacks
authorZane Bitter <zbitter@redhat.com>
Mon, 26 Aug 2013 19:11:59 +0000 (21:11 +0200)
committerZane Bitter <zbitter@redhat.com>
Mon, 26 Aug 2013 19:11:59 +0000 (21:11 +0200)
When rolling back a stack update, we will need to swap the current and
previous (backup) resources so that the former moves to the backup stack
while the latter returns to the current stack. This API allows us to effect
the switch using a database transaction (thus avoiding having to create a
*third* stack).

Change-Id: I2b7247e384e3914778179260e198e5ae5c701525

heat/db/api.py
heat/db/sqlalchemy/api.py

index c815a805b489ba67e0b7d861a543ec8058903ce4..aea21db85159a4e45176b491ca80c0e0e0367cbe 100644 (file)
@@ -95,6 +95,10 @@ def resource_create(context, values):
     return IMPL.resource_create(context, values)
 
 
+def resource_exchange_stacks(context, resource_id1, resource_id2):
+    return IMPL.resource_exchange_stacks(context, resource_id1, resource_id2)
+
+
 def resource_get_all_by_stack(context, stack_id):
     return IMPL.resource_get_all_by_stack(context, stack_id)
 
index b72d09c34888cfca33d5dfe82eabff13fab076a6..a3f61786eca51015e2cf7986418f00b28c7720eb 100644 (file)
@@ -144,6 +144,19 @@ def resource_data_set(resource, key, value, redact=False):
     return current
 
 
+def resource_exchange_stacks(context, resource_id1, resource_id2):
+    query = model_query(context, models.Resource)
+    session = query.session
+    session.begin()
+
+    res1 = query.get(resource_id1)
+    res2 = query.get(resource_id2)
+
+    res1.stack, res2.stack = res2.stack, res1.stack
+
+    session.commit()
+
+
 def resource_data_delete(resource, key):
     result = resource_data_get_by_key(resource.context, resource.id, key)
     result.delete()