Skip to content

Commit 8e28439

Browse files
authored
feat: DEP-0003 verified record withdrawal before address reuse (#17)
* docs: design verify-only external DNS provider * feat(core): support credentialless DNS providers Make ZoneClass identityRef optional with Provider-version admission, preserve projected condition messages, gate cloud registrations and privileges, and support credentialless ZoneClass UI creation. Regenerate deepcopy and both CRD distributions; add deterministic admission, projection, chart and UI regressions. Contract: dns-api PR #15 / 99d0753 docs/design/external-provider.md (ZoneClass Parameters, Conditions and Public Data, Packaging), core-api.md, provider-extension.md, controllers-webhooks.md (Provider Enablement), ui.md (Zone Classes), and test-policy.md. Platform PR #5331 / cd995cf0ed design/platform/onprem/README.md sections 4.3, 4.4 step 4, 4.7, and Phase 4. Codegen: devbox run -- task generate manifests controller-chart:sync-crds completed. Tests, builds, linters and UI typecheck intentionally deferred to the primary integration agent. * feat(external): verify-only DNS provider Provider external.dns.appthrust.io/v1alpha1 (A/AAAA/CNAME, no identity), ZoneClass resolver policy and expectedNameservers, exact-set A/AAAA verification with bounded CNAME chains and wildcard witnesses, Cluster/Recursive views plus RD=0 authority checks, bounded scheduling (30-300s, jitter, backoff, 32 names/pass, 40 QPS/80 burst), UID/generation/policy-bound receipts, bookkeeping-only deletion, endpoint conversion handler, metrics. Design: docs/design/external-provider.md. * fix(external): avoid unchanged scheduler status patches * docs: trim trailing blank line * Wire external DNS provider into manager and deployment packaging * fix(external): describe every array item in the Provider schemas so core admission accepts the manifest The core webhook requires a description on every property and array item; the external Provider was rejected on install. The built-in-manifest validation test now covers external_extensions.yaml. * docs: DEP-0003 RecordWithdrawal — verified DNS withdrawal before address reuse (Draft) * docs: DEP-0003 ZoneUnit withdrawal items keyed by claimNamespace/claimName * feat(api): define retained DNS withdrawal and retirement contracts * feat(api): fence withdrawal results to ZoneClass incarnation and generation * feat(core): compose and project verified DNS withdrawal claims * feat(external): verify DNS withdrawal before retired address reuse * feat(endpoint): capture retired DNS pairs before source deletion * fix(core): preserve admission parity and existing Zone deletion messages * docs: accept DEP-0003 and reflect verified record withdrawal into docs/design
1 parent 24a27d9 commit 8e28439

77 files changed

Lines changed: 7146 additions & 100 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎app/operator/config/crd/bases/dns.appthrust.io_providers.yaml‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ spec:
120120
enum:
121121
- Accepted
122122
- Programmed
123+
- Withdrawn
124+
- Ready
125+
- OverrideAccepted
123126
type: string
124127
description:
125128
description: Description explains when the provider-specific
@@ -304,6 +307,67 @@ spec:
304307
type: object
305308
type: array
306309
type: object
310+
recordWithdrawal:
311+
description: RecordWithdrawal declares support for independent
312+
exclusion verification.
313+
properties:
314+
additionalConditionReasons:
315+
items:
316+
properties:
317+
conditionType:
318+
description: ConditionType is the status condition
319+
type this reason applies to.
320+
enum:
321+
- Accepted
322+
- Programmed
323+
- Withdrawn
324+
- Ready
325+
- OverrideAccepted
326+
type: string
327+
description:
328+
description: Description explains when the provider-specific
329+
reason is used.
330+
minLength: 1
331+
type: string
332+
reason:
333+
description: Reason is the provider-specific condition
334+
reason stored in metav1.Condition.reason.
335+
minLength: 1
336+
pattern: ^[A-Z][A-Za-z0-9]*$
337+
type: string
338+
status:
339+
description: Status is the condition status this reason
340+
applies to.
341+
enum:
342+
- "True"
343+
- "False"
344+
- Unknown
345+
type: string
346+
required:
347+
- conditionType
348+
- description
349+
- reason
350+
- status
351+
type: object
352+
type: array
353+
schemas:
354+
properties:
355+
statusProviderData:
356+
description: StatusProviderData validates public withdrawal
357+
provider evidence.
358+
properties:
359+
openAPIV3Schema:
360+
description: OpenAPIV3Schema is the schema for the
361+
corresponding inline object.
362+
type: object
363+
x-kubernetes-preserve-unknown-fields: true
364+
type: object
365+
type: object
366+
supported:
367+
type: boolean
368+
required:
369+
- supported
370+
type: object
307371
served:
308372
description: Served controls whether new or updated specs may
309373
reference this version.
@@ -326,6 +390,9 @@ spec:
326390
enum:
327391
- Accepted
328392
- Programmed
393+
- Withdrawn
394+
- Ready
395+
- OverrideAccepted
329396
type: string
330397
description:
331398
description: Description explains when the provider-specific

‎app/operator/config/crd/bases/dns.appthrust.io_recordsets.yaml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,13 @@ spec:
223223
properties:
224224
name:
225225
description: Name is the Zone name.
226+
maxLength: 253
226227
minLength: 1
227228
type: string
228229
namespace:
229230
description: Namespace defaults to the RecordSet namespace when
230231
omitted.
232+
maxLength: 63
231233
type: string
232234
required:
233235
- name

0 commit comments

Comments
 (0)