371
371
def undiscover_volume(self, volume):
372
372
"""Undiscover volume on a remote host"""
376
class SheepdogDriver(VolumeDriver):
377
"""Executes commands relating to Sheepdog Volumes"""
379
def check_for_setup_error(self):
380
"""Returns an error if prerequisites aren't met"""
382
(out, err) = self._execute("collie cluster info")
383
if not out.startswith('running'):
384
raise exception.Error(_("Sheepdog is not working: %s") % out)
385
except exception.ProcessExecutionError:
386
raise exception.Error(_("Sheepdog is not working"))
388
def create_volume(self, volume):
389
"""Creates a sheepdog volume"""
390
if int(volume['size']) == 0:
393
sizestr = '%sG' % volume['size']
394
self._try_execute("qemu-img create sheepdog:%s %s" %
395
(volume['name'], sizestr))
397
def delete_volume(self, volume):
398
"""Deletes a logical volume"""
399
self._try_execute("collie vdi delete %s" % volume['name'])
401
def local_path(self, volume):
402
return "sheepdog:%s" % volume['name']
404
def ensure_export(self, context, volume):
405
"""Safely and synchronously recreates an export for a logical volume"""
408
def create_export(self, context, volume):
409
"""Exports the volume"""
412
def remove_export(self, context, volume):
413
"""Removes an export for a logical volume"""
416
def discover_volume(self, volume):
417
"""Discover volume on a remote host"""
418
return "sheepdog:%s" % volume['name']
420
def undiscover_volume(self, volume):
421
"""Undiscover volume on a remote host"""