Documentation
¶
Overview ¶
Package-doc additions in this file are scoped to the dns_delegation driver. See dns.go for the prior infra.dns driver.
Package drivers provides IaC ResourceDriver implementations for the Hover DNS provider.
Hover exposes NO official API. All endpoints below are derived from https://github.com/pjslauta/hover-dyn-dns and browser traffic inspection. Endpoint inventory (all relative to https://www.hover.com):
GET /api/domains/<domain>/dns — list records for a zone POST /api/dns — create a record (form: domain_id, name, type, content, ttl) PUT /api/dns/<id> — update a record (form: content, ttl) DELETE /api/dns/<id> — delete a record
These are undocumented; the Hover site uses them directly from the control panel SPA. They may change without notice.
Index ¶
- type DNSDriver
- func (d *DNSDriver) Create(ctx context.Context, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
- func (d *DNSDriver) Delete(_ context.Context, _ interfaces.ResourceRef) error
- func (d *DNSDriver) Diff(_ context.Context, desired interfaces.ResourceSpec, ...) (*interfaces.DiffResult, error)
- func (d *DNSDriver) HealthCheck(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.HealthResult, error)
- func (d *DNSDriver) ProviderIDFormat() interfaces.ProviderIDFormat
- func (d *DNSDriver) Read(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.ResourceOutput, error)
- func (d *DNSDriver) Scale(_ context.Context, _ interfaces.ResourceRef, _ int) (*interfaces.ResourceOutput, error)
- func (d *DNSDriver) SensitiveKeys() []string
- func (d *DNSDriver) Update(ctx context.Context, ref interfaces.ResourceRef, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
- type DelegationDriver
- func (d *DelegationDriver) Create(ctx context.Context, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
- func (d *DelegationDriver) Delete(ctx context.Context, ref interfaces.ResourceRef) error
- func (d *DelegationDriver) Diff(ctx context.Context, desired interfaces.ResourceSpec, ...) (*interfaces.DiffResult, error)
- func (d *DelegationDriver) HealthCheck(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.HealthResult, error)
- func (d *DelegationDriver) ProviderIDFormat() interfaces.ProviderIDFormat
- func (d *DelegationDriver) Read(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.ResourceOutput, error)
- func (d *DelegationDriver) Scale(_ context.Context, _ interfaces.ResourceRef, _ int) (*interfaces.ResourceOutput, error)
- func (d *DelegationDriver) SensitiveKeys() []string
- func (d *DelegationDriver) Type() string
- func (d *DelegationDriver) Update(ctx context.Context, ref interfaces.ResourceRef, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
- type HoverDNSClient
- type HoverDelegationClient
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DNSDriver ¶
type DNSDriver struct {
// contains filtered or unexported fields
}
DNSDriver manages Hover DNS zones and records (infra.dns). ProviderID is the apex domain name (e.g. "example.com").
func NewDNSDriver ¶
NewDNSDriver creates a DNSDriver backed by a real hover.Client.
func NewDNSDriverWithClient ¶
func NewDNSDriverWithClient(c HoverDNSClient) *DNSDriver
NewDNSDriverWithClient creates a driver with an injected client (for tests).
func (*DNSDriver) Create ¶
func (d *DNSDriver) Create(ctx context.Context, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
Create idempotently reconciles a DNS zone on Hover. It creates missing records and updates existing ones that differ. Hover does not support creating zones via API — the domain must already be registered and in the account.
Config keys:
domain string — apex zone name (e.g. "example.com"). Falls back to spec.Name.
records []any — each element: {type, name, content, ttl?}
func (*DNSDriver) Delete ¶
func (d *DNSDriver) Delete(_ context.Context, _ interfaces.ResourceRef) error
func (*DNSDriver) Diff ¶
func (d *DNSDriver) Diff(_ context.Context, desired interfaces.ResourceSpec, current *interfaces.ResourceOutput) (*interfaces.DiffResult, error)
func (*DNSDriver) HealthCheck ¶
func (d *DNSDriver) HealthCheck(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.HealthResult, error)
func (*DNSDriver) ProviderIDFormat ¶
func (d *DNSDriver) ProviderIDFormat() interfaces.ProviderIDFormat
func (*DNSDriver) Read ¶
func (d *DNSDriver) Read(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.ResourceOutput, error)
func (*DNSDriver) Scale ¶
func (d *DNSDriver) Scale(_ context.Context, _ interfaces.ResourceRef, _ int) (*interfaces.ResourceOutput, error)
func (*DNSDriver) SensitiveKeys ¶
func (*DNSDriver) Update ¶
func (d *DNSDriver) Update(ctx context.Context, ref interfaces.ResourceRef, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
type DelegationDriver ¶ added in v0.2.0
type DelegationDriver struct {
// contains filtered or unexported fields
}
DelegationDriver manages registrar-level nameserver delegation (infra.dns_delegation) for Hover-registered domains.
ProviderID = apex domain name (e.g. "example.com"). One resource = one domain. Outputs contain only the desired nameservers as []any (structpb-safe). v0.2.0 ships Delete = reset to Hover defaults [ns1.hover.com, ns2.hover.com]; restore-from-stash is deferred to v0.3.0 because interfaces.ResourceRef has no state channel.
func NewDelegationDriver ¶ added in v0.2.0
func NewDelegationDriver(c *hover.Client) *DelegationDriver
NewDelegationDriver returns a DelegationDriver bound to a real *hover.Client.
func NewDelegationDriverWithClient ¶ added in v0.2.0
func NewDelegationDriverWithClient(c HoverDelegationClient) *DelegationDriver
NewDelegationDriverWithClient returns a DelegationDriver bound to an injected client; used by tests.
func NewDelegationDriverWithClientAndResolver ¶ added in v0.2.3
func NewDelegationDriverWithClientAndResolver(c HoverDelegationClient, resolver func(context.Context, string) ([]string, error)) *DelegationDriver
NewDelegationDriverWithClientAndResolver returns a DelegationDriver bound to an injected client and public-NS resolver; used by tests.
func (*DelegationDriver) Create ¶ added in v0.2.0
func (d *DelegationDriver) Create(ctx context.Context, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
Create PUTs the desired nameservers. Output built from the desired set (no read-after-write); SetNameservers is authoritative on success.
func (*DelegationDriver) Delete ¶ added in v0.2.0
func (d *DelegationDriver) Delete(ctx context.Context, ref interfaces.ResourceRef) error
Delete resets the registrar nameservers to Hover's defaults. Operators whose domains had non-default originals must restore manually via the Hover UI if a Delete fires unintended.
func (*DelegationDriver) Diff ¶ added in v0.2.0
func (d *DelegationDriver) Diff(ctx context.Context, desired interfaces.ResourceSpec, current *interfaces.ResourceOutput) (*interfaces.DiffResult, error)
Diff compares desired vs current. Multiset semantics on nameservers (order-independent — Hover accepts any order on PUT). Domain rename (desired vs current.ProviderID) forces Replace.
func (*DelegationDriver) HealthCheck ¶ added in v0.2.0
func (d *DelegationDriver) HealthCheck(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.HealthResult, error)
HealthCheck probes connectivity to the domain by fetching its delegation.
func (*DelegationDriver) ProviderIDFormat ¶ added in v0.2.0
func (d *DelegationDriver) ProviderIDFormat() interfaces.ProviderIDFormat
func (*DelegationDriver) Read ¶ added in v0.2.0
func (d *DelegationDriver) Read(ctx context.Context, ref interfaces.ResourceRef) (*interfaces.ResourceOutput, error)
Read fetches the current registrar nameservers.
func (*DelegationDriver) Scale ¶ added in v0.2.0
func (d *DelegationDriver) Scale(_ context.Context, _ interfaces.ResourceRef, _ int) (*interfaces.ResourceOutput, error)
Scale is not supported for DNS delegation (no replica concept).
func (*DelegationDriver) SensitiveKeys ¶ added in v0.2.0
func (d *DelegationDriver) SensitiveKeys() []string
func (*DelegationDriver) Type ¶ added in v0.2.0
func (d *DelegationDriver) Type() string
func (*DelegationDriver) Update ¶ added in v0.2.0
func (d *DelegationDriver) Update(ctx context.Context, ref interfaces.ResourceRef, spec interfaces.ResourceSpec) (*interfaces.ResourceOutput, error)
Update replaces the registrar nameservers. Rejects in-place domain renames (those must route through Diff → NeedsReplace → Delete-then-Create).
type HoverDNSClient ¶
type HoverDNSClient interface {
GetDomain(ctx context.Context, domain string) (*hover.Domain, error)
ListRecords(ctx context.Context, domain string) ([]hover.DNSRecord, error)
CreateRecord(ctx context.Context, domainID string, rec hover.DNSRecord) (*hover.DNSRecord, error)
UpdateRecord(ctx context.Context, recordID string, rec hover.DNSRecord) error
DeleteRecord(ctx context.Context, recordID string) error
}
HoverDNSClient is the subset of hover.Client used by DNSDriver (injectable for tests).
type HoverDelegationClient ¶ added in v0.2.0
type HoverDelegationClient interface {
GetDomainDelegation(ctx context.Context, domain string) (*hover.DomainDelegation, error)
SetNameservers(ctx context.Context, domain string, ns []string) error
}
HoverDelegationClient is the subset of *hover.Client that DelegationDriver depends on. Injectable for tests.