51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""Push request/response schemas"""
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
from app.models.push_log import PushStatus
|
|
|
|
|
|
class PushRequest(BaseModel):
|
|
"""
|
|
Request to push configuration to device via SSH.
|
|
CRITICAL: Includes optional SSH credentials (only use in-memory).
|
|
"""
|
|
configuration_id: int
|
|
device_id: int
|
|
|
|
# Optional SSH credentials (if not stored in device model)
|
|
ssh_username: Optional[str] = None
|
|
ssh_password: Optional[str] = None # Must be provided at push time, never stored
|
|
|
|
# Safety
|
|
dry_run: bool = False # Generate only, don't push
|
|
save_running_config: bool = True # Backup before push
|
|
confirmed: bool = False # Explicit confirmation
|
|
|
|
|
|
class PushResponse(BaseModel):
|
|
"""Response after push attempt"""
|
|
push_log_id: int
|
|
status: PushStatus
|
|
success: bool
|
|
message: str
|
|
device_output: Optional[str] = None
|
|
error_message: Optional[str] = None
|
|
|
|
|
|
class PushLogResponse(BaseModel):
|
|
"""Push log response (audit trail)"""
|
|
id: int
|
|
device_id: int
|
|
configuration_id: int
|
|
status: PushStatus
|
|
commands_sent: str
|
|
device_output: Optional[str] = None
|
|
error_message: Optional[str] = None
|
|
was_rolled_back: bool
|
|
pushed_by: Optional[str] = None
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|