What needs to happen
A PowerDNS coexistence conflict should be recognised as one no matter which part of the response body carries the reason.
Why this matters
pdnsErrorBody has a single field, Error string, and both IsConflict and FriendlyMessage read only that. PowerDNS has a second response shape for a write that hits several problems at once, captured live in #51:
{"error": "Multiple errors found in RRset", "errors": ["RRset x. IN NS: duplicate record with content \"...\""]}
There the top-level error is only a summary and the real reasons sit in errors[], which nothing reads. A conflict arriving that way isn't classified, so two things go wrong: the reconcile returns an error and retries indefinitely — exactly the hot loop #75 set out to stop — and the DNSRecordSet status shows the generic "The DNS record was rejected as invalid" instead of the actionable message.
This is latent rather than urgent. The conflict actually seen in production (#56, and the one driving datum-cloud/network-services-operator#315) is the single-error shape, which is handled today.
Desired outcome
IsConflict and FriendlyMessage classify a conflict whether the phrase appears in error or anywhere in errors[], with a test covering the multi-error body.
Related
What needs to happen
A PowerDNS coexistence conflict should be recognised as one no matter which part of the response body carries the reason.
Why this matters
pdnsErrorBodyhas a single field,Error string, and bothIsConflictandFriendlyMessageread only that. PowerDNS has a second response shape for a write that hits several problems at once, captured live in #51:{"error": "Multiple errors found in RRset", "errors": ["RRset x. IN NS: duplicate record with content \"...\""]}There the top-level
erroris only a summary and the real reasons sit inerrors[], which nothing reads. A conflict arriving that way isn't classified, so two things go wrong: the reconcile returns an error and retries indefinitely — exactly the hot loop #75 set out to stop — and the DNSRecordSet status shows the generic "The DNS record was rejected as invalid" instead of the actionable message.This is latent rather than urgent. The conflict actually seen in production (#56, and the one driving datum-cloud/network-services-operator#315) is the single-error shape, which is handled today.
Desired outcome
IsConflictandFriendlyMessageclassify a conflict whether the phrase appears inerroror anywhere inerrors[], with a test covering the multi-error body.Related