blob: ae66c3457413826a312b1422e9646f476a5f2cc9 [file] [log] [blame]
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright (c) 2017-2018 VMware, Inc.
=================
Image Service
=================
Because Multicloud provides a cloud mediation layer supporting multiple clouds.
It's necessary to
introduces some function enhancements in it. Image Service could let user
upload/download images
in a convinient way just by using Multicloud.
Problem Description
===================
The original functions which Multicloud possesses are to use urls to upload
images, while in this
spec we intend to upload images as raw file which means it has to store a copy
in Multicloud then
upload the images to the backend openstack. So this spec is to extend
multicloud to support
download/upload images as raw file rather than a through a url
Use Cases
===================
One typical use case is to allow users to upload/download images by Multicloud
Proposed change
===================
The proposed change mainly means introducing glance python APIs to enable
multicloud support openstack image service. This feature needs two changes:
Upload API to import an image to backend OpenStack and the image that just
imported can be queried from MultiCloud. Download API to download an image
from backend Openstack and the image can be downloaded from MultiCloud.
The eventual work flow looks like as follows:::
user request to upload image
|
V
+------------------+
| |
| image file(iso, |
| vmdk... ) |
| |
+---------+--------+
|
|
|
+-----------|----------+
| multicloud| |
| V |
| +------------------+ |
| | image service API| |
| +---------+--------+ |
+-----------|----------+
| glance
|
V
+----------------------+
| openstack |
+----------------------+
The APIs look like this:
upload:
Input of /{vimid}/{tenantid}/images/file will be
::
required: image file
{
"imageType": string, // image type: ami, ari, aki, vhd, vhdx, vmdk, raw, qcow2, vdi, iso
"containerFormat": string, // image container format: ami, ari, aki, bare, ovf, ova, docker
"visibility": string, // public, private, shared, or community
"properties": arrary // list of properties
}
Output of upload_image will be
::
"responses": {
"201": {
"description": "upload successfully",
},
"404": {
"description": "the vim id or tenant UUID is wrong"
},
"500": {
"description": "the vim image is not accessable"
}
download:
Input of /{vimid}/{tenantid}/images/file/{imageid} will be
::
{
"imagepath": string, // the path of the downloaded image
"properties": arrary // list of properties
}
Output of download_image will be
::
"responses": {
"200": {
"description": "download successfully",
},
"404": {
"description": "the vim id or tenant UUID is wrong"
},
"500": {
"description": "the vim image is not accessable"
}