← Back to team overview

openstack team mailing list archive

Block storage management API (Cloud Disks API)

 

Hello,

We are currently working with GRNET (http://www.grnet.gr),
the Greek National Research and Education Network, to build
a scalable public cloud infrastructure based on commodity hardware and
software components.

We are building a custom cloud infrastructure around the Rackspace Cloud
Servers API, for the management of VM instances. We find it's a simple,
elegant, more-or-less self-explanatory API, with clear REST semantics.

However, there doesn't seem to be a similar API for the management of
dynamically allocated block-based storage volumes, i.e. the
creation/query/destruction of volumes and their attachment to, or
detachment from VMs, analogous to the EBS component of the Amazon EC2
API.

Since we plan to support such functionality, we have been looking into a
way to extend the Cloud Servers API. We began from the latest
specification of the API
[http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf]
to provide a similar RESTful interface for the management of raw block
devices.

This is what we've come up with so far:

[we use the term "disk" or "storage volume" interchangeably to refer to
a piece of raw block-based storage which can be dynamically attached to
or detached from a virtual machine]

-- cut here --

1. Disks 
    1.1 List disks
        GET /disks
            List all storage volumes (IDs and names only)
        GET /disks/detail
            List all storage volumes (all details) 
        GET /servers/id/disks
            List all storage volumes attached to a specific server
	    (IDs and names only)
        GET /servers/id/disks/detail
            List all storage volumes attached to a specific server
	    (all details)
       
    1.2 Create disks
        POST /disks 
   	    Provision a new storage volume asynchronously.
            The progress of the request can be checked by performing a
	    GET on /disks/id. 
    1.3 Get disk details
        GET /disks/id
            List details of a storage volume, specified by its id. 
        GET /servers/id/disks/id 
            List details of a storage volume, specified by its id.
            [perhaps this is superseded by the GET /disks/id operation,
	     no need to replicate it here].
   
    1.4 Update disk name 
        PUT /disks/id
            Update the specified storage volume's name.
        PUT /servers/id/disks/id
            Update the specified storage volume's name.
            [perhaps this is superseded by the PUT /disks/id operation,
	     no need to replicate it here].

    1.5 Delete disk
        DELETE /disks/id 
            Destroy the specified storage volume, free all of its data.
    
    1.6 Attach disk to a VM
        POST /servers/id/disks
            Attaches a storage volume to the specified server.
    
    1.7 Detach disk from a VM
        DELETE /servers/id/disks/id
            Detaches the specified storage volume from the specified server.

-- cut here --

Essentially this is a RESTful API with an almost 1-1 correspondence with
the Cloud Servers API. The aim is to make its integration with the Cloud
Servers API as easy as possible.

We are now beginning to implement this, and would appreciate your
thoughts/suggestions, or any pointers you may have to any similar efforts.

Thank you,
Vangelis.

-- 
Vangelis Koukis, PhD
Computing Systems Laboratory,
National Technical University of Athens.
vkoukis@xxxxxxxxxxxxxxxxx

Attachment: signature.asc
Description: Digital signature