diff options
author | MORITA Kazutaka <morita.kazutaka@gmail.com> | 2011-01-01 02:53:51 +0900 |
---|---|---|
committer | MORITA Kazutaka <morita.kazutaka@gmail.com> | 2011-01-01 02:53:51 +0900 |
commit | f8272fc0b38be55d383860b6138e79a8a74965be (patch) | |
tree | 0c4795d9d1d521ea141d7c04c919b89b18325086 | |
parent | 9c17d68bb670f389a16e05d4306ad0a720e7a1e4 (diff) | |
download | nova-f8272fc0b38be55d383860b6138e79a8a74965be.tar.gz nova-f8272fc0b38be55d383860b6138e79a8a74965be.tar.xz nova-f8272fc0b38be55d383860b6138e79a8a74965be.zip |
Add support for Sheepdog volumes
-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 8353b9712..2e8a3c816 100644 --- a/nova/volume/driver.py +++ b/nova/volume/driver.py @@ -312,3 +312,52 @@ class FakeISCSIDriver(ISCSIDriver): """Execute that simply logs the command.""" logging.debug(_("FAKE ISCSI: %s"), cmd) return (None, None) + + +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 |