Προγραμματιστές → DNS ως κώδικας
Διατηρήστε τη ζώνη σας σε ένα αρχείο YAML ή JSON δίπλα στον κώδικά σας. Ελέγξτε τις αλλαγές DNS σε pull requests, δείτε ακριβώς τι θα αλλάξει πριν αλλάξει και εφαρμόστε το σε ένα βήμα.
$ 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 είναι @ για την ίδια τη ζώνη ή ένα όνομα σχετικό με αυτήν (www, _dmarc)· λειτουργεί επίσης ένα πλήρως προσδιορισμένο όνομα με τελεία στο τέλος.ttl είναι 5m, 15m, 30m, 1h ή 1d· χωρίς αυτό, μια εγγραφή παίρνει το ttl του αρχείου ή 1h. Το MX δέχεται priority (προεπιλογή 10), το SRV priority, weight και port, το REDIRECT save_path (προεπιλογή true).Το αρχείο είναι ολόκληρη η ζώνη: μια εγγραφή που υπάρχει στη ζώνη αλλά όχι στο αρχείο διαγράφεται. Χρησιμοποιήστε το --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 και δεν διαγράφονται ποτέ.
Δημιουργήστε ένα κλειδί API με dns:write (ή μόνο dns:read για ένα job που κάνει μόνο plan) και αποθηκεύστε το ως 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 τερματίζει με κωδικό 2 όταν υπάρχουν αλλαγές, για jobs που πρέπει μόνο να αναφέρουν αποκλίσεις.
| 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 -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.
Μέσω MCP, ένας βοηθός μπορεί να εξαγάγει μια ζώνη, να σχεδιάσει μια αλλαγή σε πολλές εγγραφές ταυτόχρονα με το plan_dns_zone και, αφού σας δείξει το σχέδιο, να την εφαρμόσει με το apply_dns_zone.