2008-10-31 13:56:47 +00:00
def __del__ ( self ) :
try :
for cb , opaque in self . domainEventCallbacks . items ( ) :
del self . domainEventCallbacks [ cb ]
2010-07-13 10:54:26 +02:00
del self . domainEventCallbacks
2008-10-31 13:56:47 +00:00
libvirtmod . virConnectDomainEventDeregister ( self . _o , self )
except AttributeError :
pass
if self . _o != None :
libvirtmod . virConnectClose ( self . _o )
self . _o = None
def domainEventDeregister ( self , cb ) :
""" Removes a Domain Event Callback. De-registering for a
domain callback will disable delivery of this event type """
try :
del self . domainEventCallbacks [ cb ]
if len ( self . domainEventCallbacks ) == 0 :
2010-07-13 10:54:26 +02:00
del self . domainEventCallbacks
2008-10-31 13:56:47 +00:00
ret = libvirtmod . virConnectDomainEventDeregister ( self . _o , self )
if ret == - 1 : raise libvirtError ( ' virConnectDomainEventDeregister() failed ' , conn = self )
except AttributeError :
pass
def domainEventRegister ( self , cb , opaque ) :
""" Adds a Domain Event Callback. Registering for a domain
callback will enable delivery of the events """
try :
self . domainEventCallbacks [ cb ] = opaque
except AttributeError :
self . domainEventCallbacks = { cb : opaque }
ret = libvirtmod . virConnectDomainEventRegister ( self . _o , self )
if ret == - 1 : raise libvirtError ( ' virConnectDomainEventRegister() failed ' , conn = self )
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventCallbacks ( self , dom , event , detail ) :
2008-10-31 13:56:47 +00:00
""" Dispatches events to python user domain event callbacks
"""
try :
for cb , opaque in self . domainEventCallbacks . items ( ) :
2008-11-24 19:28:12 +00:00
cb ( self , dom , event , detail , opaque )
2008-10-31 13:56:47 +00:00
return 0
except AttributeError :
pass
2010-03-26 13:22:06 +00:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventLifecycleCallback ( self , dom , event , detail , cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain lifecycle event callbacks
2010-03-26 13:22:06 +00:00
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , event , detail , opaque )
return 0
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventGenericCallback ( self , dom , cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain generic event callbacks
2010-03-26 13:22:06 +00:00
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
2010-03-26 13:22:06 +00:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , opaque )
return 0
2010-03-26 13:22:06 +00:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventRTCChangeCallback ( self , dom , offset , cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain RTC change event callbacks
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , offset , opaque )
return 0
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventWatchdogCallback ( self , dom , action , cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain watchdog event callbacks
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , action , opaque )
return 0
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventIOErrorCallback ( self , dom , srcPath , devAlias ,
action , cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain IO error event callbacks
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , srcPath , devAlias , action , opaque )
return 0
Add support for another explicit IO error event
This introduces a new event type
VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
This event is the same as the previous VIR_DOMAIN_ID_IO_ERROR
event, but also includes a string describing the cause of
the event.
Thus there is a new callback definition for this event type
typedef void (*virConnectDomainEventIOErrorReasonCallback)(virConnectPtr conn,
virDomainPtr dom,
const char *srcPath,
const char *devAlias,
int action,
const char *reason,
void *opaque);
This is currently wired up to the QEMU block IO error events
* daemon/remote.c: Dispatch IO error events to client
* examples/domain-events/events-c/event-test.c: Watch for
IO error events
* include/libvirt/libvirt.h.in: Define new IO error event ID
and callback signature
* src/conf/domain_event.c, src/conf/domain_event.h,
src/libvirt_private.syms: Extend API to handle IO error events
* src/qemu/qemu_driver.c: Connect to the QEMU monitor event
for block IO errors and emit a libvirt IO error event
* src/remote/remote_driver.c: Receive and dispatch IO error
events to application
* src/remote/remote_protocol.x: Wire protocol definition for
IO error events
* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
src/qemu/qemu_monitor_json.c: Watch for BLOCK_IO_ERROR event
from QEMU monitor
2010-03-18 19:37:44 +00:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventIOErrorReasonCallback ( self , dom , srcPath ,
devAlias , action , reason ,
cbData ) :
Add support for another explicit IO error event
This introduces a new event type
VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
This event is the same as the previous VIR_DOMAIN_ID_IO_ERROR
event, but also includes a string describing the cause of
the event.
Thus there is a new callback definition for this event type
typedef void (*virConnectDomainEventIOErrorReasonCallback)(virConnectPtr conn,
virDomainPtr dom,
const char *srcPath,
const char *devAlias,
int action,
const char *reason,
void *opaque);
This is currently wired up to the QEMU block IO error events
* daemon/remote.c: Dispatch IO error events to client
* examples/domain-events/events-c/event-test.c: Watch for
IO error events
* include/libvirt/libvirt.h.in: Define new IO error event ID
and callback signature
* src/conf/domain_event.c, src/conf/domain_event.h,
src/libvirt_private.syms: Extend API to handle IO error events
* src/qemu/qemu_driver.c: Connect to the QEMU monitor event
for block IO errors and emit a libvirt IO error event
* src/remote/remote_driver.c: Receive and dispatch IO error
events to application
* src/remote/remote_protocol.x: Wire protocol definition for
IO error events
* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
src/qemu/qemu_monitor_json.c: Watch for BLOCK_IO_ERROR event
from QEMU monitor
2010-03-18 19:37:44 +00:00
""" Dispatches events to python user domain IO error event callbacks
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
Add support for another explicit IO error event
This introduces a new event type
VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
This event is the same as the previous VIR_DOMAIN_ID_IO_ERROR
event, but also includes a string describing the cause of
the event.
Thus there is a new callback definition for this event type
typedef void (*virConnectDomainEventIOErrorReasonCallback)(virConnectPtr conn,
virDomainPtr dom,
const char *srcPath,
const char *devAlias,
int action,
const char *reason,
void *opaque);
This is currently wired up to the QEMU block IO error events
* daemon/remote.c: Dispatch IO error events to client
* examples/domain-events/events-c/event-test.c: Watch for
IO error events
* include/libvirt/libvirt.h.in: Define new IO error event ID
and callback signature
* src/conf/domain_event.c, src/conf/domain_event.h,
src/libvirt_private.syms: Extend API to handle IO error events
* src/qemu/qemu_driver.c: Connect to the QEMU monitor event
for block IO errors and emit a libvirt IO error event
* src/remote/remote_driver.c: Receive and dispatch IO error
events to application
* src/remote/remote_protocol.x: Wire protocol definition for
IO error events
* src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
src/qemu/qemu_monitor_json.c: Watch for BLOCK_IO_ERROR event
from QEMU monitor
2010-03-18 19:37:44 +00:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , srcPath , devAlias , action ,
reason , opaque )
return 0
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
def _dispatchDomainEventGraphicsCallback ( self , dom , phase , localAddr ,
remoteAddr , authScheme , subject ,
cbData ) :
2010-04-08 16:01:00 +01:00
""" Dispatches events to python user domain graphics event callbacks
"""
2011-06-15 20:14:45 -04:00
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
2010-04-08 16:01:00 +01:00
2011-06-15 20:14:45 -04:00
cb ( self , virDomain ( self , _obj = dom ) , phase , localAddr , remoteAddr ,
authScheme , subject , opaque )
return 0
2010-04-08 16:01:00 +01:00
2011-07-22 13:57:42 +08:00
def dispatchDomainEventBlockPullCallback ( self , dom , path , type , status , cbData ) :
""" Dispatches events to python user domain blockJob event callbacks
"""
try :
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , path , type , status , opaque )
return 0
except AttributeError :
pass
2011-10-18 16:15:42 +02:00
def _dispatchDomainEventDiskChangeCallback ( self , dom , oldSrcPath , newSrcPath , devAlias , reason , cbData ) :
""" Dispatches event to python user domain diskChange event callbacks
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , oldSrcPath , newSrcPath , devAlias , reason , opaque )
return 0 ;
2012-03-23 21:44:50 +08:00
def _dispatchDomainEventTrayChangeCallback ( self , dom , devAlias , reason , cbData ) :
""" Dispatches event to python user domain trayChange event callbacks
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , devAlias , reason , opaque )
return 0 ;
2012-03-23 22:43:14 +08:00
def _dispatchDomainEventPMWakeupCallback ( self , dom , reason , cbData ) :
""" Dispatches event to python user domain pmwakeup event callbacks
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , reason , opaque )
return 0 ;
2012-03-23 21:44:50 +08:00
2012-03-23 22:50:36 +08:00
def _dispatchDomainEventPMSuspendCallback ( self , dom , reason , cbData ) :
""" Dispatches event to python user domain pmsuspend event callbacks
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , reason , opaque )
return 0 ;
2012-07-13 17:05:17 +08:00
def _dispatchDomainEventBalloonChangeCallback ( self , dom , actual , cbData ) :
""" Dispatches events to python user domain balloon change event callbacks
"""
cb = cbData [ " cb " ]
opaque = cbData [ " opaque " ]
cb ( self , virDomain ( self , _obj = dom ) , actual , opaque )
return 0
2010-03-26 13:22:06 +00:00
def domainEventDeregisterAny ( self , callbackID ) :
""" Removes a Domain Event Callback. De-registering for a
domain callback will disable delivery of this event type """
try :
ret = libvirtmod . virConnectDomainEventDeregisterAny ( self . _o , callbackID )
if ret == - 1 : raise libvirtError ( ' virConnectDomainEventDeregisterAny() failed ' , conn = self )
del self . domainEventCallbackID [ callbackID ]
except AttributeError :
pass
def domainEventRegisterAny ( self , dom , eventID , cb , opaque ) :
""" Adds a Domain Event Callback. Registering for a domain
callback will enable delivery of the events """
if not hasattr ( self , ' domainEventCallbackID ' ) :
self . domainEventCallbackID = { }
cbData = { " cb " : cb , " conn " : self , " opaque " : opaque }
if dom is None :
ret = libvirtmod . virConnectDomainEventRegisterAny ( self . _o , None , eventID , cbData )
else :
ret = libvirtmod . virConnectDomainEventRegisterAny ( self . _o , dom . _o , eventID , cbData )
if ret == - 1 :
raise libvirtError ( ' virConnectDomainEventRegisterAny() failed ' , conn = self )
self . domainEventCallbackID [ ret ] = opaque
2010-07-08 11:30:47 +01:00
return ret
2012-05-20 16:20:11 +02:00
def listAllDomains ( self , flags ) :
""" List all domains and returns a list of domain objects """
ret = libvirtmod . virConnectListAllDomains ( self . _o , flags )
if ret is None :
raise libvirtError ( " virConnectListAllDomains() failed " , conn = self )
retlist = list ( )
for domptr in ret :
retlist . append ( virDomain ( self , _obj = domptr ) )
return retlist