از انتخاب زیرساخت تا حذف امن VM
با API گزینههای معتبر را کشف کنید، ماشین مجازی بسازید، وضعیت آمادهسازی و اطلاعات اتصال را بخوانید و حذف را با تایید نام انجام دهید.
YOUR_PROJECT_UUID را از آدرس یا صفحه جزئیات همان پروژه در پنل مشتری بردارید؛ نام پروژه یا UUID مشتری قابل استفاده نیست.Workflow کامل
کلید با abilities لازم
options را بخوانید
VM را بسازید
detail را poll کنید
با نام دقیق حذف کنید
ساخت و حذف asynchronous هستند. بعد از ساخت، VM با provisioning_status: pending برمیگردد و باید endpoint جزئیات را poll کنید.
احراز هویت و abilities
در همه درخواستها هدر Authorization: Bearer YOUR_API_KEY و Accept: application/json را بفرستید. کلید را از پروفایل مشتری بسازید.
vm:readoptions، list و detail
vm:createساخت VM
vm:deleteحذف VM
/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های مشتری یا پروژه دیگر قابل مشاهده نیستند.
/projects/{project_uuid}/virtual-machines
vm:read
لیست VMها
پارامترهای اختیاری: search، status و per_page. VMهای deleted به صورت پیشفرض حذف میشوند.
/projects/{project_uuid}/virtual-machines/{virtual_machine_uuid}
vm:read
جزئیات VM
رمز عبور در list و detail هرگز برنمیگردد. IP، username و SSH command فقط در صورت آماده بودن اتصال ارائه میشود.
/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"}'/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های کیف پول همچنان در دسترس هستند:
نکات امنیتی
کلید را در Git، log یا browser نگذارید؛ برای هر سرویس کلید جدا بسازید و در صورت افشا revoke کنید. قابلیتهای اضافی را به کلید ندهید و password اولیه را فقط در secret manager ذخیره کنید.