80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Dict, Any, List, Optional
|
|
|
|
|
|
class JobSpecification(BaseModel):
|
|
"""
|
|
Nomad job specification. This is a simplified schema as the actual
|
|
Nomad job spec is quite complex and varies by job type.
|
|
"""
|
|
id: Optional[str] = Field(None, description="Job ID")
|
|
ID: Optional[str] = Field(None, description="Job ID (Nomad format)")
|
|
name: Optional[str] = Field(None, description="Job name")
|
|
Name: Optional[str] = Field(None, description="Job name (Nomad format)")
|
|
type: Optional[str] = Field(None, description="Job type (service, batch, system)")
|
|
Type: Optional[str] = Field(None, description="Job type (Nomad format)")
|
|
datacenters: Optional[List[str]] = Field(None, description="List of datacenters")
|
|
Datacenters: Optional[List[str]] = Field(None, description="List of datacenters (Nomad format)")
|
|
task_groups: Optional[List[Dict[str, Any]]] = Field(None, description="Task groups")
|
|
TaskGroups: Optional[List[Dict[str, Any]]] = Field(None, description="Task groups (Nomad format)")
|
|
meta: Optional[Dict[str, str]] = Field(None, description="Job metadata")
|
|
Meta: Optional[Dict[str, str]] = Field(None, description="Job metadata (Nomad format)")
|
|
|
|
# Allow additional fields (to handle the complete Nomad job spec)
|
|
class Config:
|
|
extra = "allow"
|
|
|
|
|
|
class JobOperation(BaseModel):
|
|
"""Response after a job operation (start, stop, etc.)"""
|
|
job_id: str = Field(..., description="The ID of the job")
|
|
eval_id: Optional[str] = Field(None, description="The evaluation ID")
|
|
status: str = Field(..., description="The status of the operation")
|
|
warnings: Optional[str] = Field(None, description="Any warnings from Nomad")
|
|
|
|
|
|
class JobResponse(BaseModel):
|
|
"""
|
|
Job response schema. This is a simplified version as the actual
|
|
Nomad job response is quite complex and varies by job type.
|
|
"""
|
|
ID: str = Field(..., description="Job ID")
|
|
Name: str = Field(..., description="Job name")
|
|
Status: str = Field(..., description="Job status")
|
|
Type: str = Field(..., description="Job type")
|
|
repository: Optional[str] = Field(None, description="Associated repository if any")
|
|
|
|
# Allow additional fields (to handle the complete Nomad job response)
|
|
class Config:
|
|
extra = "allow"
|
|
|
|
|
|
class TaskGroup(BaseModel):
|
|
"""Task group schema."""
|
|
Name: str
|
|
Count: int
|
|
Tasks: List[Dict[str, Any]]
|
|
|
|
class Config:
|
|
extra = "allow"
|
|
|
|
|
|
class Task(BaseModel):
|
|
"""Task schema."""
|
|
Name: str
|
|
Driver: str
|
|
Config: Dict[str, Any]
|
|
|
|
class Config:
|
|
extra = "allow"
|
|
|
|
|
|
class Allocation(BaseModel):
|
|
"""Allocation schema."""
|
|
ID: str
|
|
JobID: str
|
|
TaskGroup: str
|
|
ClientStatus: str
|
|
|
|
class Config:
|
|
extra = "allow" |