drivers

package
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 21, 2026 License: MIT Imports: 7 Imported by: 0

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

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

func NewDNSDriver(c *hover.Client) *DNSDriver

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

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 (*DNSDriver) Diff

func (*DNSDriver) HealthCheck

func (*DNSDriver) ProviderIDFormat

func (d *DNSDriver) ProviderIDFormat() interfaces.ProviderIDFormat

func (*DNSDriver) Read

func (*DNSDriver) Scale

func (*DNSDriver) SensitiveKeys

func (d *DNSDriver) SensitiveKeys() []string

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 (*DelegationDriver) Create added in v0.2.0

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

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

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

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

Read fetches the current registrar nameservers.

func (*DelegationDriver) Scale added in v0.2.0

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

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL