From 2b2993cdddc6831baefe498e207f28c62cff2ee1 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Mon, 19 Apr 2021 12:08:57 +0100 Subject: [PATCH] db: Use 'import sqlalchemy as sa' pattern This makes it a little clearer where things are coming from. Change-Id: Icb1cf73722e0e9bf1364d64522e38b94aa716bea Signed-off-by: Stephen Finucane --- .../migrate_repo/versions/135_cinder_init.py | 1116 +++++++++-------- .../136_make_vol_type_col_non_nullable.py | 10 +- .../140_create_project_default_volume_type.py | 31 +- .../141_add_quota_usage_unique_constraint.py | 11 +- cinder/db/sqlalchemy/models.py | 709 ++++++----- 5 files changed, 1014 insertions(+), 863 deletions(-) diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/135_cinder_init.py b/cinder/db/sqlalchemy/migrate_repo/versions/135_cinder_init.py index 565ee4e1edd..7479d5c5c8b 100644 --- a/cinder/db/sqlalchemy/migrate_repo/versions/135_cinder_init.py +++ b/cinder/db/sqlalchemy/migrate_repo/versions/135_cinder_init.py @@ -17,9 +17,8 @@ import uuid from oslo_config import cfg from oslo_utils import timeutils +import sqlalchemy as sa from sqlalchemy.dialects import mysql -from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Index, Integer -from sqlalchemy import MetaData, String, Table, Text, UniqueConstraint, text from sqlalchemy.sql import expression from cinder.volume import group_types as volume_group_types @@ -40,494 +39,552 @@ CREATED_AT = datetime.datetime.now() # noqa def define_tables(meta): - services = Table( + services = sa.Table( 'services', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('host', String(255)), - Column('binary', String(255)), - Column('topic', String(255)), - Column('report_count', Integer, nullable=False), - Column('disabled', Boolean), - Column('availability_zone', String(255)), - Column('disabled_reason', String(255)), - Column('modified_at', DateTime(timezone=False)), - Column('rpc_current_version', String(36)), - Column('object_current_version', String(36)), - Column('replication_status', String(36), default='not-capable'), - Column('frozen', Boolean, default=False), - Column('active_backend_id', String(255)), - Column('cluster_name', String(255), nullable=True), - Column('uuid', String(36), nullable=True), - Index('services_uuid_idx', 'uuid', unique=True), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('host', sa.String(255)), + sa.Column('binary', sa.String(255)), + sa.Column('topic', sa.String(255)), + sa.Column('report_count', sa.Integer, nullable=False), + sa.Column('disabled', sa.Boolean), + sa.Column('availability_zone', sa.String(255)), + sa.Column('disabled_reason', sa.String(255)), + sa.Column('modified_at', sa.DateTime(timezone=False)), + sa.Column('rpc_current_version', sa.String(36)), + sa.Column('object_current_version', sa.String(36)), + sa.Column('replication_status', sa.String(36), default='not-capable'), + sa.Column('frozen', sa.Boolean, default=False), + sa.Column('active_backend_id', sa.String(255)), + sa.Column('cluster_name', sa.String(255), nullable=True), + sa.Column('uuid', sa.String(36), nullable=True), + sa.Index('services_uuid_idx', 'uuid', unique=True), mysql_engine='InnoDB', mysql_charset='utf8' ) - consistencygroups = Table( + consistencygroups = sa.Table( 'consistencygroups', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', String(36), primary_key=True, nullable=False), - Column('user_id', String(255)), - Column('project_id', String(255)), - Column('host', String(255)), - Column('availability_zone', String(255)), - Column('name', String(255)), - Column('description', String(255)), - Column('volume_type_id', String(255)), - Column('status', String(255)), - Column('cgsnapshot_id', String(36)), - Column('source_cgid', String(36)), - Column('cluster_name', String(255), nullable=True), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('user_id', sa.String(255)), + sa.Column('project_id', sa.String(255)), + sa.Column('host', sa.String(255)), + sa.Column('availability_zone', sa.String(255)), + sa.Column('name', sa.String(255)), + sa.Column('description', sa.String(255)), + sa.Column('volume_type_id', sa.String(255)), + sa.Column('status', sa.String(255)), + sa.Column('cgsnapshot_id', sa.String(36)), + sa.Column('source_cgid', sa.String(36)), + sa.Column('cluster_name', sa.String(255), nullable=True), mysql_engine='InnoDB', mysql_charset='utf8' ) - cgsnapshots = Table( + cgsnapshots = sa.Table( 'cgsnapshots', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', String(36), primary_key=True, nullable=False), - Column('consistencygroup_id', String(36), - ForeignKey('consistencygroups.id'), - nullable=False, - index=True), - Column('user_id', String(255)), - Column('project_id', String(255)), - Column('name', String(255)), - Column('description', String(255)), - Column('status', String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column( + 'consistencygroup_id', + sa.String(36), + sa.ForeignKey('consistencygroups.id'), + nullable=False, + index=True), + sa.Column('user_id', sa.String(255)), + sa.Column('project_id', sa.String(255)), + sa.Column('name', sa.String(255)), + sa.Column('description', sa.String(255)), + sa.Column('status', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - groups = Table( + groups = sa.Table( 'groups', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('user_id', String(length=255)), - Column('project_id', String(length=255)), - Column('cluster_name', String(255)), - Column('host', String(length=255)), - Column('availability_zone', String(length=255)), - Column('name', String(length=255)), - Column('description', String(length=255)), - Column('group_type_id', String(length=36)), - Column('status', String(length=255)), - Column('group_snapshot_id', String(36)), - Column('source_group_id', String(36)), - Column('replication_status', String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('user_id', sa.String(length=255)), + sa.Column('project_id', sa.String(length=255)), + sa.Column('cluster_name', sa.String(255)), + sa.Column('host', sa.String(length=255)), + sa.Column('availability_zone', sa.String(length=255)), + sa.Column('name', sa.String(length=255)), + sa.Column('description', sa.String(length=255)), + sa.Column('group_type_id', sa.String(length=36)), + sa.Column('status', sa.String(length=255)), + sa.Column('group_snapshot_id', sa.String(36)), + sa.Column('source_group_id', sa.String(36)), + sa.Column('replication_status', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8', ) - group_snapshots = Table( + group_snapshots = sa.Table( 'group_snapshots', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', String(36), primary_key=True), - Column('group_id', String(36), - ForeignKey('groups.id'), - nullable=False, - index=True), - Column('user_id', String(length=255)), - Column('project_id', String(length=255)), - Column('name', String(length=255)), - Column('description', String(length=255)), - Column('status', String(length=255)), - Column('group_type_id', String(length=36)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.String(36), primary_key=True), + sa.Column( + 'group_id', + sa.String(36), + sa.ForeignKey('groups.id'), + nullable=False, + index=True), + sa.Column('user_id', sa.String(length=255)), + sa.Column('project_id', sa.String(length=255)), + sa.Column('name', sa.String(length=255)), + sa.Column('description', sa.String(length=255)), + sa.Column('status', sa.String(length=255)), + sa.Column('group_type_id', sa.String(length=36)), mysql_engine='InnoDB', mysql_charset='utf8', ) - volumes = Table( + volumes = sa.Table( 'volumes', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('ec2_id', String(255)), - Column('user_id', String(255)), - Column('project_id', String(255)), - Column('host', String(255)), - Column('size', Integer), - Column('availability_zone', String(255)), - Column('status', String(255)), - Column('attach_status', String(255)), - Column('scheduled_at', DateTime), - Column('launched_at', DateTime), - Column('terminated_at', DateTime), - Column('display_name', String(255)), - Column('display_description', String(255)), - Column('provider_location', String(256)), - Column('provider_auth', String(256)), - Column('snapshot_id', String(36)), - Column('volume_type_id', String(36)), - Column('source_volid', String(36)), - Column('bootable', Boolean), - Column('provider_geometry', String(255)), - Column('_name_id', String(36)), - Column('encryption_key_id', String(36)), - Column('migration_status', String(255)), - Column('replication_status', String(255)), - Column('replication_extended_status', String(255)), - Column('replication_driver_data', String(255)), - Column('consistencygroup_id', String(36), - ForeignKey('consistencygroups.id'), index=True), - Column('provider_id', String(255)), - Column('multiattach', Boolean), - Column('previous_status', String(255)), - Column('cluster_name', String(255), nullable=True), - Column('group_id', String(36), ForeignKey('groups.id'), index=True), - Column('service_uuid', String(36), ForeignKey('services.uuid'), - nullable=True), - Column('shared_targets', Boolean, default=True), - Index('volumes_service_uuid_idx', 'service_uuid', 'deleted'), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('ec2_id', sa.String(255)), + sa.Column('user_id', sa.String(255)), + sa.Column('project_id', sa.String(255)), + sa.Column('host', sa.String(255)), + sa.Column('size', sa.Integer), + sa.Column('availability_zone', sa.String(255)), + sa.Column('status', sa.String(255)), + sa.Column('attach_status', sa.String(255)), + sa.Column('scheduled_at', sa.DateTime), + sa.Column('launched_at', sa.DateTime), + sa.Column('terminated_at', sa.DateTime), + sa.Column('display_name', sa.String(255)), + sa.Column('display_description', sa.String(255)), + sa.Column('provider_location', sa.String(256)), + sa.Column('provider_auth', sa.String(256)), + sa.Column('snapshot_id', sa.String(36)), + sa.Column('volume_type_id', sa.String(36)), + sa.Column('source_volid', sa.String(36)), + sa.Column('bootable', sa.Boolean), + sa.Column('provider_geometry', sa.String(255)), + sa.Column('_name_id', sa.String(36)), + sa.Column('encryption_key_id', sa.String(36)), + sa.Column('migration_status', sa.String(255)), + sa.Column('replication_status', sa.String(255)), + sa.Column('replication_extended_status', sa.String(255)), + sa.Column('replication_driver_data', sa.String(255)), + sa.Column( + 'consistencygroup_id', + sa.String(36), + sa.ForeignKey('consistencygroups.id'), + index=True), + sa.Column('provider_id', sa.String(255)), + sa.Column('multiattach', sa.Boolean), + sa.Column('previous_status', sa.String(255)), + sa.Column('cluster_name', sa.String(255), nullable=True), + sa.Column( + 'group_id', + sa.String(36), + sa.ForeignKey('groups.id'), + index=True), + sa.Column( + 'service_uuid', + sa.String(36), + sa.ForeignKey('services.uuid'), + nullable=True), + sa.Column('shared_targets', sa.Boolean, default=True), + sa.Index('volumes_service_uuid_idx', 'service_uuid', 'deleted'), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_attachment = Table( + volume_attachment = sa.Table( 'volume_attachment', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('volume_id', String(36), ForeignKey('volumes.id'), - nullable=False, index=True), - Column('attached_host', String(255)), - Column('instance_uuid', String(36)), - Column('mountpoint', String(255)), - Column('attach_time', DateTime), - Column('detach_time', DateTime), - Column('attach_mode', String(36)), - Column('attach_status', String(255)), - Column('connection_info', Text), - Column('connector', Text), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True), + sa.Column('attached_host', sa.String(255)), + sa.Column('instance_uuid', sa.String(36)), + sa.Column('mountpoint', sa.String(255)), + sa.Column('attach_time', sa.DateTime), + sa.Column('detach_time', sa.DateTime), + sa.Column('attach_mode', sa.String(36)), + sa.Column('attach_status', sa.String(255)), + sa.Column('connection_info', sa.Text), + sa.Column('connector', sa.Text), mysql_engine='InnoDB', mysql_charset='utf8' ) - attachment_specs = Table( + attachment_specs = sa.Table( 'attachment_specs', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(), default=False), - Column('id', Integer, primary_key=True, nullable=False), - Column('attachment_id', String(36), - ForeignKey('volume_attachment.id'), - nullable=False, - index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(), default=False), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'attachment_id', + sa.String(36), + sa.ForeignKey('volume_attachment.id'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - snapshots = Table( + snapshots = sa.Table( 'snapshots', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('volume_id', String(36), - ForeignKey('volumes.id', name='snapshots_volume_id_fkey'), - nullable=False, index=True), - Column('user_id', String(255)), - Column('project_id', String(255)), - Column('status', String(255)), - Column('progress', String(255)), - Column('volume_size', Integer), - Column('scheduled_at', DateTime), - Column('display_name', String(255)), - Column('display_description', String(255)), - Column('provider_location', String(255)), - Column('encryption_key_id', String(36)), - Column('volume_type_id', String(36)), - Column('cgsnapshot_id', String(36), - ForeignKey('cgsnapshots.id'), index=True), - Column('provider_id', String(255)), - Column('provider_auth', String(255)), - Column('group_snapshot_id', String(36), - ForeignKey('group_snapshots.id'), index=True), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id', name='snapshots_volume_id_fkey'), + nullable=False, + index=True), + sa.Column('user_id', sa.String(255)), + sa.Column('project_id', sa.String(255)), + sa.Column('status', sa.String(255)), + sa.Column('progress', sa.String(255)), + sa.Column('volume_size', sa.Integer), + sa.Column('scheduled_at', sa.DateTime), + sa.Column('display_name', sa.String(255)), + sa.Column('display_description', sa.String(255)), + sa.Column('provider_location', sa.String(255)), + sa.Column('encryption_key_id', sa.String(36)), + sa.Column('volume_type_id', sa.String(36)), + sa.Column( + 'cgsnapshot_id', + sa.String(36), + sa.ForeignKey('cgsnapshots.id'), + index=True), + sa.Column('provider_id', sa.String(255)), + sa.Column('provider_auth', sa.String(255)), + sa.Column( + 'group_snapshot_id', + sa.String(36), + sa.ForeignKey('group_snapshots.id'), + index=True), mysql_engine='InnoDB', mysql_charset='utf8' ) - snapshot_metadata = Table( + snapshot_metadata = sa.Table( 'snapshot_metadata', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('snapshot_id', String(36), ForeignKey('snapshots.id'), - nullable=False, index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'snapshot_id', + sa.String(36), + sa.ForeignKey('snapshots.id'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - quality_of_service_specs = Table( + quality_of_service_specs = sa.Table( 'quality_of_service_specs', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', String(36), primary_key=True, nullable=False), - Column('specs_id', String(36), - ForeignKey('quality_of_service_specs.id'), - index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column( + 'specs_id', + sa.String(36), + sa.ForeignKey('quality_of_service_specs.id'), + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_types = Table( + volume_types = sa.Table( 'volume_types', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('name', String(255)), - Column('qos_specs_id', String(36), - ForeignKey('quality_of_service_specs.id'), index=True), - Column('is_public', Boolean), - Column('description', String(255)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('name', sa.String(255)), + sa.Column( + 'qos_specs_id', + sa.String(36), + sa.ForeignKey('quality_of_service_specs.id'), + index=True), + sa.Column('is_public', sa.Boolean), + sa.Column('description', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_type_projects = Table( + volume_type_projects = sa.Table( 'volume_type_projects', meta, - Column('id', Integer, primary_key=True, nullable=False), - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('volume_type_id', String(36), - ForeignKey('volume_types.id')), - Column('project_id', String(255)), - Column('deleted', Integer), - UniqueConstraint('volume_type_id', 'project_id', 'deleted'), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column( + 'volume_type_id', + sa.String(36), + sa.ForeignKey('volume_types.id')), + sa.Column('project_id', sa.String(255)), + sa.Column('deleted', sa.Integer), + sa.UniqueConstraint('volume_type_id', 'project_id', 'deleted'), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_metadata = Table( + volume_metadata = sa.Table( 'volume_metadata', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('volume_id', String(36), ForeignKey('volumes.id'), - nullable=False, index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_type_extra_specs = Table( + volume_type_extra_specs = sa.Table( 'volume_type_extra_specs', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('volume_type_id', String(36), - ForeignKey('volume_types.id', - name='volume_type_extra_specs_ibfk_1'), - nullable=False, - index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'volume_type_id', + sa.String(36), + sa.ForeignKey( + 'volume_types.id', + name='volume_type_extra_specs_ibfk_1'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - quotas = Table( + quotas = sa.Table( 'quotas', meta, - Column('id', Integer, primary_key=True, nullable=False), - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('project_id', String(255)), - Column('resource', String(255), nullable=False), - Column('hard_limit', Integer), - Column('allocated', Integer, default=0), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('project_id', sa.String(255)), + sa.Column('resource', sa.String(255), nullable=False), + sa.Column('hard_limit', sa.Integer), + sa.Column('allocated', sa.Integer, default=0), mysql_engine='InnoDB', mysql_charset='utf8' ) - quota_classes = Table( + quota_classes = sa.Table( 'quota_classes', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, - name=None)), - Column('id', Integer(), primary_key=True), - Column('class_name', String(255), index=True), - Column('resource', String(255)), - Column('hard_limit', Integer(), nullable=True), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.Integer(), primary_key=True), + sa.Column('class_name', sa.String(255), index=True), + sa.Column('resource', sa.String(255)), + sa.Column('hard_limit', sa.Integer(), nullable=True), mysql_engine='InnoDB', mysql_charset='utf8', ) - quota_usages = Table( + quota_usages = sa.Table( 'quota_usages', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, - name=None)), - Column('id', Integer(), primary_key=True), - Column('project_id', String(255), index=True), - Column('resource', String(255)), - Column('in_use', Integer(), nullable=False), - Column('reserved', Integer(), nullable=False), - Column('until_refresh', Integer(), nullable=True), - Index('quota_usage_project_resource_idx', - 'project_id', 'resource'), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.Integer(), primary_key=True), + sa.Column('project_id', sa.String(255), index=True), + sa.Column('resource', sa.String(255)), + sa.Column('in_use', sa.Integer(), nullable=False), + sa.Column('reserved', sa.Integer(), nullable=False), + sa.Column('until_refresh', sa.Integer(), nullable=True), + sa.Index('quota_usage_project_resource_idx', 'project_id', 'resource'), mysql_engine='InnoDB', mysql_charset='utf8', ) - reservations = Table( + reservations = sa.Table( 'reservations', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, - name=None)), - Column('id', Integer(), primary_key=True), - Column('uuid', String(36), nullable=False), - Column('usage_id', - Integer(), - ForeignKey('quota_usages.id'), - nullable=True, - index=True), - Column('project_id', String(255), index=True), - Column('resource', String(255)), - Column('delta', Integer(), nullable=False), - Column('expire', DateTime(timezone=False)), - Column('allocated_id', Integer, ForeignKey('quotas.id'), - nullable=True, - index=True), - Index('reservations_deleted_expire_idx', - 'deleted', 'expire'), - Index('reservations_deleted_uuid_idx', - 'deleted', 'uuid'), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.Integer(), primary_key=True), + sa.Column('uuid', sa.String(36), nullable=False), + sa.Column( + 'usage_id', + sa.Integer(), + sa.ForeignKey('quota_usages.id'), + nullable=True, + index=True), + sa.Column('project_id', sa.String(255), index=True), + sa.Column('resource', sa.String(255)), + sa.Column('delta', sa.Integer(), nullable=False), + sa.Column('expire', sa.DateTime(timezone=False)), + sa.Column( + 'allocated_id', + sa.Integer, + sa.ForeignKey('quotas.id'), + nullable=True, + index=True), + sa.Index('reservations_deleted_expire_idx', 'deleted', 'expire'), + sa.Index('reservations_deleted_uuid_idx', 'deleted', 'uuid'), mysql_engine='InnoDB', mysql_charset='utf8', ) - volume_glance_metadata = Table( + volume_glance_metadata = sa.Table( 'volume_glance_metadata', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', Integer(), primary_key=True, nullable=False), - Column('volume_id', String(36), ForeignKey('volumes.id'), index=True), - Column('snapshot_id', String(36), - ForeignKey('snapshots.id'), index=True), - Column('key', String(255)), - Column('value', Text), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.Integer(), primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id'), + index=True), + sa.Column( + 'snapshot_id', + sa.String(36), + sa.ForeignKey('snapshots.id'), + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.Text), mysql_engine='InnoDB', mysql_charset='utf8' ) - backups = Table( + backups = sa.Table( 'backups', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('id', String(36), primary_key=True, nullable=False), - Column('volume_id', String(36), nullable=False), - Column('user_id', String(255)), - Column('project_id', String(255)), - Column('host', String(255)), - Column('availability_zone', String(255)), - Column('display_name', String(255)), - Column('display_description', String(255)), - Column('container', String(255)), - Column('status', String(255)), - Column('fail_reason', String(255)), - Column('service_metadata', String(255)), - Column('service', String(255)), - Column('size', Integer()), - Column('object_count', Integer()), - Column('parent_id', String(36)), - Column('temp_volume_id', String(36)), - Column('temp_snapshot_id', String(36)), - Column('num_dependent_backups', Integer, default=0), - Column('snapshot_id', String(36)), - Column('data_timestamp', DateTime), - Column('restore_volume_id', String(36)), - Column('encryption_key_id', String(36)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('volume_id', sa.String(36), nullable=False), + sa.Column('user_id', sa.String(255)), + sa.Column('project_id', sa.String(255)), + sa.Column('host', sa.String(255)), + sa.Column('availability_zone', sa.String(255)), + sa.Column('display_name', sa.String(255)), + sa.Column('display_description', sa.String(255)), + sa.Column('container', sa.String(255)), + sa.Column('status', sa.String(255)), + sa.Column('fail_reason', sa.String(255)), + sa.Column('service_metadata', sa.String(255)), + sa.Column('service', sa.String(255)), + sa.Column('size', sa.Integer()), + sa.Column('object_count', sa.Integer()), + sa.Column('parent_id', sa.String(36)), + sa.Column('temp_volume_id', sa.String(36)), + sa.Column('temp_snapshot_id', sa.String(36)), + sa.Column('num_dependent_backups', sa.Integer, default=0), + sa.Column('snapshot_id', sa.String(36)), + sa.Column('data_timestamp', sa.DateTime), + sa.Column('restore_volume_id', sa.String(36)), + sa.Column('encryption_key_id', sa.String(36)), mysql_engine='InnoDB', mysql_charset='utf8' ) - backup_metadata = Table( + backup_metadata = sa.Table( 'backup_metadata', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(), default=False), - Column('id', Integer, primary_key=True, nullable=False), - Column('backup_id', String(36), - ForeignKey('backups.id'), - nullable=False, - index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(), default=False), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'backup_id', + sa.String(36), + sa.ForeignKey('backups.id'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - transfers = Table( + transfers = sa.Table( 'transfers', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean), - Column('id', String(36), primary_key=True, nullable=False), - Column('volume_id', String(36), ForeignKey('volumes.id'), - nullable=False, index=True), - Column('display_name', String(255)), - Column('salt', String(255)), - Column('crypt_hash', String(255)), - Column('expires_at', DateTime(timezone=False)), - Column('no_snapshots', Boolean, default=False), - Column('source_project_id', String(255), nullable=True), - Column('destination_project_id', String(255), nullable=True), - Column('accepted', Boolean, default=False), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True), + sa.Column('display_name', sa.String(255)), + sa.Column('salt', sa.String(255)), + sa.Column('crypt_hash', sa.String(255)), + sa.Column('expires_at', sa.DateTime(timezone=False)), + sa.Column('no_snapshots', sa.Boolean, default=False), + sa.Column('source_project_id', sa.String(255), nullable=True), + sa.Column('destination_project_id', sa.String(255), nullable=True), + sa.Column('accepted', sa.Boolean, default=False), mysql_engine='InnoDB', mysql_charset='utf8' ) @@ -535,200 +592,233 @@ def define_tables(meta): # Sqlite needs to handle nullable differently is_nullable = (meta.bind.name == 'sqlite') - encryption = Table( + encryption = sa.Table( 'encryption', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(create_constraint=True, name=None)), - Column('cipher', String(255)), - Column('control_location', String(255), nullable=is_nullable), - Column('key_size', Integer), - Column('provider', String(255), nullable=is_nullable), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.Column('cipher', sa.String(255)), + sa.Column('control_location', sa.String(255), nullable=is_nullable), + sa.Column('key_size', sa.Integer), + sa.Column('provider', sa.String(255), nullable=is_nullable), # NOTE(joel-coffman): The volume_type_id must be unique or else the # referenced volume type becomes ambiguous. That is, specifying the # volume type is not sufficient to identify a particular encryption # scheme unless each volume type is associated with at most one # encryption scheme. - Column('volume_type_id', String(36), nullable=is_nullable), + sa.Column('volume_type_id', sa.String(36), nullable=is_nullable), # NOTE (smcginnis): nullable=True triggers this to not set a default # value, but since it's a primary key the resulting schema will end up # still being NOT NULL. This is avoiding a case in MySQL where it will # otherwise set this to NOT NULL DEFAULT ''. May be harmless, but # inconsistent with previous schema. - Column('encryption_id', String(36), primary_key=True, nullable=True), + sa.Column( + 'encryption_id', + sa.String(36), + primary_key=True, + nullable=True), mysql_engine='InnoDB', mysql_charset='utf8' ) - volume_admin_metadata = Table( + volume_admin_metadata = sa.Table( 'volume_admin_metadata', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('volume_id', String(36), ForeignKey('volumes.id'), - nullable=False, index=True), - Column('key', String(255)), - Column('value', String(255)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'volume_id', + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - initiator_data = Table( + initiator_data = sa.Table( 'driver_initiator_data', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('id', Integer, primary_key=True, nullable=False), - Column('initiator', String(255), index=True, nullable=False), - Column('namespace', String(255), nullable=False), - Column('key', String(255), nullable=False), - Column('value', String(255)), - UniqueConstraint('initiator', 'namespace', 'key'), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('initiator', sa.String(255), index=True, nullable=False), + sa.Column('namespace', sa.String(255), nullable=False), + sa.Column('key', sa.String(255), nullable=False), + sa.Column('value', sa.String(255)), + sa.UniqueConstraint('initiator', 'namespace', 'key'), mysql_engine='InnoDB', mysql_charset='utf8' ) - image_volume_cache = Table( + image_volume_cache = sa.Table( 'image_volume_cache_entries', meta, - Column('image_updated_at', DateTime(timezone=False)), - Column('id', Integer, primary_key=True, nullable=False), - Column('host', String(255), index=True, nullable=False), - Column('image_id', String(36), index=True, nullable=False), - Column('volume_id', String(36), nullable=False), - Column('size', Integer, nullable=False), - Column('last_used', DateTime, nullable=False), - Column('cluster_name', String(255)), + sa.Column('image_updated_at', sa.DateTime(timezone=False)), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('host', sa.String(255), index=True, nullable=False), + sa.Column('image_id', sa.String(36), index=True, nullable=False), + sa.Column('volume_id', sa.String(36), nullable=False), + sa.Column('size', sa.Integer, nullable=False), + sa.Column('last_used', sa.DateTime, nullable=False), + sa.Column('cluster_name', sa.String(255)), mysql_engine='InnoDB', mysql_charset='utf8' ) - messages = Table( + messages = sa.Table( 'messages', meta, - Column('id', String(36), primary_key=True, nullable=False), - Column('project_id', String(255), nullable=False), - Column('request_id', String(255)), - Column('resource_type', String(36)), - Column('resource_uuid', String(255), nullable=True), - Column('event_id', String(255), nullable=False), - Column('message_level', String(255), nullable=False), - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean), - Column('expires_at', DateTime(timezone=False), index=True), - Column('detail_id', String(10), nullable=True), - Column('action_id', String(10), nullable=True), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('project_id', sa.String(255), nullable=False), + sa.Column('request_id', sa.String(255)), + sa.Column('resource_type', sa.String(36)), + sa.Column('resource_uuid', sa.String(255), nullable=True), + sa.Column('event_id', sa.String(255), nullable=False), + sa.Column('message_level', sa.String(255), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean), + sa.Column('expires_at', sa.DateTime(timezone=False), index=True), + sa.Column('detail_id', sa.String(10), nullable=True), + sa.Column('action_id', sa.String(10), nullable=True), mysql_engine='InnoDB', mysql_charset='utf8' ) - cluster = Table( + cluster = sa.Table( 'clusters', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(), default=False), - Column('id', Integer, primary_key=True, nullable=False), - Column('name', String(255), nullable=False), - Column('binary', String(255), nullable=False), - Column('disabled', Boolean(), default=False), - Column('disabled_reason', String(255)), - Column('race_preventer', Integer, nullable=False, default=0), - Column('replication_status', String(length=36), default='not-capable'), - Column('active_backend_id', String(length=255)), - Column('frozen', Boolean, nullable=False, default=False, - server_default=expression.false()), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(), default=False), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('name', sa.String(255), nullable=False), + sa.Column('binary', sa.String(255), nullable=False), + sa.Column('disabled', sa.Boolean(), default=False), + sa.Column('disabled_reason', sa.String(255)), + sa.Column('race_preventer', sa.Integer, nullable=False, default=0), + sa.Column( + 'replication_status', + sa.String(length=36), + default='not-capable'), + sa.Column('active_backend_id', sa.String(length=255)), + sa.Column( + 'frozen', + sa.Boolean, + nullable=False, + default=False, + server_default=expression.false()), # To remove potential races on creation we have a constraint set on # name and race_preventer fields, and we set value on creation to 0, so # 2 clusters with the same name will fail this constraint. On deletion # we change this field to the same value as the id which will be unique # and will not conflict with the creation of another cluster with the # same name. - UniqueConstraint('name', 'binary', 'race_preventer'), + sa.UniqueConstraint('name', 'binary', 'race_preventer'), mysql_engine='InnoDB', mysql_charset='utf8', ) - workers = Table( + workers = sa.Table( 'workers', meta, - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean(), default=False), - Column('id', Integer, primary_key=True), - Column('resource_type', String(40), nullable=False), - Column('resource_id', String(36), nullable=False), - Column('status', String(255), nullable=False), - Column('service_id', Integer, ForeignKey('services.id'), - nullable=True, index=True), - Column('race_preventer', Integer, nullable=False, default=0, - server_default=text('0')), - UniqueConstraint('resource_type', 'resource_id'), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean(), default=False), + sa.Column('id', sa.Integer, primary_key=True), + sa.Column('resource_type', sa.String(40), nullable=False), + sa.Column('resource_id', sa.String(36), nullable=False), + sa.Column('status', sa.String(255), nullable=False), + sa.Column( + 'service_id', + sa.Integer, + sa.ForeignKey('services.id'), + nullable=True, + index=True), + sa.Column( + 'race_preventer', + sa.Integer, + nullable=False, + default=0, + server_default=sa.text('0')), + sa.UniqueConstraint('resource_type', 'resource_id'), mysql_engine='InnoDB', mysql_charset='utf8', ) - group_types = Table( + group_types = sa.Table( 'group_types', meta, - Column('id', String(36), primary_key=True, nullable=False), - Column('name', String(255), nullable=False), - Column('description', String(255)), - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean), - Column('is_public', Boolean), + sa.Column('id', sa.String(36), primary_key=True, nullable=False), + sa.Column('name', sa.String(255), nullable=False), + sa.Column('description', sa.String(255)), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean), + sa.Column('is_public', sa.Boolean), mysql_engine='InnoDB', mysql_charset='utf8', ) - group_type_specs = Table( + group_type_specs = sa.Table( 'group_type_specs', meta, - Column('id', Integer, primary_key=True, nullable=False), - Column('key', String(255)), - Column('value', String(255)), - Column('group_type_id', String(36), - ForeignKey('group_types.id'), - nullable=False, - index=True), - Column('created_at', DateTime(timezone=False)), - Column('updated_at', DateTime(timezone=False)), - Column('deleted_at', DateTime(timezone=False)), - Column('deleted', Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('key', sa.String(255)), + sa.Column('value', sa.String(255)), + sa.Column( + 'group_type_id', + sa.String(36), + sa.ForeignKey('group_types.id'), + nullable=False, + index=True), + sa.Column('created_at', sa.DateTime(timezone=False)), + sa.Column('updated_at', sa.DateTime(timezone=False)), + sa.Column('deleted_at', sa.DateTime(timezone=False)), + sa.Column('deleted', sa.Boolean), mysql_engine='InnoDB', mysql_charset='utf8', ) - group_type_projects = Table( + group_type_projects = sa.Table( 'group_type_projects', meta, - Column('id', Integer, primary_key=True, nullable=False), - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('group_type_id', String(36), - ForeignKey('group_types.id')), - Column('project_id', String(length=255)), - Column('deleted', Boolean(create_constraint=True, name=None)), - UniqueConstraint('group_type_id', 'project_id', 'deleted'), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column( + 'group_type_id', + sa.String(36), + sa.ForeignKey('group_types.id')), + sa.Column('project_id', sa.String(length=255)), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), + sa.UniqueConstraint('group_type_id', 'project_id', 'deleted'), mysql_engine='InnoDB', mysql_charset='utf8', ) - grp_vt_mapping = Table( + grp_vt_mapping = sa.Table( 'group_volume_type_mapping', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('deleted', Boolean), - Column('id', Integer, primary_key=True, nullable=False), - Column('volume_type_id', String(36), ForeignKey('volume_types.id'), - nullable=False, - index=True), - Column('group_id', String(36), - ForeignKey('groups.id'), nullable=False, - index=True), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column('deleted', sa.Boolean), + sa.Column('id', sa.Integer, primary_key=True, nullable=False), + sa.Column( + 'volume_type_id', + sa.String(36), + sa.ForeignKey('volume_types.id'), + nullable=False, + index=True), + sa.Column( + 'group_id', + sa.String(36), + sa.ForeignKey('groups.id'), + nullable=False, + index=True), mysql_engine='InnoDB', mysql_charset='utf8', ) @@ -770,7 +860,7 @@ def define_tables(meta): def upgrade(migrate_engine): - meta = MetaData() + meta = sa.MetaData() meta.bind = migrate_engine # create all tables @@ -818,7 +908,7 @@ def upgrade(migrate_engine): migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % table) # Set default quota class values - quota_classes = Table('quota_classes', meta, autoload=True) + quota_classes = sa.Table('quota_classes', meta, autoload=True) qci = quota_classes.insert() qci.execute({'created_at': CREATED_AT, 'class_name': CLASS_NAME, @@ -853,7 +943,7 @@ def upgrade(migrate_engine): 'hard_limit': CONF.quota_groups, 'deleted': False, }) - workers = Table('workers', meta, autoload=True) + workers = sa.Table('workers', meta, autoload=True) # This is only necessary for mysql, and since the table is not in use this # will only be a schema update. @@ -881,8 +971,8 @@ def upgrade(migrate_engine): 'status': 'OK'}) # Create default group type - group_types = Table('group_types', meta, autoload=True) - group_type_specs = Table('group_type_specs', meta, autoload=True) + group_types = sa.Table('group_types', meta, autoload=True) + group_type_specs = sa.Table('group_type_specs', meta, autoload=True) now = timeutils.utcnow() grp_type_id = "%s" % uuid.uuid4() @@ -916,9 +1006,9 @@ def upgrade(migrate_engine): # prefix such as 'volumes_' or 'gigabytes_' to volume_type_name it # will exceed the db length limit. - quota_usages = Table('quota_usages', meta, autoload=True) + quota_usages = sa.Table('quota_usages', meta, autoload=True) try: - quota_usages.c.resource.alter(type=String(300)) + quota_usages.c.resource.alter(type=sa.String(300)) except Exception: # On MariaDB, max length varies depending on the version and the InnoDB # page size [1], so it is possible to have error 1071 ('Specified key @@ -930,7 +1020,7 @@ def upgrade(migrate_engine): raise # Create default volume type - vol_types = Table("volume_types", meta, autoload=True) + vol_types = sa.Table("volume_types", meta, autoload=True) volume_type_dict = { 'id': str(uuid.uuid4()), 'name': volume_types.DEFAULT_VOLUME_TYPE, diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py b/cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py index e6a5b8e400d..67cbb4c4aa1 100644 --- a/cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py +++ b/cinder/db/sqlalchemy/migrate_repo/versions/136_make_vol_type_col_non_nullable.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -from sqlalchemy import MetaData, Table +import sqlalchemy as sa from cinder import exception from cinder.i18n import _ @@ -19,11 +19,11 @@ from cinder.i18n import _ def upgrade(migrate_engine): """Make volume_type columns non-nullable""" - meta = MetaData(bind=migrate_engine) + meta = sa.MetaData(bind=migrate_engine) # Update volume_type columns in tables to not allow null value - volumes = Table('volumes', meta, autoload=True) + volumes = sa.Table('volumes', meta, autoload=True) try: volumes.c.volume_type_id.alter(nullable=False) @@ -34,7 +34,7 @@ def upgrade(migrate_engine): 'There are still untyped volumes unmigrated.')) raise exception.ValidationError(msg) - snapshots = Table('snapshots', meta, autoload=True) + snapshots = sa.Table('snapshots', meta, autoload=True) try: snapshots.c.volume_type_id.alter(nullable=False) @@ -45,7 +45,7 @@ def upgrade(migrate_engine): 'There are still %(count)i untyped snapshots unmigrated.')) raise exception.ValidationError(msg) - encryption = Table('encryption', meta, autoload=True) + encryption = sa.Table('encryption', meta, autoload=True) # since volume_type is a mandatory arg when creating encryption # volume_type_id column won't contain any null values so we can directly # alter it diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py b/cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py index 285ff7f4bc3..1d17bfecedf 100644 --- a/cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py +++ b/cinder/db/sqlalchemy/migrate_repo/versions/140_create_project_default_volume_type.py @@ -13,28 +13,33 @@ # License for the specific language governing permissions and limitations # under the License. -from sqlalchemy import Boolean, Column, DateTime -from sqlalchemy import MetaData, String, Table, ForeignKey +import sqlalchemy as sa def upgrade(migrate_engine): - meta = MetaData() + meta = sa.MetaData() meta.bind = migrate_engine # This is required to establish foreign key dependency between # volume_type_id and volume_types.id columns. See L#34-35 - Table('volume_types', meta, autoload=True) + sa.Table('volume_types', meta, autoload=True) - default_volume_types = Table( + default_volume_types = sa.Table( 'default_volume_types', meta, - Column('created_at', DateTime), - Column('updated_at', DateTime), - Column('deleted_at', DateTime), - Column('volume_type_id', String(36), - ForeignKey('volume_types.id'), index=True), - Column('project_id', String(length=255), primary_key=True, - nullable=False), - Column('deleted', Boolean(create_constraint=True, name=None)), + sa.Column('created_at', sa.DateTime), + sa.Column('updated_at', sa.DateTime), + sa.Column('deleted_at', sa.DateTime), + sa.Column( + 'volume_type_id', + sa.String(36), + sa.ForeignKey('volume_types.id'), + index=True), + sa.Column( + 'project_id', + sa.String(length=255), + primary_key=True, + nullable=False), + sa.Column('deleted', sa.Boolean(create_constraint=True, name=None)), mysql_engine='InnoDB', mysql_charset='utf8' ) diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py b/cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py index 81ed7bb2d50..e48ec2ac203 100644 --- a/cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py +++ b/cinder/db/sqlalchemy/migrate_repo/versions/141_add_quota_usage_unique_constraint.py @@ -13,8 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. -from sqlalchemy import Boolean, Column, MetaData, Table from migrate.changeset import constraint +import sqlalchemy as sa def upgrade(migrate_engine): @@ -25,12 +25,13 @@ def upgrade(migrate_engine): """ # There's no need to set the race_preventer field for existing DB entries, # since the race we want to prevent is only on creation. - meta = MetaData(bind=migrate_engine) - quota_usages = Table('quota_usages', meta, autoload=True) + meta = sa.MetaData(bind=migrate_engine) + quota_usages = sa.Table('quota_usages', meta, autoload=True) if not hasattr(quota_usages.c, 'race_preventer'): - quota_usages.create_column(Column('race_preventer', Boolean, - nullable=True)) + quota_usages.create_column( + sa.Column('race_preventer', sa.Boolean, nullable=True)) + unique = constraint.UniqueConstraint( 'project_id', 'resource', 'race_preventer', table=quota_usages) diff --git a/cinder/db/sqlalchemy/models.py b/cinder/db/sqlalchemy/models.py index 70433bfdd5e..33301b03356 100644 --- a/cinder/db/sqlalchemy/models.py +++ b/cinder/db/sqlalchemy/models.py @@ -23,11 +23,12 @@ SQLAlchemy models for cinder data. from oslo_config import cfg from oslo_db.sqlalchemy import models from oslo_utils import timeutils -from sqlalchemy import and_, func, select -from sqlalchemy import bindparam -from sqlalchemy import Column, Integer, String, Text, schema, Index +import sqlalchemy as sa +# imports needed for cinderlib +from sqlalchemy import Column, String, Text # noqa: F401 from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy import ForeignKey, DateTime, Boolean, UniqueConstraint +from sqlalchemy import func +from sqlalchemy import schema from sqlalchemy.orm import backref, column_property, relationship, validates @@ -43,8 +44,8 @@ class CinderBase(models.TimestampMixin, # TODO(rpodolyaka): reuse models.SoftDeleteMixin in the next stage # of implementing of BP db-cleanup - deleted_at = Column(DateTime) - deleted = Column(Boolean, default=False) + deleted_at = sa.Column(sa.DateTime) + deleted = sa.Column(sa.Boolean, default=False) metadata = None @staticmethod @@ -64,36 +65,38 @@ class Service(BASE, CinderBase): """Represents a running service on a host.""" __tablename__ = 'services' - id = Column(Integer, primary_key=True) - uuid = Column(String(36), nullable=True, index=True) - cluster_name = Column(String(255), nullable=True) - host = Column(String(255)) # , ForeignKey('hosts.id')) - binary = Column(String(255)) + id = sa.Column(sa.Integer, primary_key=True) + uuid = sa.Column(sa.String(36), nullable=True, index=True) + cluster_name = sa.Column(sa.String(255), nullable=True) + host = sa.Column(sa.String(255)) # , sa.ForeignKey('hosts.id')) + binary = sa.Column(sa.String(255)) # We want to overwrite default updated_at definition so we timestamp at # creation as well, so we only need to check updated_at for the heartbeat - updated_at = Column(DateTime, default=timeutils.utcnow, - onupdate=timeutils.utcnow) - topic = Column(String(255)) - report_count = Column(Integer, nullable=False, default=0) - disabled = Column(Boolean, default=False) - availability_zone = Column(String(255), default='cinder') - disabled_reason = Column(String(255)) + updated_at = sa.Column( + sa.DateTime, + default=timeutils.utcnow, + onupdate=timeutils.utcnow) + topic = sa.Column(sa.String(255)) + report_count = sa.Column(sa.Integer, nullable=False, default=0) + disabled = sa.Column(sa.Boolean, default=False) + availability_zone = sa.Column(sa.String(255), default='cinder') + disabled_reason = sa.Column(sa.String(255)) # adding column modified_at to contain timestamp # for manual enable/disable of cinder services # updated_at column will now contain timestamps for # periodic updates - modified_at = Column(DateTime) + modified_at = sa.Column(sa.DateTime) # Version columns to support rolling upgrade. These report the max RPC API # and objects versions that the manager of the service is able to support. - rpc_current_version = Column(String(36)) - object_current_version = Column(String(36)) + rpc_current_version = sa.Column(sa.String(36)) + object_current_version = sa.Column(sa.String(36)) # replication_status can be: enabled, disabled, not-capable, error, # failed-over or not-configured - replication_status = Column(String(36), default="not-capable") - active_backend_id = Column(String(255)) - frozen = Column(Boolean, nullable=False, default=False) + replication_status = sa.Column(sa.String(36), default="not-capable") + active_backend_id = sa.Column(sa.String(255)) + frozen = sa.Column(sa.Boolean, nullable=False, default=False) cluster = relationship('Cluster', backref='services', @@ -112,42 +115,42 @@ class Cluster(BASE, CinderBase): # change this field to the same value as the id which will be unique and # will not conflict with the creation of another cluster with the same # name. - __table_args__ = (UniqueConstraint('name', 'binary', 'race_preventer'), + __table_args__ = (sa.UniqueConstraint('name', 'binary', 'race_preventer'), CinderBase.__table_args__) - id = Column(Integer, primary_key=True) + id = sa.Column(sa.Integer, primary_key=True) # NOTE(geguileo): Name is constructed in the same way that Server.host but # using cluster configuration option instead of host. - name = Column(String(255), nullable=False) - binary = Column(String(255), nullable=False) - disabled = Column(Boolean, default=False) - disabled_reason = Column(String(255)) - race_preventer = Column(Integer, nullable=False, default=0) + name = sa.Column(sa.String(255), nullable=False) + binary = sa.Column(sa.String(255), nullable=False) + disabled = sa.Column(sa.Boolean, default=False) + disabled_reason = sa.Column(sa.String(255)) + race_preventer = sa.Column(sa.Integer, nullable=False, default=0) - replication_status = Column(String(36), default="not-capable") - active_backend_id = Column(String(255)) - frozen = Column(Boolean, nullable=False, default=False) + replication_status = sa.Column(sa.String(36), default="not-capable") + active_backend_id = sa.Column(sa.String(255)) + frozen = sa.Column(sa.Boolean, nullable=False, default=False) # Last heartbeat reported by any of the services of this cluster. This is # not deferred since we always want to load this field. last_heartbeat = column_property( - select([func.max(Service.updated_at)]). - where(and_(Service.cluster_name == name, ~Service.deleted)). + sa.select([func.max(Service.updated_at)]). + where(sa.and_(Service.cluster_name == name, ~Service.deleted)). correlate_except(Service), deferred=False) # Number of existing services for this cluster num_hosts = column_property( - select([func.count(Service.id)]). - where(and_(Service.cluster_name == name, ~Service.deleted)). + sa.select([func.count(Service.id)]). + where(sa.and_(Service.cluster_name == name, ~Service.deleted)). correlate_except(Service), group='services_summary', deferred=True) # Number of services that are down for this cluster num_down_hosts = column_property( - select([func.count(Service.id)]). - where(and_(Service.cluster_name == name, - ~Service.deleted, - Service.updated_at < bindparam('expired'))). + sa.select([func.count(Service.id)]). + where(sa.and_(Service.cluster_name == name, + ~Service.deleted, + Service.updated_at < sa.bindparam('expired'))). correlate_except(Service), group='services_summary', deferred=True) @@ -161,55 +164,55 @@ class Cluster(BASE, CinderBase): class ConsistencyGroup(BASE, CinderBase): """Represents a consistencygroup.""" __tablename__ = 'consistencygroups' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) - user_id = Column(String(255), nullable=False) - project_id = Column(String(255), nullable=False) + user_id = sa.Column(sa.String(255), nullable=False) + project_id = sa.Column(sa.String(255), nullable=False) - cluster_name = Column(String(255), nullable=True) - host = Column(String(255)) - availability_zone = Column(String(255)) - name = Column(String(255)) - description = Column(String(255)) - volume_type_id = Column(String(255)) - status = Column(String(255)) - cgsnapshot_id = Column(String(36)) - source_cgid = Column(String(36)) + cluster_name = sa.Column(sa.String(255), nullable=True) + host = sa.Column(sa.String(255)) + availability_zone = sa.Column(sa.String(255)) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) + volume_type_id = sa.Column(sa.String(255)) + status = sa.Column(sa.String(255)) + cgsnapshot_id = sa.Column(sa.String(36)) + source_cgid = sa.Column(sa.String(36)) class Group(BASE, CinderBase): """Represents a generic volume group.""" __tablename__ = 'groups' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) - user_id = Column(String(255), nullable=False) - project_id = Column(String(255), nullable=False) + user_id = sa.Column(sa.String(255), nullable=False) + project_id = sa.Column(sa.String(255), nullable=False) - cluster_name = Column(String(255)) - host = Column(String(255)) - availability_zone = Column(String(255)) - name = Column(String(255)) - description = Column(String(255)) - status = Column(String(255)) - group_type_id = Column(String(36)) - group_snapshot_id = Column(String(36)) - source_group_id = Column(String(36)) + cluster_name = sa.Column(sa.String(255)) + host = sa.Column(sa.String(255)) + availability_zone = sa.Column(sa.String(255)) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) + status = sa.Column(sa.String(255)) + group_type_id = sa.Column(sa.String(36)) + group_snapshot_id = sa.Column(sa.String(36)) + source_group_id = sa.Column(sa.String(36)) - replication_status = Column(String(255)) + replication_status = sa.Column(sa.String(255)) class CGSnapshot(BASE, CinderBase): """Represents a cgsnapshot.""" __tablename__ = 'cgsnapshots' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) - consistencygroup_id = Column(String(36), index=True) - user_id = Column(String(255), nullable=False) - project_id = Column(String(255), nullable=False) + consistencygroup_id = sa.Column(sa.String(36), index=True) + user_id = sa.Column(sa.String(255), nullable=False) + project_id = sa.Column(sa.String(255), nullable=False) - name = Column(String(255)) - description = Column(String(255)) - status = Column(String(255)) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) + status = sa.Column(sa.String(255)) consistencygroup = relationship( ConsistencyGroup, @@ -221,16 +224,16 @@ class CGSnapshot(BASE, CinderBase): class GroupSnapshot(BASE, CinderBase): """Represents a group snapshot.""" __tablename__ = 'group_snapshots' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) - group_id = Column(String(36), nullable=False, index=True) - user_id = Column(String(255)) - project_id = Column(String(255)) + group_id = sa.Column(sa.String(36), nullable=False, index=True) + user_id = sa.Column(sa.String(255)) + project_id = sa.Column(sa.String(255)) - name = Column(String(255)) - description = Column(String(255)) - status = Column(String(255)) - group_type_id = Column(String(36)) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) + status = sa.Column(sa.String(255)) + group_type_id = sa.Column(sa.String(36)) group = relationship( Group, @@ -242,12 +245,13 @@ class GroupSnapshot(BASE, CinderBase): class Volume(BASE, CinderBase): """Represents a block storage device that can be attached to a vm.""" __tablename__ = 'volumes' - __table_args__ = (Index('volumes_service_uuid_idx', - 'deleted', 'service_uuid'), - CinderBase.__table_args__) + __table_args__ = ( + sa.Index('volumes_service_uuid_idx', 'deleted', 'service_uuid'), + CinderBase.__table_args__, + ) - id = Column(String(36), primary_key=True) - _name_id = Column(String(36)) # Don't access/modify this directly! + id = sa.Column(sa.String(36), primary_key=True) + _name_id = sa.Column(sa.String(36)) # Don't access/modify this directly! @property def name_id(self): @@ -261,47 +265,47 @@ class Volume(BASE, CinderBase): def name(self): return CONF.volume_name_template % self.name_id - ec2_id = Column(Integer) - user_id = Column(String(255)) - project_id = Column(String(255)) + ec2_id = sa.Column(sa.Integer) + user_id = sa.Column(sa.String(255)) + project_id = sa.Column(sa.String(255)) - snapshot_id = Column(String(36)) + snapshot_id = sa.Column(sa.String(36)) - cluster_name = Column(String(255), nullable=True) - host = Column(String(255)) # , ForeignKey('hosts.id')) - size = Column(Integer) - availability_zone = Column(String(255)) # TODO(vish): foreign key? - status = Column(String(255)) # TODO(vish): enum? - attach_status = Column(String(255)) # TODO(vish): enum - migration_status = Column(String(255)) + cluster_name = sa.Column(sa.String(255), nullable=True) + host = sa.Column(sa.String(255)) # , sa.ForeignKey('hosts.id')) + size = sa.Column(sa.Integer) + availability_zone = sa.Column(sa.String(255)) # TODO(vish): foreign key? + status = sa.Column(sa.String(255)) # TODO(vish): enum? + attach_status = sa.Column(sa.String(255)) # TODO(vish): enum + migration_status = sa.Column(sa.String(255)) - scheduled_at = Column(DateTime) - launched_at = Column(DateTime) - terminated_at = Column(DateTime) + scheduled_at = sa.Column(sa.DateTime) + launched_at = sa.Column(sa.DateTime) + terminated_at = sa.Column(sa.DateTime) - display_name = Column(String(255)) - display_description = Column(String(255)) + display_name = sa.Column(sa.String(255)) + display_description = sa.Column(sa.String(255)) - provider_location = Column(String(255)) - provider_auth = Column(String(255)) - provider_geometry = Column(String(255)) - provider_id = Column(String(255)) + provider_location = sa.Column(sa.String(255)) + provider_auth = sa.Column(sa.String(255)) + provider_geometry = sa.Column(sa.String(255)) + provider_id = sa.Column(sa.String(255)) - volume_type_id = Column(String(36)) - source_volid = Column(String(36)) - encryption_key_id = Column(String(36)) + volume_type_id = sa.Column(sa.String(36)) + source_volid = sa.Column(sa.String(36)) + encryption_key_id = sa.Column(sa.String(36)) - consistencygroup_id = Column(String(36), index=True) - group_id = Column(String(36), index=True) + consistencygroup_id = sa.Column(sa.String(36), index=True) + group_id = sa.Column(sa.String(36), index=True) - bootable = Column(Boolean, default=False) - multiattach = Column(Boolean, default=False) + bootable = sa.Column(sa.Boolean, default=False) + multiattach = sa.Column(sa.Boolean, default=False) - replication_status = Column(String(255)) - replication_extended_status = Column(String(255)) - replication_driver_data = Column(String(255)) + replication_status = sa.Column(sa.String(255)) + replication_extended_status = sa.Column(sa.String(255)) + replication_driver_data = sa.Column(sa.String(255)) - previous_status = Column(String(255)) + previous_status = sa.Column(sa.String(255)) consistencygroup = relationship( ConsistencyGroup, @@ -315,22 +319,26 @@ class Volume(BASE, CinderBase): foreign_keys=group_id, primaryjoin='Volume.group_id == Group.id') - service_uuid = Column(String(36), index=True) + service_uuid = sa.Column(sa.String(36), index=True) service = relationship(Service, backref="volumes", foreign_keys=service_uuid, primaryjoin='Volume.service_uuid == Service.uuid') - shared_targets = Column(Boolean, default=True) # make an FK of service? + # make an FK of service? + shared_targets = sa.Column(sa.Boolean, default=True) class VolumeMetadata(BASE, CinderBase): """Represents a metadata key/value pair for a volume.""" __tablename__ = 'volume_metadata' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=False, - index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + volume_id = sa.Column( + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True) volume = relationship(Volume, backref="volume_metadata", foreign_keys=volume_id, primaryjoin='and_(' @@ -341,11 +349,14 @@ class VolumeMetadata(BASE, CinderBase): class VolumeAdminMetadata(BASE, CinderBase): """Represents an administrator metadata key/value pair for a volume.""" __tablename__ = 'volume_admin_metadata' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=False, - index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + volume_id = sa.Column( + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True) volume = relationship(Volume, backref="volume_admin_metadata", foreign_keys=volume_id, primaryjoin='and_(' @@ -356,38 +367,42 @@ class VolumeAdminMetadata(BASE, CinderBase): class VolumeAttachment(BASE, CinderBase): """Represents a volume attachment for a vm.""" __tablename__ = 'volume_attachment' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) - volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=False, - index=True) + volume_id = sa.Column( + sa.String(36), + sa.ForeignKey('volumes.id'), + nullable=False, + index=True) volume = relationship(Volume, backref="volume_attachment", foreign_keys=volume_id, primaryjoin='and_(' 'VolumeAttachment.volume_id == Volume.id,' 'VolumeAttachment.deleted == False)') - instance_uuid = Column(String(36)) - attached_host = Column(String(255)) - mountpoint = Column(String(255)) - attach_time = Column(DateTime) - detach_time = Column(DateTime) - attach_status = Column(String(255)) - attach_mode = Column(String(255)) - connection_info = Column(Text) + instance_uuid = sa.Column(sa.String(36)) + attached_host = sa.Column(sa.String(255)) + mountpoint = sa.Column(sa.String(255)) + attach_time = sa.Column(sa.DateTime) + detach_time = sa.Column(sa.DateTime) + attach_status = sa.Column(sa.String(255)) + attach_mode = sa.Column(sa.String(255)) + connection_info = sa.Column(sa.Text) # Stores a serialized json dict of host connector information from brick. - connector = Column(Text) + connector = sa.Column(sa.Text) class VolumeType(BASE, CinderBase): """Represent possible volume_types of volumes offered.""" __tablename__ = "volume_types" - id = Column(String(36), primary_key=True) - name = Column(String(255)) - description = Column(String(255)) + id = sa.Column(sa.String(36), primary_key=True) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) # A reference to qos_specs entity - qos_specs_id = Column(String(36), - ForeignKey('quality_of_service_specs.id'), - index=True) - is_public = Column(Boolean, default=True) + qos_specs_id = sa.Column( + sa.String(36), + sa.ForeignKey('quality_of_service_specs.id'), + index=True) + is_public = sa.Column(sa.Boolean, default=True) volumes = relationship(Volume, backref=backref('volume_type', uselist=False), foreign_keys=id, @@ -399,10 +414,10 @@ class VolumeType(BASE, CinderBase): class GroupType(BASE, CinderBase): """Represent possible group_types of groups offered.""" __tablename__ = "group_types" - id = Column(String(36), primary_key=True) - name = Column(String(255)) - description = Column(String(255)) - is_public = Column(Boolean, default=True) + id = sa.Column(sa.String(36), primary_key=True) + name = sa.Column(sa.String(255)) + description = sa.Column(sa.String(255)) + is_public = sa.Column(sa.Boolean, default=True) groups = relationship(Group, backref=backref('group_type', uselist=False), foreign_keys=id, @@ -414,13 +429,17 @@ class GroupType(BASE, CinderBase): class GroupVolumeTypeMapping(BASE, CinderBase): """Represent mapping between groups and volume_types.""" __tablename__ = "group_volume_type_mapping" - id = Column(Integer, primary_key=True, nullable=False) - volume_type_id = Column(String(36), - ForeignKey('volume_types.id'), - nullable=False, index=True) - group_id = Column(String(36), - ForeignKey('groups.id'), - nullable=False, index=True) + id = sa.Column(sa.Integer, primary_key=True, nullable=False) + volume_type_id = sa.Column( + sa.String(36), + sa.ForeignKey('volume_types.id'), + nullable=False, + index=True) + group_id = sa.Column( + sa.String(36), + sa.ForeignKey('groups.id'), + nullable=False, + index=True) group = relationship( Group, @@ -439,11 +458,13 @@ class VolumeTypeProjects(BASE, CinderBase): "volume_type_id", "project_id", "deleted", name="uniq_volume_type_projects0volume_type_id0project_id0deleted"), CinderBase.__table_args__) - id = Column(Integer, primary_key=True) - volume_type_id = Column(String, ForeignKey('volume_types.id'), - nullable=False) - project_id = Column(String(255)) - deleted = Column(Integer, default=0) + id = sa.Column(sa.Integer, primary_key=True) + volume_type_id = sa.Column( + sa.String, + sa.ForeignKey('volume_types.id'), + nullable=False) + project_id = sa.Column(sa.String(255)) + deleted = sa.Column(sa.Integer, default=0) volume_type = relationship( VolumeType, @@ -461,10 +482,12 @@ class GroupTypeProjects(BASE, CinderBase): "group_type_id", "project_id", "deleted", name="uniq_group_type_projects0group_type_id0project_id0deleted"), CinderBase.__table_args__) - id = Column(Integer, primary_key=True) - group_type_id = Column(String, ForeignKey('group_types.id'), - nullable=False) - project_id = Column(String(255)) + id = sa.Column(sa.Integer, primary_key=True) + group_type_id = sa.Column( + sa.String, + sa.ForeignKey('group_types.id'), + nullable=False) + project_id = sa.Column(sa.String(255)) group_type = relationship( GroupType, @@ -478,12 +501,14 @@ class GroupTypeProjects(BASE, CinderBase): class VolumeTypeExtraSpecs(BASE, CinderBase): """Represents additional specs as key/value pairs for a volume_type.""" __tablename__ = 'volume_type_extra_specs' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - volume_type_id = Column(String(36), - ForeignKey('volume_types.id'), - nullable=False, index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + volume_type_id = sa.Column( + sa.String(36), + sa.ForeignKey('volume_types.id'), + nullable=False, + index=True) volume_type = relationship( VolumeType, backref="extra_specs", @@ -497,12 +522,14 @@ class VolumeTypeExtraSpecs(BASE, CinderBase): class GroupTypeSpecs(BASE, CinderBase): """Represents additional specs as key/value pairs for a group_type.""" __tablename__ = 'group_type_specs' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - group_type_id = Column(String(36), - ForeignKey('group_types.id'), - nullable=False, index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + group_type_id = sa.Column( + sa.String(36), + sa.ForeignKey('group_types.id'), + nullable=False, + index=True) group_type = relationship( GroupType, backref="group_specs", @@ -516,9 +543,12 @@ class GroupTypeSpecs(BASE, CinderBase): class DefaultVolumeTypes(BASE, CinderBase): """Represent projects associated volume_types.""" __tablename__ = "default_volume_types" - volume_type_id = Column(String, ForeignKey('volume_types.id'), - nullable=False, index=True) - project_id = Column(String(255), primary_key=True) + volume_type_id = sa.Column( + sa.String, + sa.ForeignKey('volume_types.id'), + nullable=False, + index=True) + project_id = sa.Column(sa.String(255), primary_key=True) volume_type = relationship( VolumeType, foreign_keys=volume_type_id, @@ -561,10 +591,10 @@ class QualityOfServiceSpecs(BASE, CinderBase): UUID-8 UUID-5 min-iops 200 """ __tablename__ = 'quality_of_service_specs' - id = Column(String(36), primary_key=True) - specs_id = Column(String(36), ForeignKey(id), index=True) - key = Column(String(255)) - value = Column(String(255)) + id = sa.Column(sa.String(36), primary_key=True) + specs_id = sa.Column(sa.String(36), sa.ForeignKey(id), index=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) specs = relationship( "QualityOfServiceSpecs", @@ -587,11 +617,17 @@ class QualityOfServiceSpecs(BASE, CinderBase): class VolumeGlanceMetadata(BASE, CinderBase): """Glance metadata for a bootable volume.""" __tablename__ = 'volume_glance_metadata' - id = Column(Integer, primary_key=True, nullable=False) - volume_id = Column(String(36), ForeignKey('volumes.id'), index=True) - snapshot_id = Column(String(36), ForeignKey('snapshots.id'), index=True) - key = Column(String(255)) - value = Column(Text) + id = sa.Column(sa.Integer, primary_key=True, nullable=False) + volume_id = sa.Column( + sa.String(36), + sa.ForeignKey('volumes.id'), + index=True) + snapshot_id = sa.Column( + sa.String(36), + sa.ForeignKey('snapshots.id'), + index=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.Text) volume = relationship(Volume, backref="volume_glance_metadata", foreign_keys=volume_id, primaryjoin='and_(' @@ -610,14 +646,14 @@ class Quota(BASE, CinderBase): """ __tablename__ = 'quotas' - id = Column(Integer, primary_key=True) + id = sa.Column(sa.Integer, primary_key=True) - project_id = Column(String(255), index=True) + project_id = sa.Column(sa.String(255), index=True) - resource = Column(String(255)) - hard_limit = Column(Integer, nullable=True) + resource = sa.Column(sa.String(255)) + hard_limit = sa.Column(sa.Integer, nullable=True) # TODO: (X release): Remove allocated, belonged to nested quotas - allocated = Column(Integer, default=0) + allocated = sa.Column(sa.Integer, default=0) class QuotaClass(BASE, CinderBase): @@ -629,12 +665,12 @@ class QuotaClass(BASE, CinderBase): """ __tablename__ = 'quota_classes' - id = Column(Integer, primary_key=True) + id = sa.Column(sa.Integer, primary_key=True) - class_name = Column(String(255), index=True) + class_name = sa.Column(sa.String(255), index=True) - resource = Column(String(255)) - hard_limit = Column(Integer, nullable=True) + resource = sa.Column(sa.String(255)) + hard_limit = sa.Column(sa.Integer, nullable=True) class QuotaUsage(BASE, CinderBase): @@ -645,25 +681,25 @@ class QuotaUsage(BASE, CinderBase): # we do soft deletes and there could be duplicated entries, so we add the # race_preventer field. __table_args__ = ( - UniqueConstraint('project_id', 'resource', 'race_preventer'), + sa.UniqueConstraint('project_id', 'resource', 'race_preventer'), CinderBase.__table_args__) - id = Column(Integer, primary_key=True) + id = sa.Column(sa.Integer, primary_key=True) - project_id = Column(String(255), index=True) - resource = Column(String(300), index=True) + project_id = sa.Column(sa.String(255), index=True) + resource = sa.Column(sa.String(300), index=True) - in_use = Column(Integer) - reserved = Column(Integer) + in_use = sa.Column(sa.Integer) + reserved = sa.Column(sa.Integer) @property def total(self): return self.in_use + self.reserved - until_refresh = Column(Integer, nullable=True) + until_refresh = sa.Column(sa.Integer, nullable=True) # To prevent races during creation on quota_reserve method - race_preventer = Column(Boolean, nullable=True, default=True) + race_preventer = sa.Column(sa.Boolean, nullable=True, default=True) @staticmethod def delete_values(): @@ -676,26 +712,32 @@ class Reservation(BASE, CinderBase): """Represents a resource reservation for quotas.""" __tablename__ = 'reservations' - __table_args__ = (Index('reservations_deleted_expire_idx', - 'deleted', 'expire'), - Index('reservations_deleted_uuid_idx', - 'deleted', 'uuid'), - CinderBase.__table_args__) + __table_args__ = ( + sa.Index('reservations_deleted_expire_idx', 'deleted', 'expire'), + sa.Index('reservations_deleted_uuid_idx', 'deleted', 'uuid'), + CinderBase.__table_args__, + ) - id = Column(Integer, primary_key=True) - uuid = Column(String(36), nullable=False) + id = sa.Column(sa.Integer, primary_key=True) + uuid = sa.Column(sa.String(36), nullable=False) - usage_id = Column(Integer, ForeignKey('quota_usages.id'), nullable=True, - index=True) + usage_id = sa.Column( + sa.Integer, + sa.ForeignKey('quota_usages.id'), + nullable=True, + index=True) # TODO: (X release): Remove allocated_id, belonged to nested quotas - allocated_id = Column(Integer, ForeignKey('quotas.id'), nullable=True, - index=True) + allocated_id = sa.Column( + sa.Integer, + sa.ForeignKey('quotas.id'), + nullable=True, + index=True) - project_id = Column(String(255), index=True) - resource = Column(String(255)) + project_id = sa.Column(sa.String(255), index=True) + resource = sa.Column(sa.String(255)) - delta = Column(Integer) - expire = Column(DateTime, nullable=False) + delta = sa.Column(sa.Integer) + expire = sa.Column(sa.DateTime, nullable=False) usage = relationship( "QuotaUsage", @@ -712,7 +754,7 @@ class Reservation(BASE, CinderBase): class Snapshot(BASE, CinderBase): """Represents a snapshot of volume.""" __tablename__ = 'snapshots' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) @property def name(self): @@ -722,25 +764,25 @@ class Snapshot(BASE, CinderBase): def volume_name(self): return self.volume.name # pylint: disable=E1101 - user_id = Column(String(255)) - project_id = Column(String(255)) + user_id = sa.Column(sa.String(255)) + project_id = sa.Column(sa.String(255)) - volume_id = Column(String(36), index=True) - cgsnapshot_id = Column(String(36), index=True) - group_snapshot_id = Column(String(36), index=True) - status = Column(String(255)) - progress = Column(String(255)) - volume_size = Column(Integer) + volume_id = sa.Column(sa.String(36), index=True) + cgsnapshot_id = sa.Column(sa.String(36), index=True) + group_snapshot_id = sa.Column(sa.String(36), index=True) + status = sa.Column(sa.String(255)) + progress = sa.Column(sa.String(255)) + volume_size = sa.Column(sa.Integer) - display_name = Column(String(255)) - display_description = Column(String(255)) + display_name = sa.Column(sa.String(255)) + display_description = sa.Column(sa.String(255)) - encryption_key_id = Column(String(36)) - volume_type_id = Column(String(36)) + encryption_key_id = sa.Column(sa.String(36)) + volume_type_id = sa.Column(sa.String(36)) - provider_location = Column(String(255)) - provider_id = Column(String(255)) - provider_auth = Column(String(255)) + provider_location = sa.Column(sa.String(255)) + provider_id = sa.Column(sa.String(255)) + provider_auth = sa.Column(sa.String(255)) volume = relationship(Volume, backref="snapshots", foreign_keys=volume_id, @@ -762,12 +804,14 @@ class Snapshot(BASE, CinderBase): class SnapshotMetadata(BASE, CinderBase): """Represents a metadata key/value pair for a snapshot.""" __tablename__ = 'snapshot_metadata' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - snapshot_id = Column(String(36), - ForeignKey('snapshots.id'), - nullable=False, index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + snapshot_id = sa.Column( + sa.String(36), + sa.ForeignKey('snapshots.id'), + nullable=False, + index=True) snapshot = relationship(Snapshot, backref="snapshot_metadata", foreign_keys=snapshot_id, primaryjoin='and_(' @@ -778,35 +822,35 @@ class SnapshotMetadata(BASE, CinderBase): class Backup(BASE, CinderBase): """Represents a backup of a volume to Swift.""" __tablename__ = 'backups' - id = Column(String(36), primary_key=True) + id = sa.Column(sa.String(36), primary_key=True) @property def name(self): return CONF.backup_name_template % self.id - user_id = Column(String(255), nullable=False) - project_id = Column(String(255), nullable=False) + user_id = sa.Column(sa.String(255), nullable=False) + project_id = sa.Column(sa.String(255), nullable=False) - volume_id = Column(String(36), nullable=False) - host = Column(String(255)) - availability_zone = Column(String(255)) - display_name = Column(String(255)) - display_description = Column(String(255)) - container = Column(String(255)) - parent_id = Column(String(36)) - status = Column(String(255)) - fail_reason = Column(String(255)) - service_metadata = Column(String(255)) - service = Column(String(255)) - size = Column(Integer) - object_count = Column(Integer) - temp_volume_id = Column(String(36)) - temp_snapshot_id = Column(String(36)) - num_dependent_backups = Column(Integer) - snapshot_id = Column(String(36)) - data_timestamp = Column(DateTime) - restore_volume_id = Column(String(36)) - encryption_key_id = Column(String(36)) + volume_id = sa.Column(sa.String(36), nullable=False) + host = sa.Column(sa.String(255)) + availability_zone = sa.Column(sa.String(255)) + display_name = sa.Column(sa.String(255)) + display_description = sa.Column(sa.String(255)) + container = sa.Column(sa.String(255)) + parent_id = sa.Column(sa.String(36)) + status = sa.Column(sa.String(255)) + fail_reason = sa.Column(sa.String(255)) + service_metadata = sa.Column(sa.String(255)) + service = sa.Column(sa.String(255)) + size = sa.Column(sa.Integer) + object_count = sa.Column(sa.Integer) + temp_volume_id = sa.Column(sa.String(36)) + temp_snapshot_id = sa.Column(sa.String(36)) + num_dependent_backups = sa.Column(sa.Integer) + snapshot_id = sa.Column(sa.String(36)) + data_timestamp = sa.Column(sa.DateTime) + restore_volume_id = sa.Column(sa.String(36)) + encryption_key_id = sa.Column(sa.String(36)) @validates('fail_reason') def validate_fail_reason(self, key, fail_reason): @@ -816,11 +860,14 @@ class Backup(BASE, CinderBase): class BackupMetadata(BASE, CinderBase): """Represents a metadata key/value pair for a backup.""" __tablename__ = 'backup_metadata' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - backup_id = Column(String(36), ForeignKey('backups.id'), nullable=False, - index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + backup_id = sa.Column( + sa.String(36), + sa.ForeignKey('backups.id'), + nullable=False, + index=True) backup = relationship(Backup, backref="backup_metadata", foreign_keys=backup_id, primaryjoin='and_(' @@ -836,12 +883,12 @@ class Encryption(BASE, CinderBase): """ __tablename__ = 'encryption' - encryption_id = Column(String(36), primary_key=True) - cipher = Column(String(255)) - key_size = Column(Integer) - provider = Column(String(255)) - control_location = Column(String(255)) - volume_type_id = Column(String(36), ForeignKey('volume_types.id')) + encryption_id = sa.Column(sa.String(36), primary_key=True) + cipher = sa.Column(sa.String(255)) + key_size = sa.Column(sa.Integer) + provider = sa.Column(sa.String(255)) + control_location = sa.Column(sa.String(255)) + volume_type_id = sa.Column(sa.String(36), sa.ForeignKey('volume_types.id')) volume_type = relationship( VolumeType, backref="encryption", @@ -855,16 +902,19 @@ class Encryption(BASE, CinderBase): class Transfer(BASE, CinderBase): """Represents a volume transfer request.""" __tablename__ = 'transfers' - id = Column(String(36), primary_key=True) - volume_id = Column(String(36), ForeignKey('volumes.id'), index=True) - display_name = Column(String(255)) - salt = Column(String(255)) - crypt_hash = Column(String(255)) - expires_at = Column(DateTime) - no_snapshots = Column(Boolean, default=False) - source_project_id = Column(String(255), nullable=True) - destination_project_id = Column(String(255), nullable=True) - accepted = Column(Boolean, default=False) + id = sa.Column(sa.String(36), primary_key=True) + volume_id = sa.Column( + sa.String(36), + sa.ForeignKey('volumes.id'), + index=True) + display_name = sa.Column(sa.String(255)) + salt = sa.Column(sa.String(255)) + crypt_hash = sa.Column(sa.String(255)) + expires_at = sa.Column(sa.DateTime) + no_snapshots = sa.Column(sa.Boolean, default=False) + source_project_id = sa.Column(sa.String(255), nullable=True) + destination_project_id = sa.Column(sa.String(255), nullable=True) + accepted = sa.Column(sa.Boolean, default=False) volume = relationship(Volume, backref="transfer", foreign_keys=volume_id, primaryjoin='and_(' @@ -879,46 +929,46 @@ class DriverInitiatorData(BASE, models.TimestampMixin, models.ModelBase): schema.UniqueConstraint("initiator", "namespace", "key"), CinderBase.__table_args__) - id = Column(Integer, primary_key=True, nullable=False) - initiator = Column(String(255), index=True, nullable=False) - namespace = Column(String(255), nullable=False) - key = Column(String(255), nullable=False) - value = Column(String(255)) + id = sa.Column(sa.Integer, primary_key=True, nullable=False) + initiator = sa.Column(sa.String(255), index=True, nullable=False) + namespace = sa.Column(sa.String(255), nullable=False) + key = sa.Column(sa.String(255), nullable=False) + value = sa.Column(sa.String(255)) class Message(BASE, CinderBase): """Represents a message""" __tablename__ = 'messages' - id = Column(String(36), primary_key=True, nullable=False) - project_id = Column(String(255), nullable=False) + id = sa.Column(sa.String(36), primary_key=True, nullable=False) + project_id = sa.Column(sa.String(255), nullable=False) # Info/Error/Warning. - message_level = Column(String(255), nullable=False) - request_id = Column(String(255), nullable=True) - resource_type = Column(String(255)) + message_level = sa.Column(sa.String(255), nullable=False) + request_id = sa.Column(sa.String(255), nullable=True) + resource_type = sa.Column(sa.String(255)) # The UUID of the related resource. - resource_uuid = Column(String(36), nullable=True) + resource_uuid = sa.Column(sa.String(36), nullable=True) # Operation specific event ID. - event_id = Column(String(255), nullable=False) + event_id = sa.Column(sa.String(255), nullable=False) # Message detail ID. - detail_id = Column(String(10), nullable=True) + detail_id = sa.Column(sa.String(10), nullable=True) # Operation specific action. - action_id = Column(String(10), nullable=True) + action_id = sa.Column(sa.String(10), nullable=True) # After this time the message may no longer exist - expires_at = Column(DateTime, nullable=True, index=True) + expires_at = sa.Column(sa.DateTime, nullable=True, index=True) class ImageVolumeCacheEntry(BASE, models.ModelBase): """Represents an image volume cache entry""" __tablename__ = 'image_volume_cache_entries' - id = Column(Integer, primary_key=True, nullable=False) - host = Column(String(255), index=True, nullable=False) - cluster_name = Column(String(255), nullable=True) - image_id = Column(String(36), index=True, nullable=False) - image_updated_at = Column(DateTime, nullable=False) - volume_id = Column(String(36), nullable=False) - size = Column(Integer, nullable=False) - last_used = Column(DateTime, default=lambda: timeutils.utcnow()) + id = sa.Column(sa.Integer, primary_key=True, nullable=False) + host = sa.Column(sa.String(255), index=True, nullable=False) + cluster_name = sa.Column(sa.String(255), nullable=True) + image_id = sa.Column(sa.String(36), index=True, nullable=False) + image_updated_at = sa.Column(sa.DateTime, nullable=False) + volume_id = sa.Column(sa.String(36), nullable=False) + size = sa.Column(sa.Integer, nullable=False) + last_used = sa.Column(sa.DateTime, default=lambda: timeutils.utcnow()) class Worker(BASE, CinderBase): @@ -929,26 +979,28 @@ class Worker(BASE, CinderBase): # We want to overwrite default updated_at definition so we timestamp at # creation as well - updated_at = Column(DateTime, default=timeutils.utcnow, - onupdate=timeutils.utcnow) + updated_at = sa.Column( + sa.DateTime, + default=timeutils.utcnow, + onupdate=timeutils.utcnow) # Id added for convenience and speed on some operations - id = Column(Integer, primary_key=True, autoincrement=True) + id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) # Type of the resource we are working on (Volume, Snapshot, Backup) it must # match the Versioned Object class name. - resource_type = Column(String(40), primary_key=True, nullable=False) + resource_type = sa.Column(sa.String(40), primary_key=True, nullable=False) # UUID of the resource we are working on - resource_id = Column(String(36), primary_key=True, nullable=False) + resource_id = sa.Column(sa.String(36), primary_key=True, nullable=False) # Status that should be cleaned on service failure - status = Column(String(255), nullable=False) + status = sa.Column(sa.String(255), nullable=False) # Service that is currently processing the operation - service_id = Column(Integer, nullable=True, index=True) + service_id = sa.Column(sa.Integer, nullable=True, index=True) # To prevent claiming and updating races - race_preventer = Column(Integer, nullable=False, default=0) + race_preventer = sa.Column(sa.Integer, nullable=False, default=0) # This is a flag we don't need to store in the DB as it is only used when # we are doing the cleanup to let decorators know @@ -970,11 +1022,14 @@ class AttachmentSpecs(BASE, CinderBase): """ __tablename__ = 'attachment_specs' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - value = Column(String(255)) - attachment_id = Column(String(36), ForeignKey('volume_attachment.id'), - nullable=False, index=True) + id = sa.Column(sa.Integer, primary_key=True) + key = sa.Column(sa.String(255)) + value = sa.Column(sa.String(255)) + attachment_id = sa.Column( + sa.String(36), + sa.ForeignKey('volume_attachment.id'), + nullable=False, + index=True) volume_attachment = relationship( VolumeAttachment, backref="attachment_specs",