volumes.md 5.81 KB

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);