Add certificate replacement lifecycle
This commit is contained in:
@@ -19,6 +19,7 @@ class CapabilityOperation(StrEnum):
|
||||
class PlanOperation(StrEnum):
|
||||
CREATE = "create"
|
||||
UPDATE = "update"
|
||||
REPLACE = "replace"
|
||||
DELETE = "delete"
|
||||
NOOP = "noop"
|
||||
SKIP = "skip"
|
||||
@@ -157,16 +158,69 @@ class NormalizedObject:
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class RetireRequest:
|
||||
object: NormalizedObject
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
if self.object.local_key is None:
|
||||
raise ValueError(
|
||||
"Retired object requires an endpoint-local key"
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ApplyResult:
|
||||
object: NormalizedObject
|
||||
detail: str | None = None
|
||||
retirements: tuple[RetireRequest, ...] = ()
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
if self.object.local_key is None:
|
||||
raise ValueError(
|
||||
"Applied object requires an endpoint-local key"
|
||||
)
|
||||
|
||||
retirements = tuple(self.retirements)
|
||||
|
||||
if any(
|
||||
not isinstance(retirement, RetireRequest)
|
||||
for retirement in retirements
|
||||
):
|
||||
raise ValueError(
|
||||
"ApplyResult retirements must be RetireRequest instances"
|
||||
)
|
||||
|
||||
seen: set[tuple[str, str]] = set()
|
||||
|
||||
for retirement in retirements:
|
||||
retired = retirement.object
|
||||
identity = (
|
||||
retired.object_type,
|
||||
retired.local_key,
|
||||
)
|
||||
|
||||
if identity in seen:
|
||||
raise ValueError(
|
||||
"ApplyResult retirements cannot contain duplicates"
|
||||
)
|
||||
|
||||
seen.add(identity)
|
||||
|
||||
if (
|
||||
retired.object_type == self.object.object_type
|
||||
and retired.local_key == self.object.local_key
|
||||
):
|
||||
raise ValueError(
|
||||
"ApplyResult cannot retire the newly applied object"
|
||||
)
|
||||
|
||||
object.__setattr__(
|
||||
self,
|
||||
"retirements",
|
||||
retirements,
|
||||
)
|
||||
|
||||
if self.detail is not None:
|
||||
detail = self.detail.strip()
|
||||
object.__setattr__(
|
||||
|
||||
Reference in New Issue
Block a user