feat(cloudpress): add CloudPress DNS provider#4390
Conversation
Implement a new DNS service provider for the CloudPress DNS API (https://docs.cloudpress.com/API/dns/), verified end-to-end against a live account. The provider authenticates with a CloudPress API key sent as a bearer token and talks to the conventional REST /api/dns_zones endpoints (resource-wrapped bodies "dns_zone"/"dns_record", nested records, snake_case fields, UUID identifiers and PATCH updates). It supports listing/creating zones, reading and reconciling records via diff2.ByRecord, and toggling AutoDNSSEC. Apex NS records live in the zone's nameservers field rather than the records API, so they are surfaced via GetNameservers and synthesized as implicit records to avoid spurious diffs. Supported record types are A, AAAA, CNAME, TXT, MX (incl. NullMX), NS, SRV, CAA and PTR. CloudPress-specific limitations are enforced via AuditRecords and the integration test exclusion list: NS records are not allowed at the apex, and TXT values may not contain interior double quotes or leading/trailing whitespace (CloudPress silently strips them). Rate limiting (HTTP 429) and transient 5xx responses are retried with exponential backoff, honoring the Retry-After header when present. Integration tests: 221 passed, 0 failed, 77 skipped against a live CloudPress zone. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Integration test results221 passed · 0 failed · 77 skipped against a live CloudPress zone ( The full log is ~116 KB (over GitHub's comment limit), so it's attached here: full integration test log. Per-test result summary (PASS / SKIP / FAIL) |
TomOnTime
left a comment
There was a problem hiding this comment.
Thank you for contributing this new provider, @name OF PERSON !
Three notes:
- @fm: Faisal Misle is our “liaison to maintainers”. Can you send him an email from your preferred address to dnscontrol at faisal dot fm so we can stay in touch? His email address is f at faisal dot fm
- By now you should have received a Github invite to have the "triage" role for this repo. Please accept the invite so we can assign bugs to you.
- Please consider setting up a test account for use by our automated testing. This will mean we can test the provider every release in an automated manner. Info is here: https://docs.dnscontrol.org/developer-info/byo-secrets#donate-secrets-to-the-project
Thanks again!
Tom
|
Hi @TomOnTime , should I still get in touch with @fm since I'm already a maintainer of the AUTODNS provider and a member of this GitHub org? Same for 2) actually :) This test account is a fair point which I failed to consider, would be nice so I'll get in touch with our supplier and try to make that happen (same for AUTODNS while I'm on it). |
Yes, please. That way he updates our spreadsheet of who's who.
That's be awesome! It's a lot easier for me to do development when I can be assured I'm not breaking providers. Best, |
|
Please resolve the conflicts and I'll do another quick review. We should be able to get this into the next release. Thanks! |
What
Adds a new DNS service provider for CloudPress (
CLOUDPRESS).The provider was developed against, and verified end-to-end with, a live CloudPress account.
Details
Authorization: Bearer …). A configurablebase_urlis required (CloudPress is brand/instance specific, so there is no single host); an optionalaccount_idis sent asX-Auth-Accountfor zone creation./api/dns_zonesendpoints — resource-wrapped bodies (dns_zone/dns_record), nested records, snake_case fields, UUID identifiers,PATCHupdates.diff2.ByRecord(records have provider-assigned UUIDs).nameserversfield, not the records API). They are surfaced viaGetNameserversand synthesized as implicit records to avoid spurious diffs.429and transient5xxresponses are retried with exponential backoff, honoringRetry-Afterwhen present.Supported record types
A,AAAA,CNAME,TXT,MX(incl. NullMX),NS,SRV,CAA,PTR.Known limitations (enforced via
AuditRecords/ test exclusions)NSrecords are not allowed at the apex ("NS records are not supported on the root of the domain").Integration tests
Run against a live CloudPress zone:
Result: 221 passed, 0 failed, 77 skipped. (Skips are unsupported-capability tests and the documented limitations above.)
🤖 Generated with Claude Code