Dezvoltatori → DNS ca cod

DNS ca cod

Păstrați zona într-un singur fișier YAML sau JSON, lângă codul dumneavoastră. Revizuiți modificările DNS în pull requesturi, vedeți exact ce se va schimba înainte să se întâmple și aplicați totul într-un singur pas.

Porniți de la zona dumneavoastră

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.

Fișierul

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 este @ pentru zona însăși sau un nume relativ la aceasta (www, _dmarc); funcționează și un nume complet calificat, cu punct la final.
  • type este A, AAAA, CNAME, MX, TXT, SRV, PTR sau REDIRECT (o redirecționare HTTP către URL-ul din value).
  • ttl este 5m, 15m, 30m, 1h sau 1d; fără acesta, o înregistrare primește ttl-ul fișierului sau 1h. MX acceptă priority (implicit 10), SRV acceptă priority, weight și port, iar REDIRECT acceptă save_path (implicit true).
  • Același document funcționează și ca JSON. JSON Schema vă oferă completare automată și verificări în VS Code și în alte editoare.

Cum se creează un plan

Fișierul reprezintă întreaga zonă: o înregistrare care există în zonă, dar nu și în fișier, este ștearsă. Folosiți --keep-unlisted (prune=false în API) pentru a doar adăuga și modifica.

Înregistrările A, AAAA, MX și TXT sunt identificate după nume și valoare (și după prioritate, în cazul MX), deoarece un nume poate avea mai multe astfel de înregistrări. Înregistrările CNAME, SRV, PTR și REDIRECT sunt identificate după nume. Un ttl diferit sau o prioritate, o pondere ori un port SRV diferit reprezintă o modificare; orice altceva reprezintă o adăugare sau o ștergere.

Apply rulează într-o singură tranzacție: mai întâi ștergerile, apoi modificările, apoi înregistrările noi, astfel încât un CNAME poate înlocui o înregistrare A în același fișier. Dacă o înregistrare este refuzată, nu se modifică nimic. Dacă cineva modifică zona între plan și apply, apply este refuzat și trebuie să refaceți planul.

Înregistrările pe care NameOcean le păstrează pentru uz propriu, adresa din spatele unei redirecționări HTTP și provocările ACME pentru SSL, nu sunt niciodată exportate, incluse în plan sau șterse.

GitHub Actions

Creați o cheie API cu dns:write (sau doar dns:read pentru un job care doar planifică) și salvați-o ca secret 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 se încheie cu codul 2 când există modificări, pentru joburile care trebuie doar să raporteze abaterile.

Prin REST API

GET /dns/{zone}/export?output=yamlZona ca fișier (JSON fără output=yaml); antetul X-Zone-Serial conține serialul acesteia
POST /dns/{zone}/planCe ar face apply; nu modifică nimic și necesită doar dns:read
POST /dns/{zone}/apply?serial=NAduce zona în conformitate cu fișierul; 409 zone_changed dacă aceasta nu mai este la serialul din plan
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

Trimiteți YAML cu Content-Type: application/yaml sau același document ca JSON. Un fișier pe care serverul nu îl poate accepta primește răspunsul 400 invalid_zone_file, cu o listă errors care indică fiecare înregistrare și câmp. Toate detaliile se găsesc în documentația API.

Din AI-ul dvs.

Prin MCP, un asistent poate exporta o zonă, poate planifica o modificare a mai multor înregistrări deodată cu plan_dns_zone și, după ce vă arată planul, o poate aplica cu apply_dns_zone.