Commit 54a69e11 authored by Sergio Gimenez's avatar Sergio Gimenez
Browse files

add srm contract

parent 86890845
Loading
Loading
Loading
Loading
+0 −0

Empty file added.

+83 −0
Original line number Diff line number Diff line
# Vendored from srm/interface-contract.md §B/§C — hand-synced; SRM's spec wins.
from datetime import datetime
from typing import Literal
from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field

Source = Literal["nbi_camara", "nbi_tmf", "operator_portal", "federation"]


class CommandEnvelopeV1(BaseModel):
    schema_version: str = "1.0"
    operation_id: UUID
    correlation_id: str
    requested_at: datetime
    app_provider_id: str
    federation_partner_ref: str | None = None
    source: Source


class DeployTargetV1(BaseModel):
    app_instance_id: UUID
    zone_id: UUID | None = None
    domain_id: UUID | None = None


class DeployPayloadV1(BaseModel):
    instance_name: str | None = None
    placement_constraints: dict[str, object] | None = None


class SrmServiceDeployV1(CommandEnvelopeV1):
    service_specification_id: UUID
    targets: list[DeployTargetV1] = Field(min_length=1)
    deploy: DeployPayloadV1


class TerminatePayloadV1(BaseModel):
    grace_period_seconds: int = 0


class SrmServiceTerminateV1(CommandEnvelopeV1):
    service_instance_id: UUID
    service_specification_id: UUID | None = None
    terminate: TerminatePayloadV1 = Field(default_factory=TerminatePayloadV1)


class SrmOperationStatusV1(BaseModel):
    model_config = ConfigDict(extra="ignore")

    schema_version: str
    operation_id: UUID
    service_order_id: UUID | None = None
    service_instance_id: UUID | None = None
    capability: str | None = None
    state: Literal["accepted", "failed_before_start", "completed", "failed", "in_progress"]
    metadata: dict[str, object] | None = None
    correlation_id: str
    emitted_at: datetime


class CompletedInstanceV1(BaseModel):
    model_config = ConfigDict(extra="ignore")

    service_instance_id: UUID
    zone_id: UUID
    status: Literal["completed", "failed"]
    external_ref: str | None = None
    error: dict[str, object] | None = None


class SrmOperationCompletedV1(BaseModel):
    model_config = ConfigDict(extra="ignore")

    schema_version: str
    operation_id: UUID
    status: Literal["completed", "partially_completed", "failed"]
    service_order_id: UUID | None = None
    instances: list[CompletedInstanceV1] | None = None
    metadata: dict[str, object] | None = None
    error: dict[str, object] | None = None
    correlation_id: str
    completed_at: datetime