diff --git a/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_10_0.py b/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_10_0.py index 4e7f9b8573..ba2c75d909 100644 --- a/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_10_0.py +++ b/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_10_0.py @@ -38,9 +38,11 @@ def upgrade(): upgrade_plugin_with_nics_and_nodes_attributes() upgrade_node_deployment_info() upgrade_release_required_component_types() + upgrade_task_model() def downgrade(): + downgrade_task_model() downgrade_release_required_component_types() downgrade_node_deployment_info() downgrade_plugin_with_nics_and_nodes_attributes() @@ -305,3 +307,21 @@ def downgrade_node_deployment_info(): def downgrade_release_required_component_types(): op.drop_column('releases', 'required_component_types') + + +def upgrade_task_model(): + op.add_column( + 'tasks', + sa.Column('graph_type', sa.String(255), nullable=True) + ) + op.add_column( + 'tasks', + sa.Column( + 'dry_run', sa.Boolean(), nullable=False, server_default='false' + ) + ) + + +def downgrade_task_model(): + op.drop_column('tasks', 'dry_run') + op.drop_column('tasks', 'graph_type') diff --git a/nailgun/nailgun/db/sqlalchemy/models/task.py b/nailgun/nailgun/db/sqlalchemy/models/task.py index 61da000047..2c329855c0 100644 --- a/nailgun/nailgun/db/sqlalchemy/models/task.py +++ b/nailgun/nailgun/db/sqlalchemy/models/task.py @@ -16,6 +16,7 @@ import uuid +from sqlalchemy import Boolean from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum @@ -76,6 +77,9 @@ class Task(Base): # sum([t.weight for t in supertask.subtasks]) weight = Column(Float, default=1.0) deleted_at = Column(DateTime) + dry_run = Column(Boolean(), nullable=False, default=False, + server_default='false') + graph_type = Column(String(255)) deployment_info = deferred(Column(MutableDict.as_mutable(JSON), nullable=True)) cluster_settings = deferred(Column(MutableDict.as_mutable(JSON), diff --git a/nailgun/nailgun/test/unit/test_downgrade_fuel_10_0.py b/nailgun/nailgun/test/unit/test_downgrade_fuel_10_0.py index 6e4195caae..febfa78228 100644 --- a/nailgun/nailgun/test/unit/test_downgrade_fuel_10_0.py +++ b/nailgun/nailgun/test/unit/test_downgrade_fuel_10_0.py @@ -109,3 +109,32 @@ class TestRequiredComponentTypesField(base.BaseAlembicMigrationTest): def test_downgrade_release_required_component_types(self): releases_table = self.meta.tables['releases'] self.assertNotIn('required_component_types', releases_table.c) + + +class TestTasksSchemaDowngrade(base.BaseAlembicMigrationTest): + + def test_dry_run_field_does_no_exist(self): + db.execute( + self.meta.tables['tasks'].insert(), + [{ + 'uuid': 'fake_task_uuid_0', + 'name': 'dump', + 'status': 'pending' + }] + ) + + result = db.execute(sa.select([self.meta.tables['tasks']])).first() + self.assertNotIn('dry_run', result) + + def test_graph_type_field_does_no_exist(self): + db.execute( + self.meta.tables['tasks'].insert(), + [{ + 'uuid': 'fake_task_uuid_0', + 'name': 'dump', + 'status': 'pending' + }] + ) + + result = db.execute(sa.select([self.meta.tables['tasks']])).first() + self.assertNotIn('graph_type', result) diff --git a/nailgun/nailgun/test/unit/test_migration_fuel_10_0.py b/nailgun/nailgun/test/unit/test_migration_fuel_10_0.py index 60c4872ab2..0700c3ab05 100644 --- a/nailgun/nailgun/test/unit/test_migration_fuel_10_0.py +++ b/nailgun/nailgun/test/unit/test_migration_fuel_10_0.py @@ -24,7 +24,7 @@ from nailgun.db import dropdb from nailgun.db.migration import ALEMBIC_CONFIG from nailgun.test import base -_prepare_revision = '675105097a69' +_prepare_revision = 'f2314e5d63c9' _test_revision = 'c6edea552f1e' JSON_TASKS = [ @@ -534,3 +534,32 @@ class TestRequiredComponentTypesField(base.BaseAlembicMigrationTest): 'required_component_types': None }) db.rollback() + + +class TestTasksSchemaMigration(base.BaseAlembicMigrationTest): + + def test_dry_run_field_exist(self): + db.execute( + self.meta.tables['tasks'].insert(), + [{ + 'uuid': 'fake_task_uuid_0', + 'name': 'dump', + 'status': 'pending', + }] + ) + + result = db.execute(sa.select([self.meta.tables['tasks']])).first() + self.assertIn('dry_run', result) + + def test_graph_type_field_exist(self): + db.execute( + self.meta.tables['tasks'].insert(), + [{ + 'uuid': 'fake_task_uuid_0', + 'name': 'dump', + 'status': 'pending', + }] + ) + + result = db.execute(sa.select([self.meta.tables['tasks']])).first() + self.assertIn('graph_type', result)