]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Change to per-tenant stacks.
authorIan Main <imain@redhat.com>
Wed, 25 Jul 2012 19:02:53 +0000 (12:02 -0700)
committerIan Main <imain@redhat.com>
Wed, 25 Jul 2012 19:02:53 +0000 (12:02 -0700)
This patch switches from per-user stacks to per-tenant stacks.

Change-Id: Ia7ac65033560bcff1db83d4d673945029e06ea6a
Signed-off-by: Ian Main <imain@redhat.com>
heat/db/api.py
heat/db/sqlalchemy/api.py
heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py [new file with mode: 0644]
heat/db/sqlalchemy/models.py
heat/engine/manager.py
heat/engine/parser.py
heat/tests/test_stacks.py

index 62616c08b9b75c07a799c1a21ba498d9fda2cf73..d67bd2e2603a650b7d648f7200eee3d0414a7bdc 100644 (file)
@@ -99,8 +99,8 @@ def stack_get_all(context):
     return IMPL.stack_get_all(context)
 
 
-def stack_get_by_user(context):
-    return IMPL.stack_get_by_user(context)
+def stack_get_by_tenant(context):
+    return IMPL.stack_get_by_tenant(context)
 
 
 def stack_create(context, values):
@@ -131,8 +131,8 @@ def event_get_all(context):
     return IMPL.event_get_all(context)
 
 
-def event_get_all_by_user(context):
-    return IMPL.event_get_all_by_user(context)
+def event_get_all_by_tenant(context):
+    return IMPL.event_get_all_by_tenant(context)
 
 
 def event_get_all_by_stack(context, stack_id):
index fd20af1ef309f09bfc85f289ebfa35dd2f7d35f9..7365dfd51ae41996fb33833e2b6e5e248a738f22 100644 (file)
@@ -79,7 +79,7 @@ def resource_get_by_physical_resource_id(context, physical_resource_id):
               .filter_by(nova_instance=physical_resource_id)
               .first())
     if (result is not None and context is not None and
-        result.stack.username != context.username):
+        result.stack.tenant != context.tenant):
         return None
     return result
 
@@ -119,7 +119,7 @@ def stack_get_by_name(context, stack_name, owner_id=None):
         result = model_query(context, models.Stack).\
                             filter_by(name=stack_name).first()
     if (result is not None and context is not None and
-        result.username != context.username):
+        result.tenant != context.tenant):
         return None
     return result
 
@@ -128,7 +128,7 @@ def stack_get(context, stack_id):
     result = model_query(context, models.Stack).get(stack_id)
 
     if (result is not None and context is not None and
-        result.username != context.username):
+        result.tenant != context.tenant):
         return None
 
     return result
@@ -140,10 +140,10 @@ def stack_get_all(context):
     return results
 
 
-def stack_get_by_user(context):
+def stack_get_by_tenant(context):
     results = model_query(context, models.Stack).\
                          filter_by(owner_id=None).\
-                         filter_by(username=context.username).all()
+                         filter_by(tenant=context.tenant).all()
     return results
 
 
@@ -224,9 +224,9 @@ def event_get_all(context):
     return results
 
 
-def event_get_all_by_user(context):
+def event_get_all_by_tenant(context):
     stacks = model_query(context, models.Stack).\
-                          filter_by(username=context.username).all()
+                          filter_by(tenant=context.tenant).all()
     results = []
     for stack in stacks:
         results.extend(model_query(context, models.Event).
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py b/heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py
new file mode 100644 (file)
index 0000000..70721c4
--- /dev/null
@@ -0,0 +1,20 @@
+from sqlalchemy import *
+from migrate import *
+
+
+def upgrade(migrate_engine):
+    meta = MetaData(bind=migrate_engine)
+
+    stack = Table('stack', meta, autoload=True)
+
+    Column('tenant', String(length=256, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None,
+                            _warn_on_bytestring=False)).create(stack)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    stack = Table('stack', meta, autoload=True)
+    stack.c.tenant.drop()
index 63ec8ad95842ac37cc23783592e4875d25dc4bae..4e70bdf4879a28454f2771b58a579f2c18bd273e 100644 (file)
@@ -151,6 +151,7 @@ class Stack(BASE, HeatBase):
     raw_template = relationship(RawTemplate,
         backref=backref('stack'))
     username = Column(String)
+    tenant = Column(String)
     status = Column('status', String)
     status_reason = Column('status_reason', String)
     parameters = Column('parameters', Json)
index 239bf6793cab4a444d962ae8dac085eaa5279071..e86ee632e21e8bcf54575d6d546a3ca6253706c8 100644 (file)
@@ -77,7 +77,7 @@ class EngineManager(manager.Manager):
             else:
                 raise AttributeError('Unknown stack name')
         else:
-            stacks = db_api.stack_get_by_user(context) or []
+            stacks = db_api.stack_get_by_tenant(context) or []
 
         def format_stack_detail(s):
             stack = parser.Stack.load(context, s.id)
@@ -253,7 +253,7 @@ class EngineManager(manager.Manager):
 
             events = db_api.event_get_all_by_stack(context, st.id)
         else:
-            events = db_api.event_get_all_by_user(context)
+            events = db_api.event_get_all_by_tenant(context)
 
         return {'events': [api.format_event(e) for e in events]}
 
index b54d9693a937e12499f77e180c388b911a5d374a..283d2afc5ec4cc43c700690124038cf6f0b45667 100644 (file)
@@ -308,6 +308,7 @@ class Stack(object):
             'owner_id': owner and owner.id,
             'user_creds_id': new_creds.id,
             'username': self.context.username,
+            'tenant': self.context.tenant,
             'status': self.state,
             'status_reason': self.state_description,
             'timeout': self.timeout_mins,
index ec813cb73739dc7e5ae76daae6ed0278743c8ea5..fa35fa45874ed4944fced0c45247572fa6b744dd 100644 (file)
@@ -39,10 +39,13 @@ templates_dir = os.path.normpath(os.path.join(tests_dir,
                                               'templates'))
 
 
-def create_context(mocks, user='stacks_test_user', ctx=None):
+def create_context(mocks, user='stacks_test_user',
+                   tenant='test_admin', ctx=None):
     ctx = ctx or context.get_admin_context()
     mocks.StubOutWithMock(ctx, 'username')
+    mocks.StubOutWithMock(ctx, 'tenant')
     ctx.username = user
+    ctx.tenant = tenant
     mocks.StubOutWithMock(auth, 'authenticate')
     return ctx
 
@@ -100,7 +103,7 @@ class stackCreateTest(unittest.TestCase):
         self.assertNotEqual(stack.resources['WebServer'].ipaddress, '0.0.0.0')
 
     def test_wordpress_single_instance_stack_delete(self):
-        ctx = create_context(self.m, 'test_delete_user')
+        ctx = create_context(self.m, tenant='test_delete_tenant')
         stack = get_wordpress_stack('test_stack', ctx)
         setup_mocks(self.m, stack)
         self.m.ReplayAll()
@@ -127,7 +130,8 @@ class stackManagerTest(unittest.TestCase):
     def setUpClass(cls):
         m = mox.Mox()
         cls.username = 'stack_manager_test_user'
-        ctx = create_context(m, cls.username)
+        cls.tenant = 'stack_manager_test_tenant'
+        ctx = create_context(m, cls.username, cls.tenant)
         cls.stack_name = 'manager_test_stack'
 
         stack = get_wordpress_stack(cls.stack_name, ctx)
@@ -144,7 +148,7 @@ class stackManagerTest(unittest.TestCase):
     def tearDownClass(cls):
         cls = cls
         m = mox.Mox()
-        create_context(m, cls.username, ctx=cls.stack.context)
+        create_context(m, cls.username, cls.tenant, ctx=cls.stack.context)
         setup_mocks(m, cls.stack)
         m.ReplayAll()
 
@@ -154,7 +158,7 @@ class stackManagerTest(unittest.TestCase):
 
     def setUp(self):
         self.m = mox.Mox()
-        self.ctx = create_context(self.m, self.username)
+        self.ctx = create_context(self.m, self.username, self.tenant)
         auth.authenticate(self.ctx).AndReturn(True)
         setup_mocks(self.m, self.stack)
         self.m.ReplayAll()
@@ -217,7 +221,7 @@ class stackManagerTest(unittest.TestCase):
 
     def test_stack_describe_all_empty(self):
         self.tearDown()
-        self.username = 'stack_describe_all_empty_user'
+        self.tenant = 'stack_describe_all_empty_tenant'
         self.setUp()
 
         sl = self.man.show_stack(self.ctx, None, {})