داده هات
ورود

عملیات‌ها (Actions)

بیش‌تر تغییرات منابع در داده‌هات، مانند ساخت سرور، اتصال والیوم یا رزرو آی‌پی الستیک، زمان‌بر هستند و به‌شکل «عملیات» (Action) انجام می‌شوند. شما یک عملیات را آغاز می‌کنید، شناسه‌ی آن را دریافت می‌کنید و تا پایان کار، وضعیت و میزان پیشرفت آن را دنبال می‌کنید.

آغاز عملیات

برای آغاز یک عملیات، درخواست POST را به مسیر /actions ارسال کنید. بدنه‌ی درخواست شامل نام فرمان (command) و ورودی‌های آن (input) است:

bash
curl -X POST "https://api.dadehat.com/api/v1/actions" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"command": "vm.stop", "input": {"vm_id": "<VM_ID>"}}'

در صورت پذیرش درخواست، پاسخ با کد 201 و شیء عملیات برگردانده می‌شود:

json
{
  "action": {
    "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "command": "vm.stop",
    "status": "running",
    "progress": 0,
    "started": "2026-09-26T10:15:00Z",
    "finished": null,
    "resources": [{"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "project"}],
    "error": null
  }
}
یادداشت

توجه داشته باشید که آغاز عملیات فقط برای حساب‌هایی مجاز است که احراز هویت آن‌ها کامل شده باشد. در مورد توکن، وضعیت احراز هویت عضو سازنده‌ی توکن ملاک است.

شیء عملیات

هر عملیات شامل فیلدهای زیر است:

  • id: شناسه‌ی یکتای عملیات.
  • command: نام فرمانی که عملیات با آن آغاز شده است، مانند vm.create.
  • status: وضعیت عملیات؛ یکی از running (در حال اجرا)، success (موفق) یا error (ناموفق).
  • progress: میزان پیشرفت از ۰ تا ۱۰۰. عملیات در حال اجرا هیچ‌گاه ۱۰۰ گزارش نمی‌کند و عملیات پایان‌یافته همیشه ۱۰۰ است.
  • started و finished: زمان آغاز و پایان عملیات در قالب RFC 3339. برای عملیات در حال اجرا، finished برابر null است.
  • resources: منابع مرتبط با عملیات، به‌شکل فهرستی از id و type.
  • error: در صورت ناموفق بودن عملیات، شامل code و message. مقدار code برابر failed (عملیات ناموفق بوده است) یا compensated (تغییرات نیمه‌کاره بازگردانده شده‌اند) است.

مشاهده‌ی وضعیت عملیات

برای مشاهده‌ی وضعیت یک عملیات، از درخواست زیر استفاده کنید:

bash
curl -H "Authorization: Bearer <TOKEN>" \
  "https://api.dadehat.com/api/v1/actions/<ACTION_ID>"

برای مشاهده‌ی فهرست عملیات‌ها، درخواست GET /actions را ارسال کنید. این مسیر پارامترهای زیر را می‌پذیرد:

پارامترتوضیح
pageشماره‌ی صفحه.
per_pageتعداد نتایج هر صفحه؛ پیش‌فرض ۲۰ و حداکثر ۱۰۰.
commandفیلتر بر اساس نام فرمان، مانند volume.create.
statusفیلتر بر اساس وضعیت: running، success یا error.

پاسخ فهرست، علاوه بر actions، اطلاعات صفحه‌بندی را در meta.pagination شامل page، per_page، total_entries و last_page برمی‌گرداند.

لغو عملیات

برای لغو یک عملیات، درخواست POST /actions/<ACTION_ID>/cancel را ارسال کنید. با لغو عملیات در حال اجرا، تغییراتی که تا آن لحظه انجام شده‌اند بازگردانده می‌شوند. لغو یک عملیات ناموفق نیز منابع نیمه‌کاره‌ی آن را پاک‌سازی می‌کند.

عملیاتی که با موفقیت به پایان رسیده است قابل لغو نیست و درخواست لغو آن با کد 409 و مقدار action_not_cancellable پاسخ داده می‌شود.

پیگیری لحظه‌ای با WebSocket

به‌جای پرس‌وجوی دوره‌ای، می‌توانید به نشانی wss://api.dadehat.com/api/v1/ws متصل شوید و تغییرات عملیات را به‌شکل لحظه‌ای دریافت کنید. توکن را هنگام برقراری اتصال در سرآیند Authorization ارسال کنید.

پس از اتصال، برای هر عملیاتی که آغاز کرده‌اید، پیام اشتراک زیر را بفرستید. اتصال به‌شکل خودکار در عملیات‌های شما مشترک نمی‌شود و بدون این پیام، به‌روزرسانی‌ای دریافت نخواهید کرد:

json
{"type": "subscribe", "workflow_id": "<ACTION_ID>", "subscription_type": "workflow"}

از این پس، با هر تغییر، پیامی از نوع action_update دریافت می‌کنید که شیء عملیات در فیلد action آن قرار دارد:

json
{"type": "action_update", "timestamp": "2026-09-26T10:15:30Z", "action": {"id": "<ACTION_ID>", "command": "vm.stop", "status": "success", "progress": 100}}

در پیام پایانی عملیات ناموفق، علت خطا در action.error.message آمده است. برای جزئیات کامل‌تر، مانند فهرست منابع، شیء عملیات را با درخواست GET دریافت کنید. برای لغو اشتراک پیام unsubscribe و برای بررسی سلامت اتصال پیام ping را بفرستید.

فرمان‌های قابل استفاده

جدول‌های زیر فرمان‌هایی را نشان می‌دهند که می‌توانید با POST /actions آغاز کنید. در ستون ورودی‌ها، فیلدهای الزامی آمده است. شناسه‌های لازم را می‌توانید از اندپوینت‌های خواندنی در مرجع اندپوینت‌ها به دست آورید.

سرور

فرمانورودی‌های الزامیتوضیح
vm.createنمونه‌ی کامل در ادامهساخت سرور
vm.startvm_idروشن کردن سرور
vm.stopvm_idخاموش کردن سرور
vm.resizevm_id و دست‌کم یکی از cpu_cores یا memory_mbتغییر منابع سرور؛ سرور باید خاموش باشد.
vm.migratevm_idمهاجرت سرور
vm.deletevm_idحذف سرور
vm.sg.attachvm_id، sg_idاتصال گروه امنیتی به سرور
vm.sg.detachvm_idجدا کردن گروه امنیتی از سرور

کانتینر

فرمانورودی‌های الزامیتوضیح
container.deployورودی‌ها مطابق مرجع اندپوینت‌ها؛ از جمله container_plan_idساخت کانتینر
container.updatecontainer_idتغییر پیکربندی یا ایمیج کانتینر
container.scalecontainer_idتغییر تعداد نمونه‌ها
container.restartcontainer_idراه‌اندازی مجدد کانتینر
container.deletecontainer_idحذف کانتینر
container.sg.attachcontainer_id، sg_idاتصال گروه امنیتی به کانتینر
container.sg.detachcontainer_idجدا کردن گروه امنیتی از کانتینر

والیوم و اسنپ‌شات

فرمانورودی‌های الزامیتوضیح
volume.createproject_id، tenant_id، region، size_gi و volume_mode (اختیاری: block یا filesystem)ساخت والیوم
volume.attachvolume_id، target_kind (vm یا container)، target_id و برای کانتینر mount_pathاتصال والیوم
volume.detachvolume_idقطع اتصال والیوم
volume.deletevolume_idحذف والیوم
volume.snapshot.createvolume_id، project_idگرفتن اسنپ‌شات
volume.snapshot.deletesnapshot_id، project_idحذف اسنپ‌شات
volume.snapshot.restoresnapshot_id، project_idبازیابی اسنپ‌شات
volume.snapshot.restore.vmsnapshot_id، project_idبازیابی اسنپ‌شات روی دیسک سرور
volume.snapshot.restore.containersnapshot_id، project_idبازیابی اسنپ‌شات روی والیوم کانتینر
volume.snapshot.restore.unattachedsnapshot_id، project_idبازیابی اسنپ‌شات به‌عنوان والیوم جدید

شبکه

فرمانورودی‌های الزامیتوضیح
network.subnet.createvpc_id، cidrساخت ساب‌نت
network.subnet.updatesubnet_idویرایش ساب‌نت، مانند سرورهای DNS
network.subnet.deletesubnet_idحذف ساب‌نت
network.vpc.deletevpc_idحذف ابر خصوصی
internet-gateway.createvpc_idفعال‌سازی اینترنت گیت‌وی
internet-gateway.deleteورودی‌ها مطابق مرجع اندپوینت‌هاغیرفعال‌سازی اینترنت گیت‌وی
public-ip.reserveproject_idرزرو آی‌پی الستیک
public-ip.attachelastic_ip_id، workload_uuid، workload_kind (vm، container یا loadbalancer)اتصال آی‌پی الستیک
public-ip.detachelastic_ip_idقطع اتصال آی‌پی الستیک
public-ip.releaseelastic_ip_idآزادسازی آی‌پی الستیک
loadbalancer.createورودی‌ها مطابق مرجع اندپوینت‌هاساخت توزیع‌کننده‌ی بار
loadbalancer.backends.setload_balancer_id، project_idتعیین مقصدهای توزیع‌کننده‌ی بار
loadbalancer.deleteload_balancer_id، project_idحذف توزیع‌کننده‌ی بار

بیلد و بازارچه

فرمانورودی‌های الزامیتوضیح
build.triggerrule_id، project_idاجرای دستی بیلد بر اساس یک قانون بیلد
app.deployورودی‌ها مطابق مرجع اندپوینت‌هانصب اپلیکیشن از بازارچه
app.deleteapp_idحذف اپلیکیشن

نمونه‌ی ساخت سرور

برای ساخت سرور، مقادیر لازم را از اندپوینت‌های زیر به دست آورید:

  • tenant_id از پاسخ GET /projects/<PROJECT_ID>
  • vpc_id و subnet_id از GET /vpcs و GET /vpcs/<VPC_ID>/subnets؛ مقدار subnet_cr_name در پاسخ GET /subnets/<SUBNET_ID> آمده است.
  • base_image_uuid از GET /vms/base-images
  • vm_type_id از GET /vms/types
  • شناسه‌ی کلیدهای SSH از GET /ssh-keys و شناسه‌ی گروه امنیتی از GET /security-groups

سپس عملیات را به‌شکل زیر آغاز کنید:

bash
curl -X POST "https://api.dadehat.com/api/v1/actions" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "command": "vm.create",
    "input": {
      "project_id": "<PROJECT_ID>",
      "tenant_id": "<TENANT_ID>",
      "vpc_id": "<VPC_ID>",
      "subnet_id": "<SUBNET_ID>",
      "subnet_cr_name": "<SUBNET_CR_NAME>",
      "name": "web-01",
      "base_image_uuid": "<BASE_IMAGE_ID>",
      "vm_type_id": "<VM_TYPE_ID>",
      "ssh_key_ids": ["<SSH_KEY_ID>"],
      "security_group_id": "<SECURITY_GROUP_ID>"
    }
  }'

فیلدهای ssh_key_ids و security_group_id اختیاری هستند. سرور بدون گروه امنیتی، بدون فایروال ساخته می‌شود. منابع پردازشی، حافظه و دیسک سرور از پلن انتخاب‌شده (vm_type_id) تعیین می‌شوند. برای آشنایی با جزئیات ساخت سرور، راهنمای ساخت سرور را ببینید.

خطاهای رایج

وضعیتکدعلت
400invalid_inputنام فرمان ناشناخته است یا یکی از ورودی‌های الزامی ارسال نشده است. متن خطا نام فیلد را مشخص می‌کند.
403insufficient-scopeتوکن دسترسی write لازم برای این منبع را ندارد.
403kyc_not_verifiedاحراز هویت حساب کامل نیست.
404not_foundعملیات یا منبع وجود ندارد یا متعلق به پروژه‌ی دیگری است.
409action_not_cancellableعملیات در وضعیتی است که قابل لغو نیست.