Skip to content

feat(cloudpress): add CloudPress DNS provider#4390

Open
arnoschoon wants to merge 1 commit into
DNSControl:mainfrom
arnoschoon:feat/cloudpress-provider
Open

feat(cloudpress): add CloudPress DNS provider#4390
arnoschoon wants to merge 1 commit into
DNSControl:mainfrom
arnoschoon:feat/cloudpress-provider

Conversation

@arnoschoon

Copy link
Copy Markdown
Collaborator

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

  • Auth: CloudPress API key sent as a bearer token (Authorization: Bearer …). A configurable base_url is required (CloudPress is brand/instance specific, so there is no single host); an optional account_id is sent as X-Auth-Account for zone creation.
  • API shape: conventional REST /api/dns_zones endpoints — resource-wrapped bodies (dns_zone / dns_record), nested records, snake_case fields, UUID identifiers, PATCH updates.
  • Update strategy: diff2.ByRecord (records have provider-assigned UUIDs).
  • Apex NS: CloudPress manages apex nameservers itself (they live in the zone's nameservers field, not the records API). They are surfaced via GetNameservers and synthesized as implicit records to avoid spurious diffs.
  • AutoDNSSEC: supported.
  • Rate limiting: 429 and transient 5xx responses are retried with exponential backoff, honoring Retry-After when present.

Supported record types

A, AAAA, CNAME, TXT, MX (incl. NullMX), NS, SRV, CAA, PTR.

Known limitations (enforced via AuditRecords / test exclusions)

  • NS records are not allowed at the apex ("NS records are not supported on the root of the domain").
  • TXT values may not contain interior double quotes or leading/trailing whitespace — CloudPress silently strips them.
  • Other CloudPress-specific record types (Redirect, Flatten, Pull Zone, Script) are ignored and left untouched.

Integration tests

Run against a live CloudPress zone:

go test -timeout 70m -v -verbose -profile CLOUDPRESS ./...

Result: 221 passed, 0 failed, 77 skipped. (Skips are unsupported-capability tests and the documented limitations above.)

🤖 Generated with Claude Code

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>
@arnoschoon

Copy link
Copy Markdown
Collaborator Author

Integration test results

go test -timeout 70m -v -verbose -profile CLOUDPRESS ./...

221 passed · 0 failed · 77 skipped against a live CloudPress zone (ok … 130.288s).

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)
--- PASS: TestDNSProviders (129.36s)
    --- PASS: TestDNSProviders/sweeping-fly.dev (129.36s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty (0.21s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/00:A:Create_A (0.27s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/00:A:Change_A_target (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#01 (0.16s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/01:Apex:Create_A (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/01:Apex:Change_A_target (0.21s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#02 (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/02:Protocol-Wildcard:Create_wildcard (0.49s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/02:Protocol-Wildcard:Delete_wildcard (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#03 (0.16s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/03:AAAA:Create_AAAA (0.26s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/03:AAAA:Change_AAAA_target (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#04 (0.15s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/04:CNAME:Create_a_CNAME (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/04:CNAME:Change_CNAME_target (0.21s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#05 (0.19s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/05:CNAME-short:Create_a_CNAME (0.70s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#06 (0.26s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/06:MX:Create_MX_apex (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/06:MX:Change_MX_apex (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/06:MX:Create_MX (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/06:MX:Change_MX_target (0.20s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/06:MX:Change_MX_p (0.21s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/07:RP_***SKIPPED(CanUseRP_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/08:RP_***SKIPPED(CanUseRP_not_supported)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#07 (0.15s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/09:TXT:Create_TXT (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/09:TXT:Change_TXT_target (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#08 (0.16s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/10:ManyAtOnce:CreateManyAtLabel (0.65s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/10:ManyAtOnce:Empty (0.65s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/10:ManyAtOnce:Create_an_A_record (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/10:ManyAtOnce:Add_at_label1 (0.45s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/10:ManyAtOnce:Add_at_label2 (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#09 (0.40s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/11:manyTypesAtOnce:CreateManyTypesAtLabel (0.58s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/11:manyTypesAtOnce:Empty (0.91s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/11:manyTypesAtOnce:Create_an_A_record (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/11:manyTypesAtOnce:Add_Type_At_Label (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/11:manyTypesAtOnce:Add_Type_At_Label#01 (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#10 (0.44s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/12:Attl:Create_Arc (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/12:Attl:Change_TTL (0.32s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#11 (0.19s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/13:TTL:Start (0.71s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/13:TTL:Change_a_ttl (0.30s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/13:TTL:Change_single_target_from_set (0.32s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/13:TTL:Change_all_ttls (0.60s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#12 (0.98s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/14:add_to_label_and_change_orig_ttl:Setup (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/14:add_to_label_and_change_orig_ttl:Add_at_same_label,_new_ttl (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#13 (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/15:TypeChange:Create_A (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/15:TypeChange:Change_to_MX (0.40s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/15:TypeChange:Change_back_to_A (0.43s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#14 (0.18s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/16:TypeChangeHard:Create_a_CNAME (0.29s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/16:TypeChangeHard:Change_to_A_record (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/16:TypeChangeHard:Change_back_to_CNAME (0.45s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/17:HTTPS_***SKIPPED(CanUseHTTPS_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/18:Ech_***SKIPPED(CanUseHTTPS_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/19:SVCB_***SKIPPED(CanUseSVCB_not_supported)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#15 (0.18s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/20:CNAME:Record_pointing_to_@ (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#16 (0.32s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/21:ApexMX:Record_pointing_to_@ (0.49s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#17 (0.43s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/22:NullMX:create (0.57s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/22:NullMX:unnull (0.37s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/22:NullMX:renull (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#18 (0.66s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/23:NullMXApex:create (0.54s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/23:NullMXApex:unnull (0.36s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/23:NullMXApex:renull (0.61s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#19 (0.66s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/24:NS:NS_for_subdomain (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/24:NS:Dual_NS_for_subdomain (0.26s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/24:NS:NS_Record_pointing_to_@ (0.80s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/25:NS_only_APEX_***SKIPPED(excluded_by_not("CLOUDPRESS"))***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#20 (0.28s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_0-byte_TXT (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_254-byte_TXT (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_255-byte_TXT (0.36s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_256-byte_TXT (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_509-byte_TXT (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_510-byte_TXT (0.37s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_511-byte_TXT (0.46s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_764-byte_TXT (0.36s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_765-byte_TXT (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:a_766-byte_TXT (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_1_single-quote (0.37s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_1_backtick (0.38s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_1_dq-1interior (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_2_dq-2interior (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_1_dq-left (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_1_dq-right (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_semicolon (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_with_semicolon_ws (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_interior_ws (0.37s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:TXT_trailing_ws (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/26:complex_TXT:Create_a_TXT/SPF (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#21 (0.51s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/27:TXT_backslashes:TXT_with_backslashs (0.67s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#22 (0.51s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/28:Case_Sensitivity:Create_CAPS (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/28:Case_Sensitivity:Downcase_label (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/28:Case_Sensitivity:Downcase_target (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/28:Case_Sensitivity:Upcase_both (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#23 (0.26s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/29:testByLabel:initial (0.39s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/29:testByLabel:changeOne (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/29:testByLabel:deleteOne (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/29:testByLabel:addOne (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#24 (0.30s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/30:testByRecordSet:initial (0.93s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/30:testByRecordSet:changeOne (0.26s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/30:testByRecordSet:deleteOne (0.25s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/30:testByRecordSet:addOne (0.23s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#25 (0.71s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/31:IDNA:Internationalized_name (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/31:IDNA:Change_IDN (0.27s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/31:IDNA:Chinese_label (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/31:IDNA:Internationalized_CNAME_Target (0.40s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#26 (0.20s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/32:IDNAs_in_CNAME_targets:IDN_CNAME_AND_Target (0.24s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#27 (0.16s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/33:pager101:99_records (30.50s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/33:pager101:100_records (0.49s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/33:pager101:101_records (0.70s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/34:pager601_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/35:pager1201_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/36:batchRecordswithOthers_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#28 (27.80s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_record (0.46s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_change_tag (0.32s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_change_target (0.38s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_change_flag (0.32s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_many_records (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/37:CAA:CAA_whitespace (0.32s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/38:LOC_***SKIPPED(CanUseLOC_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/39:NAPTR_***SKIPPED(CanUseNAPTR_not_supported)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#29 (0.29s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/40:PTR:Create_PTR_record (0.56s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/40:PTR:Modify_PTR_record (0.35s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/41:SOA_***SKIPPED(CanUseSOA_not_supported)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#30 (0.28s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:SRV_record (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Second_SRV_record,_same_prio (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:3_SRV (0.34s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Delete_one (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Change_Target (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Change_Priority (0.39s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Change_Weight (0.31s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Change_Port (0.35s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Empty (0.50s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/42:SRV:Null_Target (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#31 (0.50s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/43:SRV:Create_SRV333 (0.33s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/43:SRV:Change_TTL999 (0.40s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/44:SSHFP_***SKIPPED(CanUseSSHFP_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/45:TLSA_***SKIPPED(CanUseTLSA_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/46:DS_***SKIPPED(CanUseDS_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/47:DS_(children_only)_***SKIPPED(CanUseDSForChildren_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/48:DS_(children_only)_CLOUDNS_***SKIPPED(CanUseDSForChildren_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/49:DHCID_***SKIPPED(CanUseDHCID_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/50:DNAME_***SKIPPED(CanUseDNAME_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/51:DNSKEY_***SKIPPED(CanUseDNSKEY_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/52:ALIAS_on_apex_***SKIPPED(CanUseAlias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/53:ALIAS_to_nonfqdn_***SKIPPED(CanUseAlias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/54:ALIAS_on_subdomain_***SKIPPED(CanUseAlias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/55:AZURE_ALIAS_A_***SKIPPED(CanUseAzureAlias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/56:AZURE_ALIAS_CNAME_***SKIPPED(CanUseAzureAlias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/57:R53_ALIAS2_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/58:R53_ALIAS_ORDER_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/59:R53_ALIAS_CNAME_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/60:R53_ALIAS_Loop_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/61:R53_alias_pre-existing_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/62:R53_alias_evaluate_target_health_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/63:R53_B3493_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/64:R53_B3493_REV_***SKIPPED(CanUseRoute53Alias_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/65:R53_WEIGHT_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/66:R53_WEIGHT_CNAME_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/67:R53_WEIGHT_MIXED_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/68:CLOUDFLAREAPI_SINGLE_REDIRECT_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/69:CF_PROXY_A_create_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/70:CF_PROXY_A_off_to_on_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/71:CF_PROXY_A_on_to_off_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/72:CF_PROXY_CNAME_create_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/73:CF_PROXY_CNAME_off_to_on_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/74:CF_PROXY_CNAME_on_to_off_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/75:CF_CNAME_FLATTEN_create_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/76:CF_CNAME_FLATTEN_off_to_on_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/77:CF_CNAME_FLATTEN_on_to_off_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/78:CF_COMMENT_create_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/79:CF_TAGS_create_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/80:CF_WORKER_ROUTE_***SKIPPED(excluded_by_alltrue([false]))***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/81:ADGUARDHOME_A_PASSTHROUGH_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/82:ADGUARDHOME_AAAA_PASSTHROUGH_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/83:MIKROTIK_FWD_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/84:MIKROTIK_NXDOMAIN_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/85:MIKROTIK_METADATA_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/86:VERCEL_CAA_whitespace_-_cansignhttpexchanges_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#32 (0.51s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:Create_some_records (1.47s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_label (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_label,type (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#01 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_label,type,target (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#02 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_type (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#03 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_type,target (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#04 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_target (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#05 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_manytypes (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#06 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:ignore_label,type,target=* (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/87:IGNORE_main:VERIFY_PREVIOUS#07 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#33 (1.28s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:Create_some_records (1.57s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_label (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_label,type (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#01 (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_label,type,target (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#02 (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_type (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#03 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_type,target (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#04 (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_target (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#05 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:apex_manytypes (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/88:IGNORE_apex:VERIFY_PREVIOUS#06 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#34 (0.68s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/89:IGNORE_unsafe:Create_some_records (0.79s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/89:IGNORE_unsafe:ignore_unsafe_apex (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/89:IGNORE_unsafe:VERIFY_PREVIOUS (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/89:IGNORE_unsafe:ignore_unsafe_label (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/89:IGNORE_unsafe:VERIFY_PREVIOUS#01 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#35 (0.58s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:Create_some_records (1.28s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:ignore_label=foo.* (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:VERIFY_PREVIOUS (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:ignore_label=foo.bat,type (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:VERIFY_PREVIOUS#01 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:ignore_target=*.domain (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/90:IGNORE_wilds:VERIFY_PREVIOUS#02 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#36 (0.91s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:Create_some_records (1.74s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:IGNORE_change_ByZone (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:VERIFY_PREVIOUS (0.09s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:IGNORE_change_ByLabel (0.20s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:VERIFY_PREVIOUS#01 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:IGNORE_change_ByRecordSet (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:VERIFY_PREVIOUS#02 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:IGNORE_change_ByRecord (0.21s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/91:IGNORE_with_modify:VERIFY_PREVIOUS#03 (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#37 (1.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/92:IGNORE_TARGET_b2285:Create_some_records (0.43s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/92:IGNORE_TARGET_b2285:Add_a_new_record_-_ignoring_test.foo.com. (0.03s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/92:IGNORE_TARGET_b2285:VERIFY_PREVIOUS (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#38 (0.54s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/93:IGNORE_everything_b2822:Create_some_records (0.89s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/93:IGNORE_everything_b2822:ignore_them_all (0.08s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/93:IGNORE_everything_b2822:VERIFY_PREVIOUS (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#39 (0.60s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:Create_some_records (0.43s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:ignore (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:VERIFY_PREVIOUS (0.14s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:Verify_nothing_changed (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:VERIFY_PREVIOUS#01 (0.07s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:ignore_with_change (0.21s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/94:IGNORE_w/change_b3227:VERIFY_PREVIOUS#02 (0.09s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/95:structured_TXT_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/96:structured_TXT_as_native_records_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/97:CLOUDNS_geodns_tests_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/98:PORKBUN_URLFWD_tests_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/99:GCORE_metadata_tests_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/100:NAMECHEAP_url_redirect_records_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/101:OPENPGPKEY_***SKIPPED(CanUseOPENPGPKEY_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/102:SMIMEA_***SKIPPED(CanUseSMIMEA_not_supported)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/103:Bunny_DNS_Pull_Zone_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/104:HEDNS_DYNAMIC_A_lifecycle_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/105:HEDNS_DYNAMIC_AAAA+TXT_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/106:HEDNS_DDNS_KEY_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- SKIP: TestDNSProviders/sweeping-fly.dev/107:HEDNS_DYNAMIC_mixed_records_***SKIPPED(disabled_by_only)***:Empty (0.00s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#40 (0.28s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/108:final:final (0.22s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/Clean_Slate:Empty#41 (0.15s)
        --- PASS: TestDNSProviders/sweeping-fly.dev/109:final:final (0.24s)
--- SKIP: TestDualProviders (0.07s)
--- SKIP: TestNameserverDots (0.07s)
--- SKIP: TestDuplicateNameservers (0.07s)

@TomOnTime TomOnTime left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for contributing this new provider, @name OF PERSON !

Three notes:

  1. @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
  2. 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.
  3. 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

@arnoschoon

Copy link
Copy Markdown
Collaborator Author

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).

@TomOnTime

Copy link
Copy Markdown
Collaborator

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 :)

Yes, please. That way he updates our spreadsheet of who's who.

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).

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,
Tom

@TomOnTime

Copy link
Copy Markdown
Collaborator

Please resolve the conflicts and I'll do another quick review. We should be able to get this into the next release. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants