Source code for dxaws_dns.types
from __future__ import annotations
from dataclasses import dataclass
from enum import Enum
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .config import DnsRecordSpec, DnsZoneSpec
from .providers.aws import RecordSetInfo, ZoneInfo
[docs]
class ZoneVisibility(str, Enum):
PUBLIC = "public"
PRIVATE = "private"
[docs]
class StepAction(str, Enum):
NOOP = "noop"
CREATE_PUBLIC_ZONE = "create_public_zone"
NOOP_RECORD = "noop_record"
UPSERT_RECORD = "upsert_record"
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class ZoneStep:
action: StepAction
zone_name: str
summary: str
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class ZonePlan:
desired: list["DnsZoneSpec"]
steps: list[ZoneStep]
# planner can store what it observed (optional, but useful)
observed: dict[str, "ZoneInfo"] # key: canonical zone name
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class RecordStep:
action: StepAction
zone_name: str # canonical zone, e.g. "dev.dxaws.com."
fqdn: str # canonical record name, trailing dot
record_type: str
summary: str
[docs]
@dataclass(frozen=True, slots=True, kw_only=True)
class RecordPlan:
desired: list["DnsRecordSpec"]
steps: list[RecordStep]
observed: dict[tuple[str, str], "RecordSetInfo"] # (fqdn, type) -> info