Dasturchilar → Kod sifatida DNS
Zonangizni kodingiz yonida bitta YAML yoki JSON faylda saqlang. DNS o‘zgarishlarini pull request’larda ko‘rib chiqing, nima o‘zgarishini oldindan aniq ko‘ring va uni bir qadamda qo‘llang.
$ 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 zonaning o‘zi uchun @ yoki unga nisbatan nom (www, _dmarc); oxirida nuqtasi bo‘lgan to‘liq nom ham ishlaydi.ttl — 5m, 15m, 30m, 1h yoki 1d; u ko‘rsatilmasa, yozuv faylning ttl qiymatini yoki 1h oladi. MX priority (standart 10), SRV priority, weight va port, REDIRECT esa save_path (standart true) qabul qiladi.Fayl butun zonani ifodalaydi: zonada bor, lekin faylda yo‘q yozuv o‘chiriladi. Faqat qo‘shish va o‘zgartirish uchun --keep-unlisted (API’da prune=false) parametrini bering.
A, AAAA, MX va TXT yozuvlari nom va qiymat bo‘yicha (MX uchun esa ustuvorlik bo‘yicha ham) moslashtiriladi, chunki bitta nomda ulardan bir nechtasi bo‘lishi mumkin. CNAME, SRV, PTR va REDIRECT yozuvlari nom bo‘yicha moslashtiriladi. Boshqa ttl yoki SRV ustuvorligi, og‘irligi yoki porti o‘zgarish hisoblanadi; qolgan barcha holatlar qo‘shish yoki o‘chirish hisoblanadi.
Apply bitta tranzaksiyada bajariladi: avval o‘chirishlar, keyin o‘zgarishlar, so‘ng yangi yozuvlar — shu sababli bitta faylda CNAME A yozuvining o‘rnini egallashi mumkin. Agar bitta yozuv rad etilsa, hech narsa o‘zgarmaydi. Agar reja va apply oralig‘ida kimdir zonani o‘zgartirsa, apply rad etiladi va siz qayta reja tuzasiz.
NameOcean o‘zi uchun saqlaydigan yozuvlar — HTTP yo‘naltirish ortidagi manzil va SSL uchun ACME challenge’lari — hech qachon eksport qilinmaydi, rejaga kiritilmaydi va o‘chirilmaydi.
dns:write (yoki faqat reja tuzadigan job uchun dns:read) huquqiga ega API kaliti yarating va uni NAMEOCEAN_API_KEY secret sifatida saqlang.
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 o‘zgarishlar bo‘lganda 2 kodi bilan tugaydi — faqat drift haqida xabar berishi kerak bo‘lgan job’lar uchun.
| GET /dns/{zone}/export?output=yaml | Zona fayl ko‘rinishida (output=yaml bo‘lmasa JSON); X-Zone-Serial sarlavhasi uning serial raqami |
| POST /dns/{zone}/plan | Apply nima qilishi; hech narsani o‘zgartirmaydi va faqat dns:read talab qiladi |
| POST /dns/{zone}/apply?serial=N | Zonani faylga moslashtiradi; agar zona endi rejadagi seriya raqamida bo‘lmasa, 409 zone_changed qaytariladi |
$ 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’ni Content-Type: application/yaml bilan yoki xuddi shu hujjatni JSON ko‘rinishida yuboring. Server qabul qila olmaydigan fayl uchun 400 invalid_zone_file javobi qaytariladi, unda har bir yozuv va maydon ko‘rsatilgan errors ro‘yxati bo‘ladi. Barcha tafsilotlar API qo‘llanmasida.
MCP orqali assistent zonani eksport qilishi, plan_dns_zone yordamida bir vaqtning o‘zida ko‘plab yozuvlarga o‘zgartirish rejalashtirishi va sizga rejani ko‘rsatgandan so‘ng uni apply_dns_zone bilan qo‘llashi mumkin.