در پایان این راهنما، فیلد quickcdn رکورد موردنظر را روی false می‌گذاریم. پاسخ عمومی DNS دوباره مقدار خود رکورد می‌شود و بازدیدکننده مستقیم به مقصد رکورد می‌رود.

خاموش کردن ابر در پنل از ستون وضعیت CDN است. در این راهنما همین کار را با API نسخه ۲.۱ و JSON Patch انجام می‌دهیم. دکمه ابر (quickcdn) چیست؟ را مطالعه می‌کنیم.

مرجع مسیرها: CDN and DNS (v2.1). ساخت توکن و WorkspaceUUID را در مدیریت دامنه خود را با API خودکار کنید دنبال می‌کنیم.


پیش‌نیازها


مراحل

  1. توکن و WorkspaceUUID را آماده می‌کنیم.
  2. فهرست Zoneها را دریافت می‌کنیم و Zone دامنه را از spec.origin پیدا می‌کنیم. مقدار metadata.name همان <NAME> است:
curl -sS -X GET \
  "https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones" \
  -H "Authorization: Bearer <TOKEN>"
  1. همان Zone را می‌خوانیم تا نام رکورد و ایندکس آن در آرایه مشخص شود:
curl -sS -X GET \
  "https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones/<NAME>" \
  -H "Authorization: Bearer <TOKEN>"

پارامتر <NAME>

<NAME> همان metadata.name آبجکت DomainZone است، نه لزوما نام دامنه.

در spec.records هر کلید یک نام رکورد است و مقدار آن آرایه‌ای از رکوردهاست. ایندکس از صفر شروع می‌شود و باید به همان عنصری اشاره کند که "quickcdn": true دارد. برای زیردامنه api که اولین رکورد آن ابر روشن دارد، مسیر /spec/records/api/0/quickcdn است.

نام رکوردمسیر JSON Patch
دامنه‌ی ریشه، @/spec/records/@/0/quickcdn
وایلدکارد (Wildcard)، */spec/records/*/0/quickcdn
یک برچسب، مثلا api/spec/records/api/0/quickcdn

اگر "quickcdn": true روی اولین عنصر آرایه نیست، 0 را با ایندکس همان عنصر جایگزین می‌کنیم.

  1. فیلد را با عملیات replace روی false می‌گذاریم. نمونه برای زیردامنه api:
curl -sS -X PATCH \
  "https://api.sotoon.ir/delivery/v2.1/global/workspaces/<workspaceUUID>/domainzones/<NAME>" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json-patch+json" \
  -d '[
    { "op": "replace", "path": "/spec/records/api/0/quickcdn", "value": false }
  ]'

برای دامنه‌ی ریشه، مسیر را /spec/records/@/0/quickcdn می‌گذاریم. api و ایندکس را با نام و جایگاه واقعی رکورد جایگزین می‌کنیم.

JSON Patch

Content-Type باید application/json-patch+json باشد. عملیات replace فقط مقدار فیلد quickcdn را عوض می‌کند؛ بقیه فیلدهای همان رکورد و بقیه نام‌ها در spec.records بدون تغییر می‌مانند. اگر نام رکورد نویسه / یا ~ داشته باشد، در مسیر JSON Pointer به‌ترتیب آن را به ~1 و ~0 تبدیل می‌کنیم.

مسیر باید وجود داشته باشد

replace فقط وقتی اعمال می‌شود که مسیر مشخص‌شده در آبجکت وجود داشته باشد. نام رکورد و ایندکس را از پاسخ GET پیدا می‌کنیم. اگر ابر از قبل خاموش باشد و فیلد quickcdn در پاسخ نباشد، replace روی این مسیر اعمال نمی‌شود.


بررسی صحت

  1. دوباره همان Zone را با GET می‌خوانیم. مقدار quickcdn رکورد موردنظر دیگر true نیست. اگر API مقدار false را در پاسخ نشان ندهد، نبودن فیلد quickcdn یعنی ابر خاموش است.
  2. کد پاسخ PATCH و GET نباید 401 / 403 باشد؛ در غیر این صورت توکن و نقش dns-editor را بررسی می‌کنیم. اگر 404 است، <NAME> را با metadata.name مقایسه می‌کنیم.
  3. دست‌کم 300 ثانیه صبر می‌کنیم. در مدتی که ابر روشن بوده، TTL پاسخ Anycast همین مقدار است و Resolver ممکن است پاسخ قبلی را در کش نگه دارد.
  4. با یکی از نام‌سرورهای ستون در spec.nameserversV4 رکورد را بررسی می‌کنیم:
dig @a.ns.sotoon53.com api.example.com A

نام‌سرور را با یکی از مقادیر nameserversV4 و نام دامنه را با رکورد واقعی جایگزین می‌کنیم. پاسخ باید مقدار خود رکورد باشد، نه آدرس Anycast وب‌سایت.


ادامه مسیر