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