diff --git a/keystone/common/sql/contract_repo/versions/055_contract_add_domain_to_limit.py b/keystone/common/sql/contract_repo/versions/055_contract_add_domain_to_limit.py new file mode 100644 index 0000000000..36d6417680 --- /dev/null +++ b/keystone/common/sql/contract_repo/versions/055_contract_add_domain_to_limit.py @@ -0,0 +1,21 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import sqlalchemy as sql + + +def upgrade(migrate_engine): + meta = sql.MetaData() + meta.bind = migrate_engine + + limit_table = sql.Table('limit', meta, autoload=True) + limit_table.c.project_id.alter(nullable=True) diff --git a/keystone/common/sql/data_migration_repo/versions/055_migrate_add_domain_to_limit.py b/keystone/common/sql/data_migration_repo/versions/055_migrate_add_domain_to_limit.py new file mode 100644 index 0000000000..8aa15c1ef2 --- /dev/null +++ b/keystone/common/sql/data_migration_repo/versions/055_migrate_add_domain_to_limit.py @@ -0,0 +1,15 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +def upgrade(migrate_engine): + pass diff --git a/keystone/common/sql/expand_repo/versions/055_expand_add_domain_to_limit.py b/keystone/common/sql/expand_repo/versions/055_expand_add_domain_to_limit.py new file mode 100644 index 0000000000..c0f88ee575 --- /dev/null +++ b/keystone/common/sql/expand_repo/versions/055_expand_add_domain_to_limit.py @@ -0,0 +1,34 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import sqlalchemy as sql + + +def upgrade(migrate_engine): + meta = sql.MetaData() + meta.bind = migrate_engine + + limit_table = sql.Table('limit', meta, autoload=True) + domain_id = sql.Column('domain_id', sql.String(64), nullable=True) + limit_table.create_column(domain_id) + + if migrate_engine.name == 'sqlite': + meta = sql.MetaData() + meta.bind = migrate_engine + # "limit_new" is the table created in 047 expand script for SQLite + # case. + try: + limit_table_new = sql.Table('limit_new', meta, autoload=True) + domain_id = sql.Column('domain_id', sql.String(64), nullable=True) + limit_table_new.create_column(domain_id) + except sql.exc.NoSuchTableError: + pass diff --git a/keystone/tests/unit/test_sql_upgrade.py b/keystone/tests/unit/test_sql_upgrade.py index 646ecb1850..2a99be0f62 100644 --- a/keystone/tests/unit/test_sql_upgrade.py +++ b/keystone/tests/unit/test_sql_upgrade.py @@ -3202,6 +3202,27 @@ class FullMigration(SqlMigrateBase, unit.TestCase): 'created_at_int', 'created_at', 'expires_at_int', 'expires_at'] ) + def test_migration_055_add_domain_to_limit(self): + self.expand(54) + self.migrate(54) + self.contract(54) + + limit_table_name = 'limit' + limit_table = sqlalchemy.Table(limit_table_name, self.metadata, + autoload=True) + self.assertFalse(hasattr(limit_table.c, 'domain_id')) + + self.expand(55) + self.migrate(55) + self.contract(55) + + self.assertTableColumns( + limit_table_name, + ['id', 'project_id', 'service_id', 'region_id', 'resource_name', + 'resource_limit', 'description', 'internal_id', + 'registered_limit_id', 'domain_id']) + self.assertTrue(limit_table.c.project_id.nullable) + class MySQLOpportunisticFullMigration(FullMigration): FIXTURE = db_fixtures.MySQLOpportunisticFixture