实践场景
本文将详细介绍如何使用HTTP方式调用API创建VMDK镜像。
前提条件
镜像服务运行正常。
操作步骤
以curl作为客户端为例,请求方式如下所示:
- 创建镜像元数据
其中:curl -g -i -X POST http://glance.openstack.svc.cluster.local:80/v2/images -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"container_format": "bare", "disk_format": "vmdk", "name": "test", "es_virtio_enabled": "yes"}'
$token
即代表上一步获取到的Token ID,可参照签名机制中的描述获取用户Token。es_virtio_enabled
表示是否需要自动注入VirtIO驱动。
返回结果:
{
"es_virtio_enabled": "yes",
"name": "test",
"disk_format": "vmdk",
"container_format": "bare",
"visibility": "shared",
"size": null,
"virtual_size": null,
"status": "queued",
"checksum": null,
"protected": false,
"min_ram": 0,
"min_disk": 0,
"owner": "a5bf2f5c3d0c4f0ebcb1310b7a576c22",
"os_hidden": false,
"os_hash_algo": null,
"os_hash_value": null,
"id": "62bc000b-90f8-4f23-973a-a7695c331671",
"created_at": "2025-04-30T02:52:16Z",
"updated_at": "2025-04-30T02:52:16Z",
"locations": [],
"tags": [],
"self": "/v2/images/62bc000b-90f8-4f23-973a-a7695c331671",
"file": "/v2/images/62bc000b-90f8-4f23-973a-a7695c331671/file",
"schema": "/v2/schemas/image"
}
- 上传镜像文件
curl -i -X PUT http://glance.openstack.svc.cluster.local:80/v2/images/62bc000b-90f8-4f23-973a-a7695c331671/stage -H "X-Auth-Token: $token" -H "Content-Type: application/octet-stream" -d @/opt/test.vmdk
其中:
$token
即代表上一步获取到的Token ID,可参照签名机制中的描述获取用户Token。- 请求中的ID是上一步创建镜像元数据返回的镜像ID。
- 请求body中
@
跟上镜像文件的本地路径。
返回结果:
无。
- 导入
curl -g -i -X POST http://glance.openstack.svc.cluster.local:80/v2/images/62bc000b-90f8-4f23-973a-a7695c331671/import -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"method": {"name": "glance-direct"}}'
其中:
$token
即代表上一步获取到的Token ID,可参照签名机制中的描述获取用户Token。- 请求中的ID是上一步创建镜像元数据返回的镜像ID。
返回结果:
无。
- 跟踪镜像状态
curl -g -i -X GET http://glance.openstack.svc.cluster.local:80/v2/images/62bc000b-90f8-4f23-973a-a7695c331671 -H "Content-Type: application/octet-stream" -H "X-Auth-Token: $token"
其中:
$token
即代表上一步获取到的Token ID,可参照签名机制中的描述获取用户Token。- 请求中的ID是上一步创建镜像元数据返回的镜像ID。
等待一段时间后,若镜像状态为active
,表示镜像上传成功,若长时间卡在importing
状态,并且os_glance_es_failed_reason
字段的值为virtio error
,表示自动注入VirtIO失败。