This repository has been archived on 2026-08-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
terraform-provider-dynu/README.md
T

6.2 KiB

terraform-provider-dynu

A standalone Terraform provider for Dynu DNS.

Status: read-only milestone. This provider currently implements provider configuration and data sources only.

Feature scope

Implemented:

  • Provider authentication using api_key or DYNU_API_KEY
  • Optional provider base_url override for local test/dev setups
  • Data sources:
    • dynu_domains
    • dynu_domain
    • dynu_dns_records

Not implemented yet:

  • Terraform resources (no create/update/delete)
  • Any write API operations

Provider source and module path

  • Terraform provider source address: dynu/dynu
  • Go module path: github.com/dynu/terraform-provider-dynu

The repository can be hosted elsewhere during development, but module and provider source naming are kept aligned with planned public registry publishing.

Requirements

  • Terraform >= 1.5
  • Go >= 1.23
  • Dynu API key for live API usage

Authentication

Option 1: Terraform configuration.

provider "dynu" {
  api_key = var.dynu_api_key
}

variable "dynu_api_key" {
  type      = string
  sensitive = true
}

Option 2: Environment variable.

export DYNU_API_KEY="your-dynu-api-key"

Data source examples

See the examples/ directory:

  • examples/provider/provider.tf
  • examples/data-sources/dynu_domains/data-source.tf
  • examples/data-sources/dynu_domain/data-source.tf
  • examples/data-sources/dynu_dns_records/data-source.tf

Developer workflow

  • ./scripts/setup-dev.sh - validate local Go/Terraform toolchains and environment health (no changes)
  • ./scripts/setup-dev.sh --fix - attempt safe remediation with installed version managers (mise, asdf, tfenv, tenv)
  • ./scripts/setup-dev.sh --strict - require Terraform to be installed
  • ./scripts/check.sh - formatting, vet, and unit tests (Tier A)
  • ./scripts/test-integration.sh - local mock-backed provider integration tests (Tier B)
  • ./scripts/testacc.sh - default: Tier B; live mode available with --live (Tier C)

setup-dev behavior

scripts/setup-dev.sh now performs robust validation and troubleshooting checks:

  • Always reports resolved paths for bash, git, go, and terraform (Terraform is warning-only unless --strict is used).
  • Enforces minimum versions:
    • Go >= 1.23 (error if missing or too old)
    • Terraform >= 1.5 (warning if missing by default, error if present but too old)
  • Detects common broken Go setups:
    • manual GOROOT conflicting with go env GOROOT
    • stale stdlib tree mismatches (for example missing slices, maps, math/rand/v2)
  • Detects malformed GOPROXY and prints the recommended non-destructive fix:
    • go env -w GOPROXY=https://proxy.golang.org,direct
  • Supports optional safe auto-fix mode:
    • only uses already-installed user-space managers
    • does not run distro package managers, sudo, or shell-profile edits
    • re-validates tools after attempted remediation

The script is safe for both normal shells and VS Code integrated terminals, and includes guidance when terminal/session restart may be needed after changing versions.

Standalone repository guarantee

This repository is intentionally self-contained:

  • no dependency on sibling repositories
  • no dependency on external helper scripts (for example services-up.sh)
  • no hardcoded local paths (for example /workspace/... or /home/...)

setup-dev troubleshooting quick reference

  • Malformed GOPROXY

    • Symptom: warning that GOPROXY has no valid entries.
    • Fix: go env -w GOPROXY=https://proxy.golang.org,direct
  • Broken GOROOT

    • Symptom: GOROOT environment value differs from go env GOROOT, or stdlib package checks fail.
    • Fix: usually remove manual override with unset GOROOT, then ensure the intended go binary is first in PATH.
  • Go version / stdlib path mismatch

    • Symptom: go version looks modern but build errors mention missing stdlib packages (for example slices, maps, math/rand/v2).
    • Cause: stale or mismatched Go installation path.
    • Fix: re-select/install Go via your version manager and re-run ./scripts/setup-dev.sh.
  • VS Code integrated terminal stale environment

    • Symptom: command paths or versions do not match your expected shell setup.
    • Fix: restart the integrated terminal (or reload the VS Code window) and run ./scripts/setup-dev.sh again.

Build

go build ./...

Testing model

The provider now has three explicit test tiers:

Tier A: unit tests (fast, no network)

Covers focused package behavior (client parsing, mappers, provider helper logic).

./scripts/check.sh
go test ./...

Tier B: local integration tests (mock Dynu API, no real credentials)

These tests use an httptest fake Dynu API server and run the Terraform provider end-to-end against deterministic fixtures.

  • No Dynu account required
  • Dummy API key is used in test provider configuration
  • Exercises provider wiring, schema/state mapping, hostname resolution flow, and diagnostic behavior
./scripts/test-integration.sh
./scripts/testacc.sh

Tier C: live acceptance tests (opt-in)

These tests call the real Dynu API and are read-only.

Required environment variables:

  • TF_ACC=1
  • DYNU_API_KEY

Optional:

  • DYNU_DOMAIN (required for domain-specific acceptance tests such as dynu_domain and dynu_dns_records)
TF_ACC=1 DYNU_API_KEY="your-dynu-api-key" DYNU_DOMAIN="www.example.com" ./scripts/testacc.sh --live
# or
LIVE=1 TF_ACC=1 DYNU_API_KEY="your-dynu-api-key" ./scripts/testacc.sh

If DYNU_DOMAIN is omitted, domain-specific live tests skip cleanly.

CI

GitHub Actions CI runs on push and pull requests and executes:

  • gofmt verification
  • go vet ./...
  • go test ./...

Live acceptance tests are intentionally excluded from default CI.

Documentation

Registry-style markdown docs are stored in docs/.

Limitations

  • Dynu timestamps are currently exposed as strings exactly as returned by Dynu API.
  • Data returned from Dynu is sorted in provider state for Terraform stability.
  • Read-only operations only.

Roadmap

Next planned milestone after this testing foundation:

  • first writable resource (dynu_dns_record) with strict schema validation, import support, mock-first integration tests, and then live acceptance coverage.