#!/usr/bin/python
#
# A plugin for inflating/deflating LVHD VDI's centrally on the master when 
# using thin provisioning

import sys
import XenAPIPlugin
sys.path.append("/opt/xensource/sm/")
import vhdutil
import lvhdutil
from lvmcache import LVMCache
from journaler import Journaler
from lock import Lock

def attach(session, args):
    srUuid = args["srUuid"]
    vdiUuid = args["vdiUuid"]
    vgName = "%s%s" % (lvhdutil.VG_PREFIX, srUuid)
    lvmCache = LVMCache(vgName)
    journaler = Journaler(lvmCache)
    lock = Lock(vhdutil.LOCK_TYPE_SR, srUuid)
    lock.acquire()
    try:
        lvhdutil.attachThin(journaler, srUuid, vdiUuid)
        return str(True)
    finally:
        lock.release()
    return str(False)

def detach(session, args):
    srUuid = args["srUuid"]
    vdiUuid = args["vdiUuid"]
    vgName = "%s%s" % (lvhdutil.VG_PREFIX, srUuid)
    lvmCache = LVMCache(vgName)
    lock = Lock(vhdutil.LOCK_TYPE_SR, srUuid)
    lock.acquire()
    try:
        lvhdutil.detachThin(lvmCache, args["srUuid"], args["vdiUuid"])
        return str(True)
    finally:
        lock.release()
    return str(False)

if __name__ == "__main__":
    XenAPIPlugin.dispatch({"attach": attach, "detach": detach})
