terraform-provider-dynu
A standalone Terraform provider for Dynu DNS.
Status: read-only milestone. This provider currently implements provider configuration plus read-only data sources.
Quick start (local dev with dev_overrides)
This provider is not published to the Terraform Registry yet. For local development, use Terraform CLI dev_overrides and your local provider binary.
- Build provider binary in repo root:
go build -o terraform-provider-dynu
- Configure
~/.terraformrc:
provider_installation {
dev_overrides {
"dynu/dynu" = "/path/to/terraform-dynu-provider"
}
direct {}
}
- Run the runnable read-only example:
cd examples/read_only
cp terraform.tfvars.example terraform.tfvars
terraform validate
terraform plan
With
dev_overrides, Terraform uses your local binary fordynu/dynu.terraform initis not the primary local-dev loop here and may still try registry/network operations.
Copy/paste starter configuration
terraform {
required_providers {
dynu = {
source = "dynu/dynu"
}
}
}
provider "dynu" {
api_key = var.dynu_api_key # optional if DYNU_API_KEY is set
}
variable "dynu_api_key" {
type = string
default = null
sensitive = true
}
data "dynu_domains" "all" {}
# Use a real hostname from your Dynu account.
data "dynu_domain" "selected" {
hostname = "www.example.com"
}
data "dynu_dns_records" "selected" {
hostname = "www.example.com"
}
Provider schema reference
Provider: dynu
Optional arguments:
api_key(String, Sensitive)- Falls back to
DYNU_API_KEYenvironment variable when omitted.
- Falls back to
base_url(String)- Test/dev override for Dynu API base URL.
No provider resources are implemented yet.
Data source schema reference
dynu_domains
Arguments:
- none
Attributes:
domains(List(Object)):id,name,unicode_name,token(sensitive),state,groupipv4_address,ipv6_address,ttlipv4,ipv6,ipv4_wildcard_alias,ipv6_wildcard_aliasallow_zone_transfer,dnssec,created_on,updated_on
Example:
data "dynu_domains" "all" {}
dynu_domain
Arguments:
hostname(String, required)
Attributes:
domain(Object) with the same fields asdynu_domains.domains[*].
Example:
data "dynu_domain" "selected" {
hostname = "www.example.com"
}
dynu_dns_records
Arguments:
hostname(String, required)
Attributes:
domain_id(Number)domain_name(String)records(List(Object)) with:id,domain_id,domain_name,node_name,hostname,record_typettl,state,content,updated_on,group,host
Example:
data "dynu_dns_records" "selected" {
hostname = "www.example.com"
}
Examples
- Runnable local workflow:
examples/read_only/ - Provider block example:
examples/provider/provider.tf - Individual data source snippets:
examples/data-sources/dynu_domains/data-source.tfexamples/data-sources/dynu_domain/data-source.tfexamples/data-sources/dynu_dns_records/data-source.tf
Troubleshooting local dev
-
Unsupported provider arguments
- Symptom: errors such as
Unsupported argument(for exampleusername). - Fix: use only
api_keyand/orbase_urlinprovider "dynu".
- Symptom: errors such as
-
Bad API credentials
- Symptom: diagnostics mention authentication failures.
- Fix: verify
api_keyorDYNU_API_KEYand re-runterraform plan.
-
Unknown data source arguments
- Symptom: unsupported argument errors in data blocks.
- Fix:
dynu_domainanddynu_dns_recordsrequire onlyhostname;dynu_domainstakes no arguments.
-
Stale provider binary after code changes
- Symptom: Terraform behavior doesn't reflect latest code.
- Fix: rebuild binary (
go build -o terraform-provider-dynu) and runterraform planagain.
Developer workflow
./scripts/setup-dev.sh- validate local toolchain requirements./scripts/check.sh- formatting, vet, and unit tests./scripts/test-integration.sh- local mock-backed provider integration tests./scripts/testacc.sh- acceptance/integration test wrapper (live tests opt-in)
Live acceptance tests are read-only and require:
TF_ACC=1DYNU_API_KEY- optional
DYNU_DOMAINfor domain-specific coverage
Feature scope
Implemented:
- Provider authentication via
api_keyorDYNU_API_KEY - Optional provider
base_urloverride - Data sources:
dynu_domains,dynu_domain,dynu_dns_records
Not implemented yet:
- Terraform resources (create/update/delete)
- Any write API operations