AVIATO API · V1

از انتخاب زیرساخت تا حذف امن VM

با API گزینه‌های معتبر را کشف کنید، ماشین مجازی بسازید، وضعیت آماده‌سازی و اطلاعات اتصال را بخوانید و حذف را با تایید نام انجام دهید.

UUID واقعی پروژه: مقدار YOUR_PROJECT_UUID را از آدرس یا صفحه جزئیات همان پروژه در پنل مشتری بردارید؛ نام پروژه یا UUID مشتری قابل استفاده نیست.

Workflow کامل

1

کلید با abilities لازم

2

options را بخوانید

3

VM را بسازید

4

detail را poll کنید

5

با نام دقیق حذف کنید

ساخت و حذف asynchronous هستند. بعد از ساخت، VM با provisioning_status: pending برمی‌گردد و باید endpoint جزئیات را poll کنید.

احراز هویت و abilities

در همه درخواست‌ها هدر Authorization: Bearer YOUR_API_KEY و Accept: application/json را بفرستید. کلید را از پروفایل مشتری بسازید.

vm:read

options، list و detail

vm:create

ساخت VM

vm:delete

حذف VM

GET /projects/{project_uuid}/virtual-machines/options vm:read

ابتدا این endpoint را بخوانید. فقط locationهای فعال و غیرتعمیراتی، imageهای فعال، خانواده و نسخه OS، mapping سازگاری، bundleهای فعال، قیمت، ظرفیت IP، wallet و quota را برمی‌گرداند. credential، secret، provider_metadata و script داخلی هرگز برگردانده نمی‌شوند.

curl -X GET "https://my.aviato.ir/api/v1/projects/YOUR_PROJECT_UUID/virtual-machines/options" \
  -H "Authorization: Bearer YOUR_API_KEY"

پروژه و project UUID

هر مسیر VM با /projects/{project_uuid} محدود می‌شود. عضویت پروژه و دسترسی customer portal همزمان بررسی می‌شود؛ VMهای مشتری یا پروژه دیگر قابل مشاهده نیستند.

GET /projects/{project_uuid}/virtual-machines vm:read

لیست VMها

پارامترهای اختیاری: search، status و per_page. VMهای deleted به صورت پیش‌فرض حذف می‌شوند.

GET /projects/{project_uuid}/virtual-machines/{virtual_machine_uuid} vm:read

جزئیات VM

رمز عبور در list و detail هرگز برنمی‌گردد. IP، username و SSH command فقط در صورت آماده بودن اتصال ارائه می‌شود.

DELETE /projects/{project_uuid}/virtual-machines/{virtual_machine_uuid} vm:delete

حذف امن VM

بدنه درخواست باید شامل confirmation برابر display_name دقیق باشد. حذف queue می‌شود و status فورا deleting می‌شود؛ درخواست تکراری idempotent است.

curl -X DELETE "https://my.aviato.ir/api/v1/projects/YOUR_PROJECT_UUID/virtual-machines/VM_UUID" \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"confirmation":"My Production Server"}'
POST /projects/{project_uuid}/virtual-machines vm:create

cloud_image_id و location و bundle را فقط از options انتخاب کنید. با bundle، ابعاد از bundle می‌آید؛ بدون bundle، هر سه cpu_cores، ram_gb و disk_gb لازم است. password تولیدشده فقط یک‌بار در generated_login_password پاسخ create می‌آید.

curl -X POST "https://my.aviato.ir/api/v1/projects/YOUR_PROJECT_UUID/virtual-machines" \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"infrastructure_location_id":12,"cloud_image_id":4,"vm_bundle_id":2,"display_name":"My Production Server","login_username":"ubuntu","ssh_public_key":"ssh-ed25519 ..."}'

وضعیت‌ها و polling

pending یعنی آماده‌سازی در صف است، ready یعنی اتصال آماده، failed یعنی خطای آماده‌سازی، deleting یعنی حذف در صف و deleted یعنی حذف نهایی. پس از create هر چند ثانیه detail را بخوانید؛ پس از delete نیز تا پایان عملیات همین کار را انجام دهید.

Credentials و SSH

رمز ورودی تولیدشده فقط در پاسخ create است. آن را ذخیره امن کنید؛ API مسیر بازیابی password ندارد. وقتی ssh_ready برابر true شد، از ssh_command استفاده کنید.

فیلدهای درخواست

فیلدها: infrastructure_location_id، cloud_image_id، vm_bundle_id، display_name، login_username، login_password، ssh_public_key، requires_invoice و ابعاد cpu_cores/ram_gb/disk_gb در حالت بدون bundle. image/location و image/bundle باید سازگار باشند و quota، wallet و ظرفیت IP نیز بررسی می‌شوند.

خطاها

401 توکن نامعتبر، 403 ability یا دسترسی پروژه، 404 VM خارج از scope، 409 عملیات ناسازگار، 422 validation، quota، wallet یا compatibility و 429 محدودیت درخواست است. برای پشتیبانی meta.request_id را ارسال کنید.

{ "error": { "code": "validation_error", "fields": {} }, "meta": { "request_id": "REQUEST_ID" } }

Wallet endpoints

برای سازگاری با API قبلی، endpointهای کیف پول همچنان در دسترس هستند:

/projects/{project_uuid}/wallet/projects/{project_uuid}/wallet/transactions/projects/{project_uuid}/wallet/transactions/{transaction}
Get remaining balanceList transactionsGet one transaction

نکات امنیتی

کلید را در Git، log یا browser نگذارید؛ برای هر سرویس کلید جدا بسازید و در صورت افشا revoke کنید. قابلیت‌های اضافی را به کلید ندهید و password اولیه را فقط در secret manager ذخیره کنید.