Files
DevOpsLab/app/alembic/versions/002_add_playbooks_and_dockerfiles.py
Сергей Антропов 1fbf9185a2 feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile
- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
2026-02-15 22:59:02 +03:00

120 lines
5.8 KiB
Python

"""Add playbooks and dockerfiles tables
Revision ID: 002_add_playbooks
Revises: 001_initial
Create Date: 2024-01-02 00:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '002_add_playbooks'
down_revision = '001_initial'
branch_labels = None
depends_on = None
def upgrade() -> None:
# Создание таблицы playbooks
op.create_table(
'playbooks',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(), nullable=False),
sa.Column('description', sa.Text()),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('roles', postgresql.JSON(astext_type=sa.Text()), nullable=False),
sa.Column('variables', postgresql.JSON(astext_type=sa.Text())),
sa.Column('inventory', sa.Text()),
sa.Column('status', sa.String(), server_default='active'),
sa.Column('created_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('updated_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('created_by', sa.String()),
sa.Column('updated_by', sa.String()),
sa.Column('extra_data', postgresql.JSON(astext_type=sa.Text())),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_playbooks_id'), 'playbooks', ['id'], unique=False)
op.create_index(op.f('ix_playbooks_name'), 'playbooks', ['name'], unique=True)
# Создание таблицы playbook_test_runs
op.create_table(
'playbook_test_runs',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('playbook_id', sa.Integer(), nullable=False),
sa.Column('preset_name', sa.String()),
sa.Column('status', sa.String(), nullable=False),
sa.Column('started_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('finished_at', sa.DateTime()),
sa.Column('duration', sa.Integer()),
sa.Column('output', sa.Text()),
sa.Column('error', sa.Text()),
sa.Column('returncode', sa.Integer()),
sa.Column('user', sa.String()),
sa.Column('extra_data', postgresql.JSON(astext_type=sa.Text())),
sa.ForeignKeyConstraint(['playbook_id'], ['playbooks.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_playbook_test_runs_id'), 'playbook_test_runs', ['id'], unique=False)
op.create_index(op.f('ix_playbook_test_runs_playbook_id'), 'playbook_test_runs', ['playbook_id'], unique=False)
op.create_index(op.f('ix_playbook_test_runs_preset_name'), 'playbook_test_runs', ['preset_name'], unique=False)
# Создание таблицы playbook_deployments
op.create_table(
'playbook_deployments',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('playbook_id', sa.Integer(), nullable=False),
sa.Column('inventory', sa.Text()),
sa.Column('hosts', postgresql.JSON(astext_type=sa.Text())),
sa.Column('status', sa.String(), nullable=False),
sa.Column('started_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('finished_at', sa.DateTime()),
sa.Column('duration', sa.Integer()),
sa.Column('output', sa.Text()),
sa.Column('error', sa.Text()),
sa.Column('returncode', sa.Integer()),
sa.Column('user', sa.String()),
sa.Column('extra_data', postgresql.JSON(astext_type=sa.Text())),
sa.ForeignKeyConstraint(['playbook_id'], ['playbooks.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_playbook_deployments_id'), 'playbook_deployments', ['id'], unique=False)
op.create_index(op.f('ix_playbook_deployments_playbook_id'), 'playbook_deployments', ['playbook_id'], unique=False)
# Создание таблицы dockerfiles
op.create_table(
'dockerfiles',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(), nullable=False),
sa.Column('description', sa.Text()),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('base_image', sa.String()),
sa.Column('tags', postgresql.JSON(astext_type=sa.Text())),
sa.Column('status', sa.String(), server_default='active'),
sa.Column('created_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('updated_at', sa.DateTime(), nullable=False, server_default=sa.text('now()')),
sa.Column('created_by', sa.String()),
sa.Column('updated_by', sa.String()),
sa.Column('extra_data', postgresql.JSON(astext_type=sa.Text())),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_dockerfiles_id'), 'dockerfiles', ['id'], unique=False)
op.create_index(op.f('ix_dockerfiles_name'), 'dockerfiles', ['name'], unique=True)
def downgrade() -> None:
op.drop_index(op.f('ix_dockerfiles_name'), table_name='dockerfiles')
op.drop_index(op.f('ix_dockerfiles_id'), table_name='dockerfiles')
op.drop_table('dockerfiles')
op.drop_index(op.f('ix_playbook_deployments_playbook_id'), table_name='playbook_deployments')
op.drop_index(op.f('ix_playbook_deployments_id'), table_name='playbook_deployments')
op.drop_table('playbook_deployments')
op.drop_index(op.f('ix_playbook_test_runs_preset_name'), table_name='playbook_test_runs')
op.drop_index(op.f('ix_playbook_test_runs_playbook_id'), table_name='playbook_test_runs')
op.drop_index(op.f('ix_playbook_test_runs_id'), table_name='playbook_test_runs')
op.drop_table('playbook_test_runs')
op.drop_index(op.f('ix_playbooks_name'), table_name='playbooks')
op.drop_index(op.f('ix_playbooks_id'), table_name='playbooks')
op.drop_table('playbooks')