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