feat: initial commit

This commit is contained in:
Iain Learmonth 2025-12-14 17:47:51 +00:00
commit 075939142f
63 changed files with 9494 additions and 0 deletions

76
src/tofu/schemas.py Normal file
View file

@ -0,0 +1,76 @@
from datetime import datetime
from enum import Enum
from typing import Any
from uuid import UUID
from pydantic import ConfigDict
from src.schemas import CustomModel, TimestampMixin, CustomDatetime, IdMixin
from src.tofu.models import TofuInstanceStatus, TofuInstanceTaskType, TofuInstanceTaskStatus
class TofuOperationType(Enum):
# https://github.com/opentofu/opentofu/blob/main/internal/backend/operation_type.go
INVALID = "OperationTypeInvalid"
REFRESH = "OperationTypeRefresh"
PLAN = "OperationTypePlan"
APPLY = "OperationTypeApply"
class TofuInstanceState(CustomModel):
# TODO: Do better
model_config = ConfigDict(extra="allow")
class TofuInstanceStateLock(CustomModel):
model_config = ConfigDict(extra="allow")
ID: UUID
Operation: TofuOperationType
Info: str
Who: str
Version: str
Created: str
Path: str
class TofuInstanceSummary(CustomModel, IdMixin, TimestampMixin):
status: TofuInstanceStatus
status_changed_at: CustomDatetime
drift_checked_at: CustomDatetime | None
class TofuInstanceStatusChange(CustomModel):
instance_task_id: int
timestamp: datetime
old_status: TofuInstanceStatus
new_status: TofuInstanceStatus
class TofuInstanceTask(CustomModel, TimestampMixin):
id: int
task: TofuInstanceTaskType
status: TofuInstanceTaskStatus
start_time: datetime | None
end_time: datetime | None
class TofuInstanceDetail(CustomModel, IdMixin, TimestampMixin):
status: TofuInstanceStatus
configuration: dict[str, Any]
outputs: dict[str, Any] | None
plan: dict[str, Any] | None
status_changed_at: CustomDatetime
drift_checked_at: CustomDatetime | None
state_lock: TofuInstanceStateLock | None
tasks: list[TofuInstanceTask]
status_changes: list[TofuInstanceStatusChange]
class TofuInstanceCreate(CustomModel):
configuration: dict[str, Any]
password: str | None = None
class TofuInstanceUpdate(CustomModel):
configuration: dict[str, Any] | None = None
password: str | None = None