Implement DNS mixin (GET/PUT/DELETE records by type/name) #2

Open
opened 2026-06-13 14:01:49 +00:00 by ldraney · 0 comments
Owner

Type

Feature

Lineage

Depends on #1 (scaffold). Immediate need for palinks #28 (custom domain wiring).

Repo

ldraney/godaddy-sdk

User Story

As Lucas
I want to set DNS A records programmatically via the SDK
So that custom domain wiring doesn't require manual GoDaddy dashboard clicks

Context

DNS record endpoints are in the domains swagger spec. 5 endpoints:

  • GET /v1/domains/{domain}/records/{type}/{name} — get records by type/name
  • PUT /v1/domains/{domain}/records/{type}/{name} — replace records by type/name
  • DELETE /v1/domains/{domain}/records/{type}/{name} — delete records by type/name
  • PUT /v1/domains/{domain}/records/{type} — replace all records of a type
  • PUT /v1/domains/{domain}/records — replace all records
  • PATCH /v1/domains/{domain}/records — add records

File Targets

  • src/godaddy_sdk/dns.pyDNSMixin with methods for all DNS endpoints
  • tests/test_dns.py — integration tests against live API (OTE or prod)
  • docs/dns.md — endpoint reference

Feature Flag

None.

Acceptance Criteria

  • client.get_records("palinks.app", "A") returns current A records
  • client.replace_records("palinks.app", "A", "@", [{"data": "178.156.129.142", "ttl": 600}]) sets A record
  • client.delete_records("palinks.app", "A", "@") removes A record
  • All 5 DNS endpoints covered

Test Expectations

  • Integration test: set and read back an A record
  • Integration test: delete a record

Constraints

  • Must work with prod API key (OTE doesn't have real domains)
  • Rate limit: 60 req/min

Checklist

  • DNSMixin implemented
  • Integration tests
  • docs/dns.md
  • project-godaddy-sdk
  • ldraney/palinks #50 — set DNS A records for palinks.app
### Type Feature ### Lineage Depends on #1 (scaffold). Immediate need for `palinks #28` (custom domain wiring). ### Repo `ldraney/godaddy-sdk` ### User Story As Lucas I want to set DNS A records programmatically via the SDK So that custom domain wiring doesn't require manual GoDaddy dashboard clicks ### Context DNS record endpoints are in the domains swagger spec. 5 endpoints: - `GET /v1/domains/{domain}/records/{type}/{name}` — get records by type/name - `PUT /v1/domains/{domain}/records/{type}/{name}` — replace records by type/name - `DELETE /v1/domains/{domain}/records/{type}/{name}` — delete records by type/name - `PUT /v1/domains/{domain}/records/{type}` — replace all records of a type - `PUT /v1/domains/{domain}/records` — replace all records - `PATCH /v1/domains/{domain}/records` — add records ### File Targets - `src/godaddy_sdk/dns.py` — `DNSMixin` with methods for all DNS endpoints - `tests/test_dns.py` — integration tests against live API (OTE or prod) - `docs/dns.md` — endpoint reference ### Feature Flag None. ### Acceptance Criteria - [ ] `client.get_records("palinks.app", "A")` returns current A records - [ ] `client.replace_records("palinks.app", "A", "@", [{"data": "178.156.129.142", "ttl": 600}])` sets A record - [ ] `client.delete_records("palinks.app", "A", "@")` removes A record - [ ] All 5 DNS endpoints covered ### Test Expectations - [ ] Integration test: set and read back an A record - [ ] Integration test: delete a record ### Constraints - Must work with prod API key (OTE doesn't have real domains) - Rate limit: 60 req/min ### Checklist - [ ] DNSMixin implemented - [ ] Integration tests - [ ] docs/dns.md ### Related - `project-godaddy-sdk` - `ldraney/palinks #50` — set DNS A records for palinks.app
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ldraney/godaddy-sdk#2
No description provided.