Προγραμματιστές → DNS ως κώδικας

DNS ως κώδικας

Διατηρήστε τη ζώνη σας σε ένα αρχείο YAML ή JSON δίπλα στον κώδικά σας. Ελέγξτε τις αλλαγές DNS σε pull requests, δείτε ακριβώς τι θα αλλάξει πριν αλλάξει και εφαρμόστε το σε ένα βήμα.

Ξεκινήστε από τη ζώνη σας

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.

Το αρχείο

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 είναι @ για την ίδια τη ζώνη ή ένα όνομα σχετικό με αυτήν (www, _dmarc)· λειτουργεί επίσης ένα πλήρως προσδιορισμένο όνομα με τελεία στο τέλος.
  • Το type είναι A, AAAA, CNAME, MX, TXT, SRV, PTR ή REDIRECT (μια ανακατεύθυνση HTTP στο URL του value).
  • Το ttl είναι 5m, 15m, 30m, 1h ή 1d· χωρίς αυτό, μια εγγραφή παίρνει το ttl του αρχείου ή 1h. Το MX δέχεται priority (προεπιλογή 10), το SRV priority, weight και port, το REDIRECT save_path (προεπιλογή true).
  • Το ίδιο έγγραφο λειτουργεί και ως JSON. Το JSON Schema σάς παρέχει αυτόματη συμπλήρωση και ελέγχους στο VS Code και σε άλλους επεξεργαστές.

Πώς δημιουργείται ένα plan

Το αρχείο είναι ολόκληρη η ζώνη: μια εγγραφή που υπάρχει στη ζώνη αλλά όχι στο αρχείο διαγράφεται. Χρησιμοποιήστε το --keep-unlisted (prune=false στο API) για μόνο προσθήκες και αλλαγές.

Οι εγγραφές A, AAAA, MX και TXT αντιστοιχίζονται με βάση το όνομα και την τιμή (και την προτεραιότητα για τις MX), καθώς ένα όνομα μπορεί να έχει πολλές τέτοιες εγγραφές. Οι εγγραφές CNAME, SRV, PTR και REDIRECT αντιστοιχίζονται με βάση το όνομα. Ένα διαφορετικό ttl, ή διαφορετική προτεραιότητα, βάρος ή θύρα σε μια SRV, θεωρείται αλλαγή· οτιδήποτε άλλο θεωρείται προσθήκη ή διαγραφή.

Το apply εκτελείται σε μία συναλλαγή: πρώτα οι διαγραφές, μετά οι αλλαγές και μετά οι νέες εγγραφές, ώστε μια εγγραφή CNAME να μπορεί να αντικαταστήσει μια εγγραφή A στο ίδιο αρχείο. Αν μία εγγραφή απορριφθεί, δεν αλλάζει τίποτα. Αν κάποιος αλλάξει τη ζώνη μεταξύ plan και apply, το apply απορρίπτεται και πρέπει να κάνετε ξανά plan.

Οι εγγραφές που διατηρεί η NameOcean για δική της χρήση, η διεύθυνση πίσω από μια ανακατεύθυνση HTTP και τα ACME challenges για SSL, δεν εξάγονται, δεν περιλαμβάνονται σε plan και δεν διαγράφονται ποτέ.

GitHub Actions

Δημιουργήστε ένα κλειδί API με dns:write (ή μόνο dns:read για ένα job που κάνει μόνο plan) και αποθηκεύστε το ως 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 τερματίζει με κωδικό 2 όταν υπάρχουν αλλαγές, για jobs που πρέπει μόνο να αναφέρουν αποκλίσεις.

Με το REST API

GET /dns/{zone}/export?output=yamlΗ ζώνη ως αρχείο (JSON χωρίς output=yaml)· η κεφαλίδα X-Zone-Serial είναι ο σειριακός αριθμός της
POST /dns/{zone}/planΤι θα έκανε το apply· δεν αλλάζει τίποτα και απαιτεί μόνο dns:read
POST /dns/{zone}/apply?serial=NΠροσαρμογή της ζώνης ώστε να ταιριάζει με το αρχείο· 409 zone_changed αν δεν βρίσκεται πλέον στο serial του πλάνου
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

Στείλτε YAML με Content-Type: application/yaml ή το ίδιο έγγραφο ως JSON. Για αρχείο που ο διακομιστής δεν μπορεί να δεχτεί, η απάντηση είναι 400 invalid_zone_file με μια λίστα errors που αναφέρει κάθε εγγραφή και πεδίο. Όλα αυτά υπάρχουν στην τεκμηρίωση του API.

Από το AI σας

Μέσω MCP, ένας βοηθός μπορεί να εξαγάγει μια ζώνη, να σχεδιάσει μια αλλαγή σε πολλές εγγραφές ταυτόχρονα με το plan_dns_zone και, αφού σας δείξει το σχέδιο, να την εφαρμόσει με το apply_dns_zone.