Utvecklare → DNS som kod

DNS som kod

Ha din zon i en enda YAML- eller JSON-fil bredvid din kod. Granska DNS-ändringar i pull requests, se exakt vad som kommer att ändras innan det sker och tillämpa det i ett enda steg.

Utgå från din zon

nameocean
$ nameocean dns export example.com > dns.yaml
$ $EDITOR dns.yaml
$ nameocean dns plan -f dns.yaml
+  CNAME  blog  example.netlify.app
~  A      @     203.0.113.10  ttl 1h → 5m
-  A      old   203.0.113.9
example.com: 1 to add, 1 to change, 1 to delete, 6 unchanged.
$ nameocean dns apply -f dns.yaml
Apply these changes? [y/N] y
Applied: 1 added, 1 changed, 1 deleted. example.com is at serial 214.

Filen

dns.yaml
# yaml-language-server: $schema=https://nameocean.net/schemas/dns-zone.json
zone: example.com
records:
  - name: "@"
    type: A
    value: 203.0.113.10
    ttl: 5m
  - name: www
    type: CNAME
    value: "@"
  - name: "@"
    type: MX
    value: mail.example.com
    priority: 10
  - name: "@"
    type: TXT
    value: "v=spf1 mx -all"
  - name: _sip._tcp
    type: SRV
    value: sip.example.com
    priority: 10
    weight: 5
    port: 5060
  - name: old
    type: REDIRECT
    value: https://example.com/new
  • name är @ för själva zonen eller ett namn relativt till den (www, _dmarc); ett fullständigt kvalificerat namn med avslutande punkt fungerar också.
  • type är A, AAAA, CNAME, MX, TXT, SRV, PTR eller REDIRECT (en HTTP-omdirigering till URL:en i value).
  • ttl är 5m, 15m, 30m, 1h eller 1d; utan den får en post filens ttl, eller 1h. MX tar priority (standard 10), SRV priority, weight och port, REDIRECT save_path (standard true).
  • Samma dokument fungerar som JSON. JSON Schema ger dig autokomplettering och kontroller i VS Code och andra editorer.

Så tas en plan fram

Filen är hela zonen: en post som finns i zonen men inte i filen tas bort. Ange --keep-unlisted (prune=false i API:et) för att endast lägga till och ändra.

A-, AAAA-, MX- och TXT-poster matchas efter namn och värde (och prioritet för MX), eftersom ett namn kan ha flera sådana poster. CNAME-, SRV-, PTR- och REDIRECT-poster matchas efter namn. Ett annat ttl-värde, eller en annan SRV-prioritet, vikt eller port, räknas som en ändring; allt annat är ett tillägg eller en borttagning.

Apply körs i en enda transaktion: först borttagningar, sedan ändringar, sedan nya poster, så att en CNAME kan ersätta en A-post i samma fil. Om en post avvisas ändras ingenting. Om någon ändrar zonen mellan plan och apply avvisas apply och du får göra en ny plan.

Poster som NameOcean behåller för egen del, adressen bakom en HTTP-omdirigering och ACME-utmaningarna för SSL, exporteras, planeras eller tas aldrig bort.

GitHub Actions

Skapa en API-nyckel med dns:write (eller endast dns:read för ett jobb som bara planerar) och spara den som hemligheten NAMEOCEAN_API_KEY.

.github/workflows/dns.yml
name: dns
on:
  pull_request: {paths: [dns.yaml]}
  push: {branches: [main], paths: [dns.yaml]}
jobs:
  dns:
    runs-on: ubuntu-latest
    env:
      NAMEOCEAN_API_KEY: ${{ secrets.NAMEOCEAN_API_KEY }}
    steps:
      - uses: actions/checkout@v4
      - run: curl -fsSL https://nameocean.net/install.sh | sh
      - run: nameocean dns plan -f dns.yaml
      - if: github.event_name == 'push'
        run: nameocean dns apply -f dns.yaml --yes

dns plan --detailed-exitcode avslutas med 2 när det finns ändringar, för jobb som bara ska rapportera avvikelser.

Med REST API:et

GET /dns/{zone}/export?output=yamlZonen som fil (JSON utan output=yaml); X-Zone-Serial-headern är dess serienummer
POST /dns/{zone}/planVad apply skulle göra; ändrar ingenting och kräver endast dns:read
POST /dns/{zone}/apply?serial=NGör zonen identisk med filen; 409 zone_changed om den inte längre har planens serienummer
curl
$ curl -X POST https://nameocean.net/api/v1/dns/example.com/plan \
    -H "Authorization: Bearer $NAMEOCEAN_API_KEY" \
    -H "Content-Type: application/yaml" --data-binary @dns.yaml

Skicka YAML med Content-Type: application/yaml eller samma dokument som JSON. En fil som servern inte kan acceptera besvaras med 400 invalid_zone_file och en errors-lista som anger varje post och fält. Allt finns i API-referensen.

Från er AI

Via MCP kan en assistent exportera en zon, planera en ändring av många poster på en gång med plan_dns_zone och, efter att ha visat dig planen, tillämpa den med apply_dns_zone.