Working with Volumes
Cloud Block Storage (CBS) is a dynamic volume creation and management service built upon the OpenStack Cinder project. See http://cinder.openstack.org for complete details about the available features and functionality.
Connecting to Cloud Block Storage
The top-level object for working with CBS/Cinder is the VolumeService
object. Like other services, it is created from the top-level
connection object (either OpenStack
or Rackspace
). The correct service is
selected from the service catalog by specifying:
- the service name (for example, 'cloudBlockStorage')
- the region (for example, 'ORD')
- the URL type (for example, 'publicURL')
Defaults are provided for the service name and URL type. To specify a
default region, define the RAXSDK_VOLUME_REGION
constant before including
the top-level Rackspace class:
// set the default region to London
define('RAXSDK_VOLUME_REGION','LON');
Use the VolumeService()
method to create a new VolumeService
object:
$cloud = new \OpenCloud\Rackspace(...);
$cbs = $cloud->VolumeService();
You can override any defaults by specifying them:
$cbs = $cloud->VolumeService('myService','myRegion');
Syntax:
{variable} = $cloud->VolumeService({servicename}, {region}, {urltype});
Example:
$dallas = $cloud->VolumeService('cloudBlockStorage', 'DFW');
This creates a connection to the cloudBlockStorage
service (as it is
called at Rackspace) in the DFW
region.
Volume Types
Providers may support multiple types of volumes; at Rackspace, a volume can
either be SSD
(solid state disk: expensive, high-performance) or
SATA
(serial attached storage: regular disks, less expensive).
Listing volume types
The VolumeTypeList
method returns a Collection of VolumeType objects:
$vtlist = $dallas->VolumeTypeList();
while($vt = $vtlist->Next())
printf("%s %s\n", $vt->id, $vt->Name());
This lists the volume types and their IDs.
php-opencloud does not permit you to create, delete, or update volume types, since those are administrative functions.
Describe a single volume type
If you know the ID of a volume type, use the VolumeType
method to retrieve
information on it:
$volumetype = $dallas->VolumeType(1);
A volume type has only three attributes:
$id
the volume type identifier$name
its name$extra_specs
additional information for the provider
Working with Volumes
Like other objects, you can create, list, and show volumes. The Volume
method
on the VolumeService object is the primary interface.
To create a volume
To create a volume, you must specify its size (in gigabytes). All other parameters are optional (and defaults will be provided), though providing the volume type is recommended.
Example:
$myvolume = $dallas->Volume(); // an empty volume object
$response = $myvolume->Create(array(
'size' => 200,
'volume_type' => $dallas->VolumeType(1),
'display_name' => 'My Volume',
'display_description' => 'Use this for large object storage'));
This creates a 200GB volume. Note that the volume_type
parameter must be
a VolumeType
object.
To list volumes
The VolumeList()
method returns a Collection of Volume objects:
$volumes = $dallas->VolumeList();
$volumes->Sort('display_name');
while($vol = $volumes->Next())
print $vol->Name()."\n";
This lists all the volumes associated with your account.
To get details on a single volume
If you specify an ID on the Volume()
method, it retrieves information on
the specified volume:
$myvolume = $dallas->Volume('0d0f90209...');
printf("volume size = %d\n", $myvolume->size);
To delete a volume
The Delete()
method deletes a volume:
$myvolume->Delete();
Working with Snapshots
A Snapshot
captures the contents of a volume at a point in time. It can be
used, for example, as a backup point; and you can later create a volume from
the snapshot.
To create a snapshot
A Snapshot
object is created from the Cloud Block Storage service. However,
it is associated with a volume, and you must specify a volume to create one:
$snapshot = $dallas->Snapshot(); // empty Snapshot object
$snapshot->Create(array(
'display_name' => 'Name that snapshot',
'volume_id' => $volume->id));
To list snapshots
The SnapshotList()
method returns a Collection of Snapshot objects:
$snaplist = $dallas->SnapshotList();
while($snap = $snaplist->Next())
printf("[%s] %s\n", $snap->id, $snap->Name());
To get details on a single snapshot
To retrieve a single Snapshot
, specify its ID on the Snapshot()
method:
$snapshot = $dallas->Snapshot({snapshot-id});
To delete a snapshot
Use the Delete()
method to remove a snapshot:
$snapshot->Delete();
Volumes and Servers
A volume by itself is useful when it is attached to a server so that the server can use the volume.
To attach a volume to a server
Syntax:
$server = $compute->Server({server-id});
$volume = $dallas->Volume({volume-id});
$server->AttachVolume($volume, {mount-point})
{server-id}
and {volume-id}
are the IDs of the server and volume,
respectively. {mount-point}
is the location on the server on which to
mount the volume (usually /dev/xvhdd
or similar). You can also supply
'auto'
as the mount point, in which case the mount point will be
automatically selected for you. auto
is the default value for
{mount-point}
, so you do not actually need to supply anything for that
parameter.
Example:
$server = $compute->Server('010d092...');
$volume = $dallas->Volume('39d0f0...');
$server->AttachVolume($volume); // uses the 'auto' mount point
To detach a volume from a server
Syntax:
$server = $compute->Server({server-id});
$volume = $dallas->Volume({volume-id});
$server->DetachVolume($volume);