Tạo VM
/v2.1/serversĐể tạo một máy ảo (VM) mới, bạn gửi request POST tới endpoint /v2.1/servers của compute service. Request này cần token xác thực, bạn đưa token vào header của request.
Bạn nên thêm X-OpenStack-Nova-API-Version: 2.67 vào header của request để đảm bảo tương thích với phiên bản API.
Nguồn: create-server
Request
Tham số body
serverobjectbắt buộcObject server.
flavorRefstringbắt buộcTham chiếu flavor (ID/UUID hoặc URL đầy đủ).
namestringbắt buộcTên server.
networksarraybắt buộcKết nối network. Bắt buộc khi có nhiều network. Từ 2.37, hỗ trợ giá trị chuỗi "auto" hoặc "none" (không phải list) và không thể kết hợp với các giá trị network khác. Tag interface được chấp nhận trong 2.32–2.36 và từ 2.42.
8 trường
uuidstringbodyUUID của network cho NIC. Bắt buộc nếu bỏ trống port. Áp dụng định dạng UUID từ 2.37.
portstringbodyID của port hiện có (phải ở trạng thái DOWN). Bắt buộc nếu bỏ trống uuid. Security group được yêu cầu không áp dụng cho port đã tồn tại.
fixed_ipsarraybodyCác fixed IP. Nếu chỉ định IP, cần có thêm network uuid/net_id.
ip_addressstringbodyĐịa chỉ fixed IP.
ip_versionintegerbodyPhiên bản IP 4 hoặc 6. Mặc định 4.
port_security_enabledbooleanbắt buộcbodyGiá trị port_security_enabled mặc định cho port được tạo. Mới trong 2.42.
security_groupsarraybắt buộcbodyID security group cho port. Mới trong 2.67.
tagstringbodyTag vai trò thiết bị, hiển thị qua metadata/config drive. Được chấp nhận trong 2.32–2.36 và từ 2.42.
accessIPv4stringĐịa chỉ IPv4 dùng để truy cập server.
accessIPv6stringĐịa chỉ IPv6 dùng để truy cập server.
adminPassstringMật khẩu admin; được tạo tự động nếu bỏ trống.
block_device_mapping_v2arrayÁnh xạ block device nâng cao (boot từ volume, v.v.). Tag được chấp nhận trong 2.32 và từ 2.42.
13 trường
boot_indexintegerbắt buộcbodyThứ tự boot; 0 boot đầu tiên; giá trị âm hoặc None sẽ tắt.
delete_on_terminationbooleanbodyXoá volume khi xoá server. Mặc định false.
destination_typestringbodyVị trí thiết bị: local hoặc volume.
device_namestringbodyĐường dẫn thiết bị; bị libvirt bỏ qua từ 12.0.0.
device_typestringbodyKiểu thiết bị (ví dụ disk, cdrom).
disk_busstringbodyKiểu bus (ví dụ ide, scsi, virtio).
guest_formatstringbodyFilesystem (ví dụ ext4, xfs, swap). Swap có một số ràng buộc riêng.
no_devicebooleanbodyĐánh dấu là không có thiết bị nếu true.
source_typestringbodyNguồn: blank, image, snapshot hoặc volume. Bắt buộc trừ khi no_device là true.
uuidstringbodyUUID tài nguyên nguồn (image/snapshot/volume).
volume_sizeintegerbodyKích thước volume (GiB). Bắt buộc với image→volume và blank→volume.
tagstringbodyTag vai trò block device; được chấp nhận trong 2.32 và từ 2.42.
volume_typestringbodyID hoặc tên volume type; chỉ dùng với nguồn blank/image/snapshot và đích volume. Mới trong 2.67.
config_drivebooleanBật config drive để inject metadata.
imageRefstringUUID của image. Bắt buộc trừ khi boot từ volume.
key_namestringTên key pair.
metadataobjectCặp key/value metadata (tối đa 255 byte mỗi giá trị).
OS-DCF:diskConfigstringCách phân vùng disk: AUTO hoặc MANUAL. Không thể ép image MANUAL sang AUTO.
2 giá trị
AUTOTạo server với một phân vùng duy nhất bằng kích thước disk của flavor đích, và mở rộng filesystem để lấp đầy.MANUALDùng sơ đồ phân vùng và filesystem của image nguồn. Dung lượng dư vẫn chưa được phân vùng.
personalityarrayInject file văn bản khi khởi tạo. Chỉ dùng đến 2.56.
user_datastringUser data mã hoá Base64 (< 65535 byte).
descriptionstringMô tả tự do (< 255 ký tự). Mới trong 2.19.
tagsarrayTối đa 50 tag; mỗi tag không rỗng, < 60 ký tự; không cho phép '/' và ','. Mới trong 2.52.
trusted_image_certificatesarrayTối đa 50 ID chứng chỉ để xác minh chữ ký image; không dùng cho server boot từ volume. Mới trong 2.63.
hoststringTên compute host đích; thường chỉ admin dùng được. Mới trong 2.74.
hypervisor_hostnamestringHostname hypervisor đích; thường chỉ admin dùng được. Mới trong 2.74.
os:scheduler_hintsobjectScheduler hint cấp cao nhất; khả năng hỗ trợ tuỳ từng cloud.
8 trường
build_near_host_ipstringbodyƯu tiên host gần IP này (kèm cidr). Cần SimpleCIDRAffinityFilter.
cidrstringbodyCIDR cho build_near_host_ip; mặc định /24 nếu bỏ trống.
different_cellarraybodyLên lịch tránh các cell được liệt kê (tên/route). Môi trường Cell v1.
different_hostarraybodyƯu tiên host khác với các UUID server đã cho.
groupstringbodyUUID server group; áp dụng policy nhóm (affinity/anti-affinity).
querystringbodyBiểu thức JsonFilter.
same_hostarraybodyƯu tiên cùng host với các UUID server đã cho.
target_cellstringbodyTên cell đích. Môi trường Cell v1.
- cURL
- HTTP
curl -ks -H 'Content-Type: application/json' -H 'X-Auth-Token: gAAAAA<...>' -H 'X-OpenStack-Nova-API-Version: 2.67' \
-d '{
"server": {
"name": "Ubuntu24",
"imageRef": "b4d9c688-1b96-4604-8cf1-d78c5c80a984",
"block_device_mapping_v2": [
{
"boot_index": "0",
"uuid": "b4d9c688-1b96-4604-8cf1-d78c5c80a984",
"source_type": "image",
"volume_size": "10",
"destination_type": "volume",
"volume_type": "nvmer3",
"delete_on_termination": true
}
],
"OS-DCF:diskConfig": "AUTO",
"flavorRef": "468c0c15-08bd-4e1d-8564-5053ce12966b",
"networks": [
{
"uuid": "8ae2b710-ad3d-469e-a75a-c3e203887d2e"
}
],
"key_name": "Docs Writter"
}
}' https://api.vietnix.cloud:8774/v2.1/servers
POST https://api.vietnix.cloud:8774/v2.1/servers
Content-Type: application/json
X-Auth-Token: gAAAAA<...>
X-OpenStack-Nova-API-Version: 2.67
{
"server": {
"name": "Ubuntu24",
"imageRef": "b4d9c688-1b96-4604-8cf1-d78c5c80a984",
"block_device_mapping_v2": [
{
"boot_index": "0",
"uuid": "b4d9c688-1b96-4604-8cf1-d78c5c80a984",
"source_type": "image",
"volume_size": "10",
"destination_type": "volume",
"volume_type": "nvmer3",
"delete_on_termination": true
}
],
"OS-DCF:diskConfig": "AUTO",
"flavorRef": "468c0c15-08bd-4e1d-8564-5053ce12966b",
"networks": [
{
"uuid": "8ae2b710-ad3d-469e-a75a-c3e203887d2e"
}
],
"key_name": "Docs Writter"
}
}
Response
Tham số
Locationstringbắt buộcheaderURL vị trí của server đã tạo. Được trả về trong header Location của response.
serverobjectbắt buộcbodyObject server.
idstringbắt buộcbodyUUID của server.
linksarraybắt buộcbodyMảng link tới các tài nguyên liên quan.
adminPassstringbắt buộcbodyMật khẩu quản trị của server. Tuỳ chọn; chỉ trả về khi enable_instance_password là True.
security_groupsarraybắt buộcbodyMột hoặc nhiều object security group.
1 trường
namestringbắt buộcbodyTên security group.
OS-DCFstringbắt buộcbodyCấu hình disk. Một trong: AUTO (một phân vùng theo kích thước disk của flavor), MANUAL (dùng bố cục của image nguồn; dung lượng dư vẫn chưa được phân vùng).
Mã trạng thái
Thành công
| Mã | Mô tả |
|---|---|
| 200 - OK | Request thành công. |
| 202 - Accepted | Request đã được chấp nhận để xử lý nhưng chưa hoàn tất. Response có header Location chứa link để theo dõi tiến trình của request. |
Lỗi
| Mã | Mô tả |
|---|---|
| 400 - Bad Request | Một số nội dung trong request không hợp lệ. |
| 401 - Unauthorized | User phải xác thực trước khi gửi request. |
| 403 - Forbidden | Policy không cho phép user hiện tại thực hiện thao tác này. |
| 404 - Not Found | Không tìm thấy tài nguyên được yêu cầu. |
| 409 - Conflict | Thao tác xung đột với một thao tác khác trên tài nguyên này. |
Response mẫu
Response body
{
"server": {
"id": "70748c08-0f81-4e73-b2f1-7568e5339faa",
"links": [
{
"rel": "self",
"href": "https://api.vietnix.cloud:8774/v2.1/servers/70748c08-0f81-4e73-b2f1-7568e5339faa"
},
{
"rel": "bookmark",
"href": "https://api.vietnix.cloud:8774/servers/70748c08-0f81-4e73-b2f1-7568e5339faa"
}
],
"OS-DCF:diskConfig": "AUTO",
"security_groups": [
{
"name": "default"
}
],
"adminPass": "z344qQ3xajM4"
}
}