diff --git a/pillar_tool/db/migrations/versions/2026_02_21_2338-ec7c818f92b5_renamed_bad_parameter.py b/pillar_tool/db/migrations/versions/2026_02_21_2338-ec7c818f92b5_renamed_bad_parameter.py index 471738d..6e7d9f8 100644 --- a/pillar_tool/db/migrations/versions/2026_02_21_2338-ec7c818f92b5_renamed_bad_parameter.py +++ b/pillar_tool/db/migrations/versions/2026_02_21_2338-ec7c818f92b5_renamed_bad_parameter.py @@ -21,14 +21,12 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### - op.add_column('pillar_tool_pillar', sa.Column('parameter_type', sa.String(), nullable=False)) - op.drop_column('pillar_tool_pillar', 'type') + op.alter_column('pillar_tool_pillar', 'type', new_column_name='parameter_type', nullable=False, type_=sa.String()) # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### - op.add_column('pillar_tool_pillar', sa.Column('type', sa.VARCHAR(), autoincrement=False, nullable=False)) - op.drop_column('pillar_tool_pillar', 'parameter_type') + op.alter_column('pillar_tool_pillar', 'parameter_type', new_column_name='type', nullable=False, type_=sa.VARCHAR()) # ### end Alembic commands ### diff --git a/pillar_tool/db/migrations/versions/2026_04_25_0004-9ebc4cadee1c_separate_top_file_for_environments_and_.py b/pillar_tool/db/migrations/versions/2026_04_25_0004-9ebc4cadee1c_separate_top_file_for_environments_and_.py new file mode 100644 index 0000000..c2bf5ef --- /dev/null +++ b/pillar_tool/db/migrations/versions/2026_04_25_0004-9ebc4cadee1c_separate_top_file_for_environments_and_.py @@ -0,0 +1,51 @@ +"""separate top file for environments and states + +Revision ID: 9ebc4cadee1c +Revises: ec7c818f92b5 +Create Date: 2026-04-25 00:04:18.688390 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '9ebc4cadee1c' +down_revision: Union[str, Sequence[str], None] = 'ec7c818f92b5' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('pillar_tool_top_file', + sa.Column('host_id', sa.UUID(), nullable=False), + sa.Column('state_id', sa.UUID(), nullable=False), + sa.ForeignKeyConstraint(['host_id'], ['pillar_tool_host.id'], ), + sa.ForeignKeyConstraint(['state_id'], ['pillar_tool_state.id'], ), + sa.PrimaryKeyConstraint('host_id', 'state_id'), + sa.UniqueConstraint('host_id', 'state_id', name='pillar_tool_top_file_unique_state_host') + ) + op.drop_constraint('pillar_tool_unique_environment_assignment', 'pillar_tool_environment_assignment', type_='unique') + op.create_unique_constraint('pillar_tool_unique_environment_assignment', 'pillar_tool_environment_assignment', ['environment_id', 'host_id']) + op.drop_constraint(op.f('pillar_tool_state_assignment_unique_env_state_host'), 'pillar_tool_state_assignment', type_='unique') + op.create_unique_constraint('pillar_tool_state_assignment_unique_env_state_host', 'pillar_tool_state_assignment', ['environment_id', 'state_id']) + op.drop_constraint(op.f('pillar_tool_state_assignment_host_id_fkey'), 'pillar_tool_state_assignment', type_='foreignkey') + op.drop_column('pillar_tool_state_assignment', 'host_id') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('pillar_tool_state_assignment', sa.Column('host_id', sa.UUID(), autoincrement=False, nullable=False)) + op.create_foreign_key(op.f('pillar_tool_state_assignment_host_id_fkey'), 'pillar_tool_state_assignment', 'pillar_tool_host', ['host_id'], ['id']) + op.drop_constraint('pillar_tool_state_assignment_unique_env_state_host', 'pillar_tool_state_assignment', type_='unique') + op.create_unique_constraint(op.f('pillar_tool_state_assignment_unique_env_state_host'), 'pillar_tool_state_assignment', ['environment_id', 'state_id', 'host_id'], postgresql_nulls_not_distinct=False) + op.drop_constraint('pillar_tool_unique_environment_assignment', 'pillar_tool_environment_assignment', type_='unique') + op.create_unique_constraint('pillar_tool_unique_environment_assignment', 'pillar_tool_environment_assignment', ['environment_id', 'host_id']) + op.drop_table('pillar_tool_top_file') + # ### end Alembic commands ### diff --git a/pillar_tool/db/models/top_data.py b/pillar_tool/db/models/top_data.py index d9d67cf..0929593 100644 --- a/pillar_tool/db/models/top_data.py +++ b/pillar_tool/db/models/top_data.py @@ -43,8 +43,17 @@ class StateAssignment(Base): id = Column(UUID, primary_key=True, default=uuid.uuid4) environment_id = Column(UUID, ForeignKey("pillar_tool_environment.id"), nullable=False) state_id = Column(UUID, ForeignKey("pillar_tool_state.id"), nullable=False) - host_id = Column(UUID, ForeignKey("pillar_tool_host.id"), nullable=False) __table_args__ = ( - UniqueConstraint('environment_id', 'state_id', 'host_id', name="pillar_tool_state_assignment_unique_env_state_host"), + UniqueConstraint('environment_id', 'state_id', name="pillar_tool_state_assignment_unique_env_state_host"), + ) + +class TopFile(Base): + __tablename__ = "pillar_tool_top_file" + + host_id = Column(UUID, ForeignKey("pillar_tool_host.id"), nullable=False, primary_key=True) + state_id = Column(UUID, ForeignKey("pillar_tool_state.id"), nullable=False, primary_key=True) + + __table_args__ = ( + UniqueConstraint('host_id', 'state_id', name="pillar_tool_top_file_unique_state_host"), ) \ No newline at end of file