From 9d4123a734aa4b9b2d4fc3aca53ea085c82e7433 Mon Sep 17 00:00:00 2001 From: Linus Vogel Date: Sat, 27 Dec 2025 19:59:27 +0100 Subject: [PATCH] added pillar structure to database --- ...958-678356102624_added_pillar_structure.py | 68 +++++++++++++++++++ pillar_tool/db/models/__init__.py | 3 +- pillar_tool/db/models/pillar_data.py | 43 ++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 pillar_tool/db/migrations/versions/2025_12_27_1958-678356102624_added_pillar_structure.py create mode 100644 pillar_tool/db/models/pillar_data.py diff --git a/pillar_tool/db/migrations/versions/2025_12_27_1958-678356102624_added_pillar_structure.py b/pillar_tool/db/migrations/versions/2025_12_27_1958-678356102624_added_pillar_structure.py new file mode 100644 index 0000000..f511598 --- /dev/null +++ b/pillar_tool/db/migrations/versions/2025_12_27_1958-678356102624_added_pillar_structure.py @@ -0,0 +1,68 @@ +"""added pillar structure + +Revision ID: 678356102624 +Revises: 4cc7f4e295f1 +Create Date: 2025-12-27 19:58:09.382682 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '678356102624' +down_revision: Union[str, Sequence[str], None] = '4cc7f4e295f1' +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_host_group', + sa.Column('id', sa.UUID(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('parent_id', sa.UUID(), nullable=True), + sa.ForeignKeyConstraint(['parent_id'], ['pillar_tool_host_group.id'], ), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('name', name='pillar_tool_host_group_unique_name') + ) + op.create_table('pillar_tool_pillar', + sa.Column('id', sa.UUID(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('parent_id', sa.UUID(), nullable=True), + sa.ForeignKeyConstraint(['parent_id'], ['pillar_tool_pillar.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('pillar_tool_host', + sa.Column('id', sa.UUID(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('host_group_id', sa.UUID(), nullable=True), + sa.ForeignKeyConstraint(['host_group_id'], ['pillar_tool_host_group.id'], ), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('name', name='pillar_tool_host_unique_name') + ) + op.create_table('pillar_tool_pillar_value', + sa.Column('pillar_id', sa.UUID(), nullable=False), + sa.Column('host_id', sa.UUID(), nullable=False), + sa.Column('host_group_id', sa.UUID(), nullable=False), + sa.Column('type', sa.String(), nullable=False), + sa.Column('value', sa.String(), nullable=False), + sa.ForeignKeyConstraint(['host_group_id'], ['pillar_tool_host_group.id'], ), + sa.ForeignKeyConstraint(['host_id'], ['pillar_tool_host.id'], ), + sa.ForeignKeyConstraint(['pillar_id'], ['pillar_tool_pillar.id'], ), + sa.PrimaryKeyConstraint('pillar_id', 'host_id', 'host_group_id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('pillar_tool_pillar_value') + op.drop_table('pillar_tool_host') + op.drop_table('pillar_tool_pillar') + op.drop_table('pillar_tool_host_group') + # ### end Alembic commands ### diff --git a/pillar_tool/db/models/__init__.py b/pillar_tool/db/models/__init__.py index 82da278..95ad4eb 100644 --- a/pillar_tool/db/models/__init__.py +++ b/pillar_tool/db/models/__init__.py @@ -1 +1,2 @@ -from .user import * \ No newline at end of file +from .user import * +from .pillar_data import * \ No newline at end of file diff --git a/pillar_tool/db/models/pillar_data.py b/pillar_tool/db/models/pillar_data.py new file mode 100644 index 0000000..fb8d2d2 --- /dev/null +++ b/pillar_tool/db/models/pillar_data.py @@ -0,0 +1,43 @@ +from pillar_tool.db.base_model import Base + +from sqlalchemy import Column, UUID, String, ForeignKey, UniqueConstraint + + +class Pillar(Base): + __tablename__ = 'pillar_tool_pillar' + id = Column(UUID, primary_key=True) + name = Column(String, nullable=False) + parent_id = Column(UUID, ForeignKey('pillar_tool_pillar.id'), nullable=True) + + +class PillarValue(Base): + __tablename__ = 'pillar_tool_pillar_value' + pillar_id = Column(UUID, ForeignKey('pillar_tool_pillar.id'), primary_key=True) + host_id = Column(UUID, ForeignKey('pillar_tool_host.id'), primary_key=True) + host_group_id = Column(UUID, ForeignKey('pillar_tool_host_group.id'), primary_key=True) + type = Column(String, nullable=False) + value = Column(String, nullable=False) + + +class Host(Base): + __tablename__ = 'pillar_tool_host' + id = Column(UUID, primary_key=True) + name = Column(String, nullable=False) + host_group_id = Column(UUID, ForeignKey('pillar_tool_host_group.id'), nullable=True) + + __table_args__ = ( + UniqueConstraint('name', name='pillar_tool_host_unique_name'), + + ) + + +class HostGroup(Base): + __tablename__ = 'pillar_tool_host_group' + id = Column(UUID, primary_key=True) + name = Column(String, nullable=False) + parent_id = Column(UUID, ForeignKey('pillar_tool_host_group.id'), nullable=True) + + __table_args__ = ( + UniqueConstraint('name', name='pillar_tool_host_group_unique_name'), + ) +