Source code for dxaws_dns.models
"""dxaws-dns models for record-set management."""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Literal
RecordState = Literal["present", "absent"]
PlanAction = Literal["noop", "upsert", "delete"]
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class DnsRecordDesired:
"""Desired state for a single record set."""
zone_id: str | None = None
record_name: str
record_type: str
ttl: int | None = None
values: list[str] = field(default_factory=list)
state: RecordState = "present"
zone_name: str | None = None # Optional helper for relative record_name normalization
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class DnsRecordCurrent:
"""Observed state for a record set."""
exists: bool
ttl: int | None = None
values: list[str] = field(default_factory=list)
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class DnsRecordPlan:
desired: DnsRecordDesired
current: DnsRecordCurrent
action: PlanAction
record_fqdn: str
record_type: str
changes: dict[str, Any] = field(default_factory=dict)
@property
def is_noop(self) -> bool:
return self.action == "noop"
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class DnsRecordOutputs:
record_fqdn: str
zone_id: str
change_id: str | None
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class DnsManagerResult:
desired: DnsRecordDesired
current: DnsRecordCurrent
plan: DnsRecordPlan
outputs: DnsRecordOutputs | None
outcome: str