Skip to content

Commit

Permalink
rename tenant to project in sql
Browse files Browse the repository at this point in the history
Change is motivated by the need to do an incremental conversion from using
tenant to using project as the name.  The database is isolated from the API
and can be modified without breaking integrations.  ADditional work wil be required
to get the API to meet the V3 spec without breaking the V2 spec

Change-Id: I7cf7695354071f0ea6252be4730ceec3af0a2f35
  • Loading branch information
Adam Young committed Jan 25, 2013
1 parent dd35747 commit 56f194a
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 8 deletions.
20 changes: 20 additions & 0 deletions keystone/common/sql/migrate_repo/versions/014_tenant_to_project.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sqlalchemy as sql


def upgrade(migrate_engine):
meta = sql.MetaData()
meta.bind = migrate_engine
legacy_table = sql.Table('tenant', meta, autoload=True)
legacy_table.rename('project')
legacy_table = sql.Table('user_tenant_membership', meta, autoload=True)
legacy_table.rename('user_project_membership')


def downgrade(migrate_engine):
"""Replace API-version specific endpoint tables with one based on v2."""
meta = sql.MetaData()
meta.bind = migrate_engine
upgrade_table = sql.Table('project', meta, autoload=True)
upgrade_table.rename('tenant')
upgrade_table = sql.Table('user_project_membership', meta, autoload=True)
upgrade_table.rename('user_tenant_membership')
9 changes: 4 additions & 5 deletions keystone/identity/backends/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class Credential(sql.ModelBase, sql.DictBase):
user_id = sql.Column(sql.String(64),
sql.ForeignKey('user.id'),
nullable=False)
project_id = sql.Column(sql.String(64), sql.ForeignKey('tenant.id'))
project_id = sql.Column(sql.String(64), sql.ForeignKey('project.id'))
blob = sql.Column(sql.JsonBlob(), nullable=False)
type = sql.Column(sql.String(255), nullable=False)
extra = sql.Column(sql.JsonBlob())
Expand All @@ -80,8 +80,7 @@ class Domain(sql.ModelBase, sql.DictBase):

# TODO(dolph): rename to Project
class Tenant(sql.ModelBase, sql.DictBase):
# TODO(dolph): rename to project
__tablename__ = 'tenant'
__tablename__ = 'project'
attributes = ['id', 'name']
id = sql.Column(sql.String(64), primary_key=True)
name = sql.Column(sql.String(64), unique=True, nullable=False)
Expand Down Expand Up @@ -141,12 +140,12 @@ class GroupDomainGrant(sql.ModelBase, BaseGrant):
# TODO(dolph): ... do we need this table?
class UserTenantMembership(sql.ModelBase, sql.DictBase):
"""Tenant membership join table."""
__tablename__ = 'user_tenant_membership'
__tablename__ = 'user_project_membership'
user_id = sql.Column(sql.String(64),
sql.ForeignKey('user.id'),
primary_key=True)
tenant_id = sql.Column(sql.String(64),
sql.ForeignKey('tenant.id'),
sql.ForeignKey('project.id'),
primary_key=True)


Expand Down
30 changes: 27 additions & 3 deletions tests/test_sql_upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,30 @@ def test_upgrade_9_to_12(self):
self.assertEqual(ref.url, endpoint_extra['%surl' % interface])
self.assertEqual(ref.extra, '{}')

def assertTenantTables(self):
self.assertTableExists('tenant')
self.assertTableExists('user_tenant_membership')
self.assertTableDoesNotExist('project')
self.assertTableDoesNotExist('user_project_membership')

def assertProjectTables(self):
self.assertTableExists('project')
self.assertTableExists('user_project_membership')
self.assertTableDoesNotExist('tenant')
self.assertTableDoesNotExist('user_tenant_membership')

def test_upgrade_tenant_to_project(self):
self.upgrade(13)
self.assertTenantTables()
self.upgrade(14)
self.assertProjectTables()

def test_downgrade_project_to_tenant(self):
self.upgrade(14)
self.assertProjectTables()
self.downgrade(13)
self.assertTenantTables()

def test_upgrade_12_to_13(self):
self.upgrade(12)
self.upgrade(13)
Expand Down Expand Up @@ -355,10 +379,10 @@ def select_table(self, name):
return s

def assertTableExists(self, table_name):
"""Asserts that a given table exists can be selected by name."""
try:
self.select_table(table_name)
except sqlalchemy.exc.NoSuchTableError:
#TODO ayoung: make quoting work for postgres
self.engine.execute("select count(*) from '%s'" % table_name)
except:
raise AssertionError('Table "%s" does not exist' % table_name)

def assertTableDoesNotExist(self, table_name):
Expand Down

0 comments on commit 56f194a

Please sign in to comment.