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