"""Create tables and columns for the acme issuer. Revision ID: 3adfdd6598df Revises: 556ceb3e3c3e Create Date: 2018-04-10 13:25:47.007556 """ # revision identifiers, used by Alembic. revision = '3adfdd6598df' down_revision = '556ceb3e3c3e' import sqlalchemy as sa from alembic import op from sqlalchemy.dialects.postgresql import JSON from sqlalchemy_utils import ArrowType from lemur.utils import Vault def upgrade(): # create provider table print("Creating dns_providers table") op.create_table( 'dns_providers', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=256), nullable=True), sa.Column('description', sa.String(length=1024), nullable=True), sa.Column('provider_type', sa.String(length=256), nullable=True), sa.Column('credentials', Vault(), nullable=True), sa.Column('api_endpoint', sa.String(length=256), nullable=True), sa.Column('date_created', ArrowType(), server_default=sa.text('now()'), nullable=False), sa.Column('status', sa.String(length=128), nullable=True), sa.Column('options', JSON), sa.Column('domains', sa.JSON(), nullable=True), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('name') ) print("Adding dns_provider_id column to certificates") op.add_column('certificates', sa.Column('dns_provider_id', sa.Integer(), nullable=True)) print("Adding dns_provider_id column to pending_certs") op.add_column('pending_certs', sa.Column('dns_provider_id', sa.Integer(), nullable=True)) print("Adding options column to pending_certs") op.add_column('pending_certs', sa.Column('options', JSON)) print("Creating pending_dns_authorizations table") op.create_table( 'pending_dns_authorizations', sa.Column('id', sa.Integer(), primary_key=True, autoincrement=True), sa.Column('account_number', sa.String(length=128), nullable=True), sa.Column('domains', JSON, nullable=True), sa.Column('dns_provider_type', sa.String(length=128), nullable=True), sa.Column('options', JSON, nullable=True), ) print("Creating certificates_dns_providers_fk foreign key") op.create_foreign_key('certificates_dns_providers_fk', 'certificates', 'dns_providers', ['dns_provider_id'], ['id'], ondelete='cascade') print("Altering column types in the api_keys table") op.alter_column('api_keys', 'issued_at', existing_type=sa.BIGINT(), nullable=True) op.alter_column('api_keys', 'revoked', existing_type=sa.BOOLEAN(), nullable=True) op.alter_column('api_keys', 'ttl', existing_type=sa.BIGINT(), nullable=True) op.alter_column('api_keys', 'user_id', existing_type=sa.INTEGER(), nullable=True) print("Creating dns_providers_id foreign key on pending_certs table") op.create_foreign_key(None, 'pending_certs', 'dns_providers', ['dns_provider_id'], ['id'], ondelete='CASCADE') def downgrade(): print("Removing dns_providers_id foreign key on pending_certs table") op.drop_constraint(None, 'pending_certs', type_='foreignkey') print("Reverting column types in the api_keys table") op.alter_column('api_keys', 'user_id', existing_type=sa.INTEGER(), nullable=False) op.alter_column('api_keys', 'ttl', existing_type=sa.BIGINT(), nullable=False) op.alter_column('api_keys', 'revoked', existing_type=sa.BOOLEAN(), nullable=False) op.alter_column('api_keys', 'issued_at', existing_type=sa.BIGINT(), nullable=False) print("Reverting certificates_dns_providers_fk foreign key") op.drop_constraint('certificates_dns_providers_fk', 'certificates', type_='foreignkey') print("Dropping pending_dns_authorizations table") op.drop_table('pending_dns_authorizations') print("Undoing modifications to pending_certs table") op.drop_column('pending_certs', 'options') op.drop_column('pending_certs', 'dns_provider_id') print("Undoing modifications to certificates table") op.drop_column('certificates', 'dns_provider_id') print("Deleting dns_providers table") op.drop_table('dns_providers')