def activate(self, dbg, uri, domain):
        u = urlparse.urlparse(uri)
        # XXX need some datapath-specific errors below
        if not(os.path.exists(u.path)):
            raise xapi.storage.api.volume.Volume_does_not_exist(u.path)
        if u.scheme[:3] == "vhd":
            img = image.Vhd(u.path)
        elif u.scheme[:3] == "raw":
            img = image.Raw(u.path)
        else:
            raise

        # See whether we should open it O_DIRECT
        o_direct = self._get_uri_param(dbg, uri, 'o_direct', "true")
        o_direct = o_direct in ['true', 't', 'on', '1', 'yes']
        log.debug("o_direct = %s" % (o_direct))

        tap = tapdisk.load_tapdisk_metadata(dbg, u.path)
        tap.open(dbg, img, o_direct)
        tapdisk.save_tapdisk_metadata(dbg, u.path, tap)
 def detach(self, dbg, uri, domain):
     u = urlparse.urlparse(uri)
     tap = tapdisk.load_tapdisk_metadata(dbg, u.path)
     tap.destroy(dbg)
     tapdisk.forget_tapdisk_metadata(dbg, u.path)
 def deactivate(self, dbg, uri, domain):
     u = urlparse.urlparse(uri)
     tap = tapdisk.load_tapdisk_metadata(dbg, u.path)
     tap.close(dbg)