diff options
| author | MORITA Kazutaka <morita.kazutaka@gmail.com> | 2011-01-14 04:44:15 +0000 |
|---|---|---|
| committer | Tarmac <> | 2011-01-14 04:44:15 +0000 |
| commit | c468658d553d3fd9cb8d9d39c7dcbc3f2ffbc640 (patch) | |
| tree | 0b6e4526af651d83ded90fd8e569736ba1f76ceb /nova | |
| parent | 14a42e45cf1a29fb7622a5f704b275335ab04b79 (diff) | |
| parent | 600e397515ec425958a24c35a4440d85bd47133a (diff) | |
| download | nova-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.py | 49 |
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 |
