summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorMORITA Kazutaka <morita.kazutaka@gmail.com>2011-01-14 04:44:15 +0000
committerTarmac <>2011-01-14 04:44:15 +0000
commitc468658d553d3fd9cb8d9d39c7dcbc3f2ffbc640 (patch)
tree0b6e4526af651d83ded90fd8e569736ba1f76ceb /nova
parent14a42e45cf1a29fb7622a5f704b275335ab04b79 (diff)
parent600e397515ec425958a24c35a4440d85bd47133a (diff)
downloadnova-c468658d553d3fd9cb8d9d39c7dcbc3f2ffbc640.tar.gz
nova-c468658d553d3fd9cb8d9d39c7dcbc3f2ffbc640.tar.xz
nova-c468658d553d3fd9cb8d9d39c7dcbc3f2ffbc640.zip
This change introduces support for Sheepdog (distributed block storage
system) which is proposed in https://blueprints.launchpad.net/nova/+spec/sheepdog-support Requirements: - libvirt 0.8.7 or later - qemu 0.13.0 or later How to test: 1. install Sheepdog The software is available from SourceForge.net: https://sourceforge.net/projects/sheepdog/files/ See also: http://wiki.qemu.org/Features/Sheepdog/Getting_Started#Install 2. run the sheepdog daemon on each hosts $ sheep /store_dir /store_dir is a directory to store sheepdog objects. The directory must be on the filesystem with an xattr support. 3. format the sheepdog storage $ collie cluster format --copies=3 4. run nova-volume $ nova-volume --volume_driver=nova.volume.driver.SheepdogDriver
Diffstat (limited to 'nova')
-rw-r--r--nova/volume/driver.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/nova/volume/driver.py b/nova/volume/driver.py
index 44bfeaf0c..71fe18a40 100644
--- a/nova/volume/driver.py
+++ b/nova/volume/driver.py
@@ -371,3 +371,52 @@ class RBDDriver(VolumeDriver):
def undiscover_volume(self, volume):
"""Undiscover volume on a remote host"""
pass
+
+
+class SheepdogDriver(VolumeDriver):
+ """Executes commands relating to Sheepdog Volumes"""
+
+ def check_for_setup_error(self):
+ """Returns an error if prerequisites aren't met"""
+ try:
+ (out, err) = self._execute("collie cluster info")
+ if not out.startswith('running'):
+ raise exception.Error(_("Sheepdog is not working: %s") % out)
+ except exception.ProcessExecutionError:
+ raise exception.Error(_("Sheepdog is not working"))
+
+ def create_volume(self, volume):
+ """Creates a sheepdog volume"""
+ if int(volume['size']) == 0:
+ sizestr = '100M'
+ else:
+ sizestr = '%sG' % volume['size']
+ self._try_execute("qemu-img create sheepdog:%s %s" %
+ (volume['name'], sizestr))
+
+ def delete_volume(self, volume):
+ """Deletes a logical volume"""
+ self._try_execute("collie vdi delete %s" % volume['name'])
+
+ def local_path(self, volume):
+ return "sheepdog:%s" % volume['name']
+
+ def ensure_export(self, context, volume):
+ """Safely and synchronously recreates an export for a logical volume"""
+ pass
+
+ def create_export(self, context, volume):
+ """Exports the volume"""
+ pass
+
+ def remove_export(self, context, volume):
+ """Removes an export for a logical volume"""
+ pass
+
+ def discover_volume(self, volume):
+ """Discover volume on a remote host"""
+ return "sheepdog:%s" % volume['name']
+
+ def undiscover_volume(self, volume):
+ """Undiscover volume on a remote host"""
+ pass