Glance API Specification
Glance <=> Nova Integration requires these components:
- Glance - VM Image Management Service
- Parallax - Image Registry service
- Teller - Image Delivery service
- Client Classes
glance.client.GlanceClient - A client used in Nova to query Glance about images
glance.client.ParallaxClient - A client tool for querying Parallax about available images
glance.client.TellerClient - A client tool for the chunked retrieval of an image
Parallax API Commands
This section describes the Parallax REST API for creating, listing, modifying, and deleting image metadata.
Fetch id/name basic information on all public images
GET http://parallax.openstack.org/images
Returns a mapping containing a list of mappings containing details information about the public images encoded in JSON:
{
"images":
[
{"id": 1, "name": "My Image 1"},
{"id": 2, "name": "My Image 2"},
]
}
Fetch detailed information on all public images
GET http://parallax.openstack.org/images/detail
Returns a mapping containing a list of mappings containing details information about the public images encoded in JSON:
{
"images":
[
{
"id": 1,
"name": "My Image",
"status": "available",
"image_type": "kernel"
"is_public": true,
"properties": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
]
}
Notes
The properties element is a mapping of custom key/value pairs the image may have saved with it.
The files element is a list of mappings containing the chunks comprising an image along with the chunk's size
Fetch a single image's metadata
GET http://parallax.openstack.org/images/<ID>
Returns the image's metadata encoded in JSON:
{
"image":
{
"id": 1,
"name": "My Image",
"status": "available",
"image_type": "kernel"
"is_public": true,
"properties": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
}
Notes
The reason the returned dict contains only a single element, 'image', is for XML conversion purposes, where the root element will be <image> and not the root XML namespace.
The properties element is a mapping of custom key/value pairs the image may have saved with it.
The files element is a list of mappings containing the chunks comprising an image along with the chunk's size
Exceptions
404:: Image was not found
Register/create a new image
POST http://parallax.openstack.org/images
The body of the request shall be a JSON encoded mapping of the image's metadata:
{
"image":
{
"name": "My Image",
"status": "available",
"image_type": "kernel"
"is_public": true,
"properties": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
}The returned response, is successful, will be a JSON encoded mapping of the newly-created image in Parallax, including a populated id column with the new image's internal identifier:
{
"image":
{
"id": 1,
"name": "My Image",
"status": "available",
"image_type": "kernel"
"is_public": true,
"properties": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
}
Notes
The reason the body dict and result dict contains only a single element, 'image', is for XML conversion purposes, where the root element will be <image> and not the root XML namespace.
The properties element is a mapping of custom key/value pairs the image may have saved with it.
The files element is a list of mappings containing the chunks comprising an image along with the chunk's size
Update an existing image's metadata
PUT http://parallax.openstack.org/images/<ID>
The body of the request shall be a JSON encoded mapping of the image's metadata:
{
"image":
{
"id": 2349823,
"name": "My Image",
"status": "disabled",
"image_type": "kernel"
"is_public": true,
"properties": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
}The returned response, if successful, will be a JSON encoded mapping of the updated image metadata in Parallax:
{
"image":
{
"id": 2349823,
"name": "My Image",
"status": "disabled",
"image_type": "kernel"
"is_public": true,
"metadata": { "mykey": "myvalue" },
"files": [ { "location": "swift://user:passwd@acct/container/obj.tar.gz.0",
"size": 101 } ]
}
}
Notes
The reason the body dict and result dict contains only a single element, 'image', is for XML conversion purposes, where the root element will be <image> and not the root XML namespace.
The properties element is a mapping of custom key/value pairs the image may have saved with it.
The files element is a list of mappings containing the chunks comprising an image along with the chunk's size
Exceptions
404:: Image was not found
Delete an existing image from the registry
DELETE http://parallax.openstack.org/images/<ID>
The body of the request will be ignored.
Exceptions
404:: Image was not found
Teller API Commands
This section describes the Teller REST API.
Fetch an Image
GET http://teller.openstack.org/images/<ID>
Returns the virtual machine image data as response body.
Exceptions
404:: Image was not found
Store an Image
POST http://teller.openstack.org/images/<ID>
The body of the POST request shall be a mime-encoded blob of data representing the image to be stored.
Note: All this does is store the raw image data in Teller's backend. If you are responsible for storing the metadata about the image, you should do that with a similar call to Parallax's API.
Immediately returns a mapping of image information indicating status of the image:
{
'image':
{
'id': identifier for image,
'status': 'pending'
}
}
Update an Image
There is no operation for updating an image. All images are immutable once created.
Delete an Image
DELETE http://teller.openstack.org/images/<ID>
Returns 200 OK on success
Returns 404 when image with URI does not exist