diff options
author | Daniel Veillard <veillard@redhat.com> | 2009-04-24 16:25:34 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@redhat.com> | 2009-04-24 16:25:34 +0000 |
commit | 8e00488f1334e5acb01ca9bac5b4f73a6565d48a (patch) | |
tree | 962854aa7174e286f863e3a09169cc76239c32ca /libvirt.py | |
parent | ebd5a51c1041f23fa8343296b4422f987f69a06e (diff) | |
download | libvirt-python-v6-8e00488f1334e5acb01ca9bac5b4f73a6565d48a.tar.gz libvirt-python-v6-8e00488f1334e5acb01ca9bac5b4f73a6565d48a.tar.xz libvirt-python-v6-8e00488f1334e5acb01ca9bac5b4f73a6565d48a.zip |
libvirt-0.6.3-1.el5libvirt-0.6.3-9.el5libvirt-0.6.3-8.el5libvirt-0.6.3-7.el5libvirt-0.6.3-6.el5libvirt-0.6.3-5.el5libvirt-0.6.3-4.el5libvirt-0.6.3-3.el5libvirt-0.6.3-24.el5libvirt-0.6.3-23.el5libvirt-0.6.3-22.el5libvirt-0.6.3-21.el5libvirt-0.6.3-20.el5.4.1libvirt-0.6.3-20.el5libvirt-0.6.3-2.el5libvirt-0.6.3-19.el5libvirt-0.6.3-18.el5libvirt-0.6.3-17.el5libvirt-0.6.3-16.el5libvirt-0.6.3-15.el5libvirt-0.6.3-14.el5libvirt-0.6.3-13.el5libvirt-0.6.3-12.el5libvirt-0.6.3-11.el5libvirt-0.6.3-10.el5libvirt-0.6.3-1.el5RHEL-5.4
- Upstream release 0.6.3
- various bug fixes
- a couple of packaging fixes including #496867
- Related: rhbz#475821
Diffstat (limited to 'libvirt.py')
-rw-r--r-- | libvirt.py | 1746 |
1 files changed, 1746 insertions, 0 deletions
diff --git a/libvirt.py b/libvirt.py new file mode 100644 index 0000000..9ee36f2 --- /dev/null +++ b/libvirt.py @@ -0,0 +1,1746 @@ +#!/usr/bin/python -u +# +# Those are the autogenerated Python bindings for libvirt. +# Check python/generator.py in the source distribution of libvir +# to find out more about the generation process +# + +# On cygwin, the DLL is called cygvirtmod.dll +try: + import libvirtmod +except: + import cygvirtmod as libvirtmod + +import types + +# The root of all libvirt errors. +class libvirtError(Exception): + def __init__(self, defmsg, conn=None, dom=None, net=None, pool=None, vol=None): + + if dom is not None: + conn = dom._conn + elif net is not None: + conn = net._conn + elif pool is not None: + conn = pool._conn + elif vol is not None: + conn = vol._conn + + # Never call virConnGetLastError(). + # virGetLastError() is now thread local + err = virGetLastError() + if err is None: + msg = defmsg + else: + msg = err[2] + + Exception.__init__(self, msg) + + self.err = err + + def get_error_code(self): + if self.err is None: + return None + return self.err[0] + + def get_error_domain(self): + if self.err is None: + return None + return self.err[1] + + def get_error_message(self): + if self.err is None: + return None + return self.err[2] + + def get_error_level(self): + if self.err is None: + return None + return self.err[3] + + def get_str1(self): + if self.err is None: + return None + return self.err[4] + + def get_str2(self): + if self.err is None: + return None + return self.err[5] + + def get_str3(self): + if self.err is None: + return None + return self.err[6] + + def get_int1(self): + if self.err is None: + return None + return self.err[7] + + def get_int2(self): + if self.err is None: + return None + return self.err[8] + +# +# register the libvirt global error handler +# +def registerErrorHandler(f, ctx): + """Register a Python written function to for error reporting. + The function is called back as f(ctx, error), with error + being a list of information about the error being raised. + Returns 1 in case of success.""" + return libvirtmod.virRegisterErrorHandler(f,ctx) + +def openAuth(uri, auth, flags): + ret = libvirtmod.virConnectOpenAuth(uri, auth, flags) + if ret is None:raise libvirtError('virConnectOpenAuth() failed') + return virConnect(_obj=ret) + + +# +# Return library version. +# +def getVersion (name = None): + """If no name parameter is passed (or name is None) then the + version of the libvirt library is returned as an integer. + + If a name is passed and it refers to a driver linked to the + libvirt library, then this returns a tuple of (library version, + driver version). + + If the name passed refers to a non-existent driver, then you + will get the exception 'no support for hypervisor'. + + Versions numbers are integers: 1000000*major + 1000*minor + release.""" + if name is None: + ret = libvirtmod.virGetVersion (); + else: + ret = libvirtmod.virGetVersion (name); + if ret is None: raise libvirtError ("virGetVersion() failed") + return ret + + +# +# Invoke an EventHandle callback +# +def eventInvokeHandleCallback (watch, fd, event, callback, opaque): + """ + Invoke the Event Impl Handle Callback in C + """ + libvirtmod.virEventInvokeHandleCallback(watch, fd, event, callback, opaque); + +# +# Invoke an EventTimeout callback +# +def eventInvokeTimeoutCallback (timer, callback, opaque): + """ + Invoke the Event Impl Timeout Callback in C + """ + libvirtmod.virEventInvokeTimeoutCallback(timer, callback, opaque); + + + +# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING +# +# Everything before this line comes from libvir.py +# Everything after this line is automatically generated +# +# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING +# +# Functions from module libvirt +# + +def open(name): + """This function should be called first to get a connection to + the Hypervisor and xen store """ + ret = libvirtmod.virConnectOpen(name) + if ret is None:raise libvirtError('virConnectOpen() failed') + return virConnect(_obj=ret) + +def openReadOnly(name): + """This function should be called first to get a restricted + connection to the library functionalities. The set of APIs + usable are then restricted on the available methods to + control the domains. """ + ret = libvirtmod.virConnectOpenReadOnly(name) + if ret is None:raise libvirtError('virConnectOpenReadOnly() failed') + return virConnect(_obj=ret) + +def virEventRegisterImpl(addHandle, updateHandle, removeHandle, addTimeout, updateTimeout, removeTimeout): + libvirtmod.virEventRegisterImpl(addHandle, updateHandle, removeHandle, addTimeout, updateTimeout, removeTimeout) + +def virInitialize(): + """Initialize the library. It's better to call this routine at + startup in multithreaded applications to avoid potential + race when initializing the library. """ + ret = libvirtmod.virInitialize() + if ret == -1: raise libvirtError ('virInitialize() failed') + return ret + +# +# Functions from module virterror +# + +def virGetLastError(): + """Provide a pointer to the last error caught at the library + level The error object is kept in thread local storage, so + separate threads can safely access this concurrently. """ + ret = libvirtmod.virGetLastError() + return ret + +def virResetLastError(): + """Reset the last error caught at the library level. The + error object is kept in thread local storage, so separate + threads can safely access this concurrently, only resetting + their own error object. """ + libvirtmod.virResetLastError() + +class virDomain: + def __init__(self, conn, _obj=None): + self._conn = conn + if _obj != None:self._o = _obj;return + self._o = None + + def __del__(self): + if self._o != None: + libvirtmod.virDomainFree(self._o) + self._o = None + + # + # virDomain functions from module libvirt + # + + def ID(self): + """Get the hypervisor ID number for the domain """ + ret = libvirtmod.virDomainGetID(self._o) + return ret + + def OSType(self): + """Get the type of domain operation system. """ + ret = libvirtmod.virDomainGetOSType(self._o) + if ret is None: raise libvirtError ('virDomainGetOSType() failed', dom=self) + return ret + + def XMLDesc(self, flags): + """Provide an XML description of the domain. The description + may be reused later to relaunch the domain with + virDomainCreateXML(). """ + ret = libvirtmod.virDomainGetXMLDesc(self._o, flags) + if ret is None: raise libvirtError ('virDomainGetXMLDesc() failed', dom=self) + return ret + + def attachDevice(self, xml): + """Create a virtual device attachment to backend. """ + ret = libvirtmod.virDomainAttachDevice(self._o, xml) + if ret == -1: raise libvirtError ('virDomainAttachDevice() failed', dom=self) + return ret + + def blockPeek(self, path, offset, size, buffer, flags): + """This function allows you to read the contents of a domain's + disk device. Typical uses for this are to determine if the + domain has written a Master Boot Record (indicating that + the domain has completed installation), or to try to work + out the state of the domain's filesystems. (Note that in + the local case you might try to open the block device or + file directly, but that won't work in the remote case, nor + if you don't have sufficient permission. Hence the need for + this call). 'path' must be a device or file corresponding + to the domain. In other words it must be the precise string + returned in a <disk><source dev='...'/></disk> from + virDomainGetXMLDesc. 'offset' and 'size' represent an area + which must lie entirely within the device or file. 'size' + may be 0 to test if the call would succeed. 'buffer' is + the return buffer and must be at least 'size' bytes. NB. + The remote driver imposes a 64K byte limit on 'size'. For + your program to be able to work reliably over a remote + connection you should split large requests to <= 65536 + bytes. """ + ret = libvirtmod.virDomainBlockPeek(self._o, path, offset, size, buffer, flags) + if ret == -1: raise libvirtError ('virDomainBlockPeek() failed', dom=self) + return ret + + def connect(self): + """Provides the connection pointer associated with a domain. + The reference counter on the connection is not increased by + this call. WARNING: When writing libvirt bindings in other + languages, do not use this function. Instead, store the + connection and the domain object together. """ + ret = libvirtmod.virDomainGetConnect(self._o) + if ret is None:raise libvirtError('virDomainGetConnect() failed', dom=self) + __tmp = virConnect(_obj=ret) + return __tmp + + def coreDump(self, to, flags): + """This method will dump the core of a domain on a given file + for analysis. Note that for remote Xen Daemon the file path + will be interpreted in the remote host. """ + ret = libvirtmod.virDomainCoreDump(self._o, to, flags) + if ret == -1: raise libvirtError ('virDomainCoreDump() failed', dom=self) + return ret + + def create(self): + """launch a defined domain. If the call succeed the domain + moves from the defined to the running domains pools. """ + ret = libvirtmod.virDomainCreate(self._o) + if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self) + return ret + + def destroy(self): + """Destroy the domain object. The running instance is shutdown + if not down already and all resources used by it are given + back to the hypervisor. This does not free the associated + virDomainPtr object. This function may require privileged + access """ + ret = libvirtmod.virDomainDestroy(self._o) + if ret == -1: raise libvirtError ('virDomainDestroy() failed', dom=self) + return ret + + def detachDevice(self, xml): + """Destroy a virtual device attachment to backend. """ + ret = libvirtmod.virDomainDetachDevice(self._o, xml) + if ret == -1: raise libvirtError ('virDomainDetachDevice() failed', dom=self) + return ret + + def maxMemory(self): + """Retrieve the maximum amount of physical memory allocated to + a domain. If domain is None, then this get the amount of + memory reserved to Domain0 i.e. the domain where the + application runs. """ + ret = libvirtmod.virDomainGetMaxMemory(self._o) + if ret == 0: raise libvirtError ('virDomainGetMaxMemory() failed', dom=self) + return ret + + def maxVcpus(self): + """Provides the maximum number of virtual CPUs supported for + the guest VM. If the guest is inactive, this is basically + the same as virConnectGetMaxVcpus. If the guest is running + this will reflect the maximum number of virtual CPUs the + guest was booted with. """ + ret = libvirtmod.virDomainGetMaxVcpus(self._o) + if ret == -1: raise libvirtError ('virDomainGetMaxVcpus() failed', dom=self) + return ret + + def memoryPeek(self, start, size, buffer, flags): + """This function allows you to read the contents of a domain's + memory. The memory which is read is controlled by the + 'start', 'size' and 'flags' parameters. If 'flags' is + VIR_MEMORY_VIRTUAL then the 'start' and 'size' parameters + are interpreted as virtual memory addresses for whichever + task happens to be running on the domain at the moment. + Although this sounds haphazard it is in fact what you want + in order to read Linux kernel state, because it ensures + that pointers in the kernel image can be interpreted + coherently. 'buffer' is the return buffer and must be at + least 'size' bytes. 'size' may be 0 to test if the call + would succeed. NB. The remote driver imposes a 64K byte + limit on 'size'. For your program to be able to work + reliably over a remote connection you should split large + requests to <= 65536 bytes. """ + ret = libvirtmod.virDomainMemoryPeek(self._o, start, size, buffer, flags) + if ret == -1: raise libvirtError ('virDomainMemoryPeek() failed', dom=self) + return ret + + def migrate(self, dconn, flags, dname, uri, bandwidth): + """Migrate the domain object from its current host to the + destination host given by dconn (a connection to the + destination host). Flags may be one of more of the + following: VIR_MIGRATE_LIVE Attempt a live migration. If + a hypervisor supports renaming domains during migration, + then you may set the dname parameter to the new name + (otherwise it keeps the same name). If this is not + supported by the hypervisor, dname must be None or else you + will get an error. Since typically the two hypervisors + connect directly to each other in order to perform the + migration, you may need to specify a path from the source + to the destination. This is the purpose of the uri + parameter. If uri is None, then libvirt will try to find + the best method. Uri may specify the hostname or IP + address of the destination host as seen from the source. + Or uri may be a URI giving transport, hostname, user, port, + etc. in the usual form. Refer to driver documentation for + the particular URIs supported. The maximum bandwidth (in + Mbps) that will be used to do migration can be specified + with the bandwidth parameter. If set to 0, libvirt will + choose a suitable default. Some hypervisors do not support + this feature and will return an error if bandwidth is not + 0. To see which features are supported by the current + hypervisor, see virConnectGetCapabilities, + /capabilities/host/migration_features. There are many + limitations on migration imposed by the underlying + technology - for example it may not be possible to migrate + between different processors even with the same + architecture, or between different types of hypervisor. """ + if dconn is None: dconn__o = None + else: dconn__o = dconn._o + ret = libvirtmod.virDomainMigrate(self._o, dconn__o, flags, dname, uri, bandwidth) + if ret is None:raise libvirtError('virDomainMigrate() failed', dom=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def name(self): + """Get the public name for that domain """ + ret = libvirtmod.virDomainGetName(self._o) + return ret + + def reboot(self, flags): + """Reboot a domain, the domain object is still usable there + after but the domain OS is being stopped for a restart. + Note that the guest OS may ignore the request. """ + ret = libvirtmod.virDomainReboot(self._o, flags) + if ret == -1: raise libvirtError ('virDomainReboot() failed', dom=self) + return ret + + def ref(self): + """Increment the reference count on the domain. For each + additional call to this method, there shall be a + corresponding call to virDomainFree to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a domain would increment the reference count. """ + ret = libvirtmod.virDomainRef(self._o) + if ret == -1: raise libvirtError ('virDomainRef() failed', dom=self) + return ret + + def resume(self): + """Resume an suspended domain, the process is restarted from + the state where it was frozen by calling + virSuspendDomain(). This function may requires privileged + access """ + ret = libvirtmod.virDomainResume(self._o) + if ret == -1: raise libvirtError ('virDomainResume() failed', dom=self) + return ret + + def save(self, to): + """This method will suspend a domain and save its memory + contents to a file on disk. After the call, if successful, + the domain is not listed as running anymore (this may be a + problem). Use virDomainRestore() to restore a domain after + saving. """ + ret = libvirtmod.virDomainSave(self._o, to) + if ret == -1: raise libvirtError ('virDomainSave() failed', dom=self) + return ret + + def setAutostart(self, autostart): + """Configure the domain to be automatically started when the + host machine boots. """ + ret = libvirtmod.virDomainSetAutostart(self._o, autostart) + if ret == -1: raise libvirtError ('virDomainSetAutostart() failed', dom=self) + return ret + + def setMaxMemory(self, memory): + """Dynamically change the maximum amount of physical memory + allocated to a domain. If domain is None, then this change + the amount of memory reserved to Domain0 i.e. the domain + where the application runs. This function requires + privileged access to the hypervisor. """ + ret = libvirtmod.virDomainSetMaxMemory(self._o, memory) + if ret == -1: raise libvirtError ('virDomainSetMaxMemory() failed', dom=self) + return ret + + def setMemory(self, memory): + """Dynamically change the target amount of physical memory + allocated to a domain. If domain is None, then this change + the amount of memory reserved to Domain0 i.e. the domain + where the application runs. This function may requires + privileged access to the hypervisor. """ + ret = libvirtmod.virDomainSetMemory(self._o, memory) + if ret == -1: raise libvirtError ('virDomainSetMemory() failed', dom=self) + return ret + + def setVcpus(self, nvcpus): + """Dynamically change the number of virtual CPUs used by the + domain. Note that this call may fail if the underlying + virtualization hypervisor does not support it or if growing + the number is arbitrary limited. This function requires + privileged access to the hypervisor. """ + ret = libvirtmod.virDomainSetVcpus(self._o, nvcpus) + if ret == -1: raise libvirtError ('virDomainSetVcpus() failed', dom=self) + return ret + + def shutdown(self): + """Shutdown a domain, the domain object is still usable there + after but the domain OS is being stopped. Note that the + guest OS may ignore the request. TODO: should we add an + option for reboot, knowing it may not be doable in the + general case ? """ + ret = libvirtmod.virDomainShutdown(self._o) + if ret == -1: raise libvirtError ('virDomainShutdown() failed', dom=self) + return ret + + def suspend(self): + """Suspends an active domain, the process is frozen without + further access to CPU resources and I/O but the memory used + by the domain at the hypervisor level will stay allocated. + Use virDomainResume() to reactivate the domain. This + function may requires privileged access. """ + ret = libvirtmod.virDomainSuspend(self._o) + if ret == -1: raise libvirtError ('virDomainSuspend() failed', dom=self) + return ret + + def undefine(self): + """Undefine a domain but does not stop it if it is running """ + ret = libvirtmod.virDomainUndefine(self._o) + if ret == -1: raise libvirtError ('virDomainUndefine() failed', dom=self) + return ret + + # + # virDomain functions from module python + # + + def UUID(self): + """Extract the UUID unique Identifier of a domain. """ + ret = libvirtmod.virDomainGetUUID(self._o) + if ret is None: raise libvirtError ('virDomainGetUUID() failed', dom=self) + return ret + + def UUIDString(self): + """Fetch globally unique ID of the domain as a string. """ + ret = libvirtmod.virDomainGetUUIDString(self._o) + if ret is None: raise libvirtError ('virDomainGetUUIDString() failed', dom=self) + return ret + + def autostart(self): + """Extract the autostart flag for a domain """ + ret = libvirtmod.virDomainGetAutostart(self._o) + if ret == -1: raise libvirtError ('virDomainGetAutostart() failed', dom=self) + return ret + + def blockStats(self, path): + """Extracts block device statistics for a domain """ + ret = libvirtmod.virDomainBlockStats(self._o, path) + return ret + + def info(self): + """Extract information about a domain. Note that if the + connection used to get the domain is limited only a partial + set of the information can be extracted. """ + ret = libvirtmod.virDomainGetInfo(self._o) + if ret is None: raise libvirtError ('virDomainGetInfo() failed', dom=self) + return ret + + def interfaceStats(self, path): + """Extracts interface device statistics for a domain """ + ret = libvirtmod.virDomainInterfaceStats(self._o, path) + return ret + + def pinVcpu(self, vcpu, cpumap): + """Dynamically change the real CPUs which can be allocated to + a virtual CPU. This function requires privileged access to + the hypervisor. """ + ret = libvirtmod.virDomainPinVcpu(self._o, vcpu, cpumap) + if ret == -1: raise libvirtError ('virDomainPinVcpu() failed', dom=self) + return ret + + def schedulerParameters(self): + """Get the scheduler parameters, the @params array will be + filled with the values. """ + ret = libvirtmod.virDomainGetSchedulerParameters(self._o) + if ret == -1: raise libvirtError ('virDomainGetSchedulerParameters() failed', dom=self) + return ret + + def schedulerType(self): + """Get the scheduler type. """ + ret = libvirtmod.virDomainGetSchedulerType(self._o) + if ret is None: raise libvirtError ('virDomainGetSchedulerType() failed', dom=self) + return ret + + def setSchedulerParameters(self, params): + """Change the scheduler parameters """ + ret = libvirtmod.virDomainSetSchedulerParameters(self._o, params) + if ret == -1: raise libvirtError ('virDomainSetSchedulerParameters() failed', dom=self) + return ret + + def vcpus(self): + """Extract information about virtual CPUs of domain, store it + in info array and also in cpumaps if this pointer is'nt + None. """ + ret = libvirtmod.virDomainGetVcpus(self._o) + if ret == -1: raise libvirtError ('virDomainGetVcpus() failed', dom=self) + return ret + +class virNetwork: + def __init__(self, conn, _obj=None): + self._conn = conn + if _obj != None:self._o = _obj;return + self._o = None + + def __del__(self): + if self._o != None: + libvirtmod.virNetworkFree(self._o) + self._o = None + + # + # virNetwork functions from module libvirt + # + + def XMLDesc(self, flags): + """Provide an XML description of the network. The description + may be reused later to relaunch the network with + virNetworkCreateXML(). """ + ret = libvirtmod.virNetworkGetXMLDesc(self._o, flags) + if ret is None: raise libvirtError ('virNetworkGetXMLDesc() failed', net=self) + return ret + + def bridgeName(self): + """Provides a bridge interface name to which a domain may + connect a network interface in order to join the network. """ + ret = libvirtmod.virNetworkGetBridgeName(self._o) + if ret is None: raise libvirtError ('virNetworkGetBridgeName() failed', net=self) + return ret + + def connect(self): + """Provides the connection pointer associated with a network. + The reference counter on the connection is not increased by + this call. WARNING: When writing libvirt bindings in other + languages, do not use this function. Instead, store the + connection and the network object together. """ + ret = libvirtmod.virNetworkGetConnect(self._o) + if ret is None:raise libvirtError('virNetworkGetConnect() failed', net=self) + __tmp = virConnect(_obj=ret) + return __tmp + + def create(self): + """Create and start a defined network. If the call succeed the + network moves from the defined to the running networks + pools. """ + ret = libvirtmod.virNetworkCreate(self._o) + if ret == -1: raise libvirtError ('virNetworkCreate() failed', net=self) + return ret + + def destroy(self): + """Destroy the network object. The running instance is + shutdown if not down already and all resources used by it + are given back to the hypervisor. This does not free the + associated virNetworkPtr object. This function may require + privileged access """ + ret = libvirtmod.virNetworkDestroy(self._o) + if ret == -1: raise libvirtError ('virNetworkDestroy() failed', net=self) + return ret + + def name(self): + """Get the public name for that network """ + ret = libvirtmod.virNetworkGetName(self._o) + return ret + + def ref(self): + """Increment the reference count on the network. For each + additional call to this method, there shall be a + corresponding call to virNetworkFree to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a network would increment the reference count. """ + ret = libvirtmod.virNetworkRef(self._o) + if ret == -1: raise libvirtError ('virNetworkRef() failed', net=self) + return ret + + def setAutostart(self, autostart): + """Configure the network to be automatically started when the + host machine boots. """ + ret = libvirtmod.virNetworkSetAutostart(self._o, autostart) + if ret == -1: raise libvirtError ('virNetworkSetAutostart() failed', net=self) + return ret + + def undefine(self): + """Undefine a network but does not stop it if it is running """ + ret = libvirtmod.virNetworkUndefine(self._o) + if ret == -1: raise libvirtError ('virNetworkUndefine() failed', net=self) + return ret + + # + # virNetwork functions from module python + # + + def UUID(self): + """Extract the UUID unique Identifier of a network. """ + ret = libvirtmod.virNetworkGetUUID(self._o) + if ret is None: raise libvirtError ('virNetworkGetUUID() failed', net=self) + return ret + + def UUIDString(self): + """Fetch globally unique ID of the network as a string. """ + ret = libvirtmod.virNetworkGetUUIDString(self._o) + if ret is None: raise libvirtError ('virNetworkGetUUIDString() failed', net=self) + return ret + + def autostart(self): + """Extract the autostart flag for a network. """ + ret = libvirtmod.virNetworkGetAutostart(self._o) + if ret == -1: raise libvirtError ('virNetworkGetAutostart() failed', net=self) + return ret + + def networkLookupByUUID(self, uuid): + """Try to lookup a network on the given hypervisor based on + its UUID. """ + ret = libvirtmod.virNetworkLookupByUUID(self._o, uuid) + if ret is None:raise libvirtError('virNetworkLookupByUUID() failed', net=self) + __tmp = virNetwork(self, _obj=ret) + return __tmp + +class virStoragePool: + def __init__(self, conn, _obj=None): + self._conn = conn + if not isinstance(conn, virConnect): + self._conn = conn._conn + if _obj != None:self._o = _obj;return + self._o = None + + def __del__(self): + if self._o != None: + libvirtmod.virStoragePoolFree(self._o) + self._o = None + + # + # virStoragePool functions from module libvirt + # + + def XMLDesc(self, flags): + """Fetch an XML document describing all aspects of the storage + pool. This is suitable for later feeding back into the + virStoragePoolCreateXML method. """ + ret = libvirtmod.virStoragePoolGetXMLDesc(self._o, flags) + if ret is None: raise libvirtError ('virStoragePoolGetXMLDesc() failed', pool=self) + return ret + + def build(self, flags): + """Build the underlying storage pool """ + ret = libvirtmod.virStoragePoolBuild(self._o, flags) + if ret == -1: raise libvirtError ('virStoragePoolBuild() failed', pool=self) + return ret + + def connect(self): + """Provides the connection pointer associated with a storage + pool. The reference counter on the connection is not + increased by this call. WARNING: When writing libvirt + bindings in other languages, do not use this function. + Instead, store the connection and the pool object together. """ + ret = libvirtmod.virStoragePoolGetConnect(self._o) + if ret is None:raise libvirtError('virStoragePoolGetConnect() failed', pool=self) + __tmp = virConnect(_obj=ret) + return __tmp + + def create(self, flags): + """Starts an inactive storage pool """ + ret = libvirtmod.virStoragePoolCreate(self._o, flags) + if ret == -1: raise libvirtError ('virStoragePoolCreate() failed', pool=self) + return ret + + def createXML(self, xmldesc, flags): + """Create a storage volume within a pool based on an XML + description. Not all pools support creation of volumes """ + ret = libvirtmod.virStorageVolCreateXML(self._o, xmldesc, flags) + if ret is None:raise libvirtError('virStorageVolCreateXML() failed', pool=self) + __tmp = virStorageVol(self, _obj=ret) + return __tmp + + def delete(self, flags): + """Delete the underlying pool resources. This is a + non-recoverable operation. The virStoragePoolPtr object + itself is not free'd. """ + ret = libvirtmod.virStoragePoolDelete(self._o, flags) + if ret == -1: raise libvirtError ('virStoragePoolDelete() failed', pool=self) + return ret + + def destroy(self): + """Destroy an active storage pool. This will deactivate the + pool on the host, but keep any persistent config associated + with it. If it has a persistent config it can later be + restarted with virStoragePoolCreate(). This does not free + the associated virStoragePoolPtr object. """ + ret = libvirtmod.virStoragePoolDestroy(self._o) + if ret == -1: raise libvirtError ('virStoragePoolDestroy() failed', pool=self) + return ret + + def name(self): + """Fetch the locally unique name of the storage pool """ + ret = libvirtmod.virStoragePoolGetName(self._o) + return ret + + def numOfVolumes(self): + """Fetch the number of storage volumes within a pool """ + ret = libvirtmod.virStoragePoolNumOfVolumes(self._o) + if ret == -1: raise libvirtError ('virStoragePoolNumOfVolumes() failed', pool=self) + return ret + + def ref(self): + """Increment the reference count on the pool. For each + additional call to this method, there shall be a + corresponding call to virStoragePoolFree to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a pool would increment the reference count. """ + ret = libvirtmod.virStoragePoolRef(self._o) + if ret == -1: raise libvirtError ('virStoragePoolRef() failed', pool=self) + return ret + + def refresh(self, flags): + """Request that the pool refresh its list of volumes. This may + involve communicating with a remote server, and/or + initializing new devices at the OS layer """ + ret = libvirtmod.virStoragePoolRefresh(self._o, flags) + if ret == -1: raise libvirtError ('virStoragePoolRefresh() failed', pool=self) + return ret + + def setAutostart(self, autostart): + """Sets the autostart flag """ + ret = libvirtmod.virStoragePoolSetAutostart(self._o, autostart) + if ret == -1: raise libvirtError ('virStoragePoolSetAutostart() failed', pool=self) + return ret + + def storageVolLookupByName(self, name): + """Fetch a pointer to a storage volume based on its name + within a pool """ + ret = libvirtmod.virStorageVolLookupByName(self._o, name) + if ret is None:raise libvirtError('virStorageVolLookupByName() failed', pool=self) + __tmp = virStorageVol(self, _obj=ret) + return __tmp + + def undefine(self): + """Undefine an inactive storage pool """ + ret = libvirtmod.virStoragePoolUndefine(self._o) + if ret == -1: raise libvirtError ('virStoragePoolUndefine() failed', pool=self) + return ret + + # + # virStoragePool functions from module python + # + + def UUID(self): + """Extract the UUID unique Identifier of a storage pool. """ + ret = libvirtmod.virStoragePoolGetUUID(self._o) + if ret is None: raise libvirtError ('virStoragePoolGetUUID() failed', pool=self) + return ret + + def UUIDString(self): + """Fetch globally unique ID of the storage pool as a string. """ + ret = libvirtmod.virStoragePoolGetUUIDString(self._o) + if ret is None: raise libvirtError ('virStoragePoolGetUUIDString() failed', pool=self) + return ret + + def autostart(self): + """Extract the autostart flag for a storage pool """ + ret = libvirtmod.virStoragePoolGetAutostart(self._o) + if ret == -1: raise libvirtError ('virStoragePoolGetAutostart() failed', pool=self) + return ret + + def info(self): + """Extract information about a storage pool. Note that if the + connection used to get the domain is limited only a partial + set of the information can be extracted. """ + ret = libvirtmod.virStoragePoolGetInfo(self._o) + if ret is None: raise libvirtError ('virStoragePoolGetInfo() failed', pool=self) + return ret + + def listVolumes(self): + """list the storage volumes, stores the pointers to the names + in @names """ + ret = libvirtmod.virStoragePoolListVolumes(self._o) + if ret is None: raise libvirtError ('virStoragePoolListVolumes() failed', pool=self) + return ret + +class virStorageVol: + def __init__(self, conn, _obj=None): + self._conn = conn + if not isinstance(conn, virConnect): + self._conn = conn._conn + if _obj != None:self._o = _obj;return + self._o = None + + def __del__(self): + if self._o != None: + libvirtmod.virStorageVolFree(self._o) + self._o = None + + # + # virStorageVol functions from module libvirt + # + + def XMLDesc(self, flags): + """Fetch an XML document describing all aspects of the storage + volume """ + ret = libvirtmod.virStorageVolGetXMLDesc(self._o, flags) + if ret is None: raise libvirtError ('virStorageVolGetXMLDesc() failed', vol=self) + return ret + + def connect(self): + """Provides the connection pointer associated with a storage + volume. The reference counter on the connection is not + increased by this call. WARNING: When writing libvirt + bindings in other languages, do not use this function. + Instead, store the connection and the volume object + together. """ + ret = libvirtmod.virStorageVolGetConnect(self._o) + if ret is None:raise libvirtError('virStorageVolGetConnect() failed', vol=self) + __tmp = virConnect(_obj=ret) + return __tmp + + def delete(self, flags): + """Delete the storage volume from the pool """ + ret = libvirtmod.virStorageVolDelete(self._o, flags) + if ret == -1: raise libvirtError ('virStorageVolDelete() failed', vol=self) + return ret + + def key(self): + """Fetch the storage volume key. This is globally unique, so + the same volume will have the same key no matter what host + it is accessed from """ + ret = libvirtmod.virStorageVolGetKey(self._o) + if ret is None: raise libvirtError ('virStorageVolGetKey() failed', vol=self) + return ret + + def name(self): + """Fetch the storage volume name. This is unique within the + scope of a pool """ + ret = libvirtmod.virStorageVolGetName(self._o) + return ret + + def path(self): + """Fetch the storage volume path. Depending on the pool + configuration this is either persistent across hosts, or + dynamically assigned at pool startup. Consult pool + documentation for information on getting the persistent + naming """ + ret = libvirtmod.virStorageVolGetPath(self._o) + if ret is None: raise libvirtError ('virStorageVolGetPath() failed', vol=self) + return ret + + def ref(self): + """Increment the reference count on the vol. For each + additional call to this method, there shall be a + corresponding call to virStorageVolFree to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a vol would increment the reference count. """ + ret = libvirtmod.virStorageVolRef(self._o) + if ret == -1: raise libvirtError ('virStorageVolRef() failed', vol=self) + return ret + + def storagePoolLookupByVolume(self): + """Fetch a storage pool which contains a particular volume """ + ret = libvirtmod.virStoragePoolLookupByVolume(self._o) + if ret is None:raise libvirtError('virStoragePoolLookupByVolume() failed', vol=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + # + # virStorageVol functions from module python + # + + def info(self): + """Extract information about a storage pool. Note that if the + connection used to get the domain is limited only a partial + set of the information can be extracted. """ + ret = libvirtmod.virStorageVolGetInfo(self._o) + if ret is None: raise libvirtError ('virStorageVolGetInfo() failed', vol=self) + return ret + +class virConnect: + def __init__(self, _obj=None): + if _obj != None:self._o = _obj;return + self._o = None + + # + # virConnect functions from module libvirt + # + + def close(self): + """This function closes the connection to the Hypervisor. This + should not be called if further interaction with the + Hypervisor are needed especially if there is running domain + which need further monitoring by the application. """ + ret = libvirtmod.virConnectClose(self._o) + self._o = None + if ret == -1: raise libvirtError ('virConnectClose() failed', conn=self) + return ret + + def createLinux(self, xmlDesc, flags): + """Deprecated after 0.4.6. Renamed to virDomainCreateXML() + providing identical functionality. This existing name will + left indefinitely for API compatability. """ + ret = libvirtmod.virDomainCreateLinux(self._o, xmlDesc, flags) + if ret is None:raise libvirtError('virDomainCreateLinux() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def createXML(self, xmlDesc, flags): + """Create a new device on the VM host machine, for example, + virtual HBAs created using vport_create. """ + ret = libvirtmod.virNodeDeviceCreateXML(self._o, xmlDesc, flags) + if ret is None:raise libvirtError('virNodeDeviceCreateXML() failed', conn=self) + __tmp = virNodeDevice(self, _obj=ret) + return __tmp + + def createXML(self, xmlDesc, flags): + """Launch a new guest domain, based on an XML description + similar to the one returned by virDomainGetXMLDesc() This + function may requires privileged access to the hypervisor. + The domain is not persistent, so its definition will + disappear when it is destroyed, or if the host is restarted + (see virDomainDefineXML() to define persistent domains). """ + ret = libvirtmod.virDomainCreateXML(self._o, xmlDesc, flags) + if ret is None:raise libvirtError('virDomainCreateXML() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def defineXML(self, xml): + """Define a domain, but does not start it. This definition is + persistent, until explicitly undefined with + virDomainUndefine(). A previous definition for this domain + would be overriden if it already exists. """ + ret = libvirtmod.virDomainDefineXML(self._o, xml) + if ret is None:raise libvirtError('virDomainDefineXML() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def findStoragePoolSources(self, type, srcSpec, flags): + """Talks to a storage backend and attempts to auto-discover + the set of available storage pool sources. e.g. For iSCSI + this would be a set of iSCSI targets. For NFS this would be + a list of exported paths. The srcSpec (optional for some + storage pool types, e.g. local ones) is an instance of the + storage pool's source element specifying where to look for + the pools. srcSpec is not required for some types (e.g., + those querying local storage resources only) """ + ret = libvirtmod.virConnectFindStoragePoolSources(self._o, type, srcSpec, flags) + if ret is None: raise libvirtError ('virConnectFindStoragePoolSources() failed', conn=self) + return ret + + def getCapabilities(self): + """Provides capabilities of the hypervisor / driver. """ + ret = libvirtmod.virConnectGetCapabilities(self._o) + if ret is None: raise libvirtError ('virConnectGetCapabilities() failed', conn=self) + return ret + + def getFreeMemory(self): + """provides the free memory available on the Node Note: most + libvirt APIs provide memory sizes in kilobytes, but in this + function the returned value is in bytes. Divide by 1024 as + necessary. """ + ret = libvirtmod.virNodeGetFreeMemory(self._o) + return ret + + def getHostname(self): + """This returns the system hostname on which the hypervisor is + running (the result of the gethostname(2) system call). If + we are connected to a remote system, then this returns the + hostname of the remote system. """ + ret = libvirtmod.virConnectGetHostname(self._o) + if ret is None: raise libvirtError ('virConnectGetHostname() failed', conn=self) + return ret + + def getMaxVcpus(self, type): + """Provides the maximum number of virtual CPUs supported for a + guest VM of a specific type. The 'type' parameter here + corresponds to the 'type' attribute in the <domain> element + of the XML. """ + ret = libvirtmod.virConnectGetMaxVcpus(self._o, type) + if ret == -1: raise libvirtError ('virConnectGetMaxVcpus() failed', conn=self) + return ret + + def getType(self): + """Get the name of the Hypervisor software used. """ + ret = libvirtmod.virConnectGetType(self._o) + if ret is None: raise libvirtError ('virConnectGetType() failed', conn=self) + return ret + + def getURI(self): + """This returns the URI (name) of the hypervisor connection. + Normally this is the same as or similar to the string + passed to the virConnectOpen/virConnectOpenReadOnly call, + but the driver may make the URI canonical. If name == None + was passed to virConnectOpen, then the driver will return a + non-None URI which can be used to connect to the same + hypervisor later. """ + ret = libvirtmod.virConnectGetURI(self._o) + if ret is None: raise libvirtError ('virConnectGetURI() failed', conn=self) + return ret + + def lookupByID(self, id): + """Try to find a domain based on the hypervisor ID number Note + that this won't work for inactive domains which have an ID + of -1, in that case a lookup based on the Name or UUId need + to be done instead. """ + ret = libvirtmod.virDomainLookupByID(self._o, id) + if ret is None:raise libvirtError('virDomainLookupByID() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def lookupByName(self, name): + """Try to lookup a domain on the given hypervisor based on its + name. """ + ret = libvirtmod.virDomainLookupByName(self._o, name) + if ret is None:raise libvirtError('virDomainLookupByName() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def lookupByUUIDString(self, uuidstr): + """Try to lookup a domain on the given hypervisor based on its + UUID. """ + ret = libvirtmod.virDomainLookupByUUIDString(self._o, uuidstr) + if ret is None:raise libvirtError('virDomainLookupByUUIDString() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def migrate(self, domain, flags, dname, uri, bandwidth): + """Migrate the domain object from its current host to the + destination host given by dconn (a connection to the + destination host). Flags may be one of more of the + following: VIR_MIGRATE_LIVE Attempt a live migration. If + a hypervisor supports renaming domains during migration, + then you may set the dname parameter to the new name + (otherwise it keeps the same name). If this is not + supported by the hypervisor, dname must be None or else you + will get an error. Since typically the two hypervisors + connect directly to each other in order to perform the + migration, you may need to specify a path from the source + to the destination. This is the purpose of the uri + parameter. If uri is None, then libvirt will try to find + the best method. Uri may specify the hostname or IP + address of the destination host as seen from the source. + Or uri may be a URI giving transport, hostname, user, port, + etc. in the usual form. Refer to driver documentation for + the particular URIs supported. The maximum bandwidth (in + Mbps) that will be used to do migration can be specified + with the bandwidth parameter. If set to 0, libvirt will + choose a suitable default. Some hypervisors do not support + this feature and will return an error if bandwidth is not + 0. To see which features are supported by the current + hypervisor, see virConnectGetCapabilities, + /capabilities/host/migration_features. There are many + limitations on migration imposed by the underlying + technology - for example it may not be possible to migrate + between different processors even with the same + architecture, or between different types of hypervisor. """ + if domain is None: domain__o = None + else: domain__o = domain._o + ret = libvirtmod.virDomainMigrate(domain__o, self._o, flags, dname, uri, bandwidth) + if ret is None:raise libvirtError('virDomainMigrate() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + def networkCreateXML(self, xmlDesc): + """Create and start a new virtual network, based on an XML + description similar to the one returned by + virNetworkGetXMLDesc() """ + ret = libvirtmod.virNetworkCreateXML(self._o, xmlDesc) + if ret is None:raise libvirtError('virNetworkCreateXML() failed', conn=self) + __tmp = virNetwork(self, _obj=ret) + return __tmp + + def networkDefineXML(self, xml): + """Define a network, but does not create it """ + ret = libvirtmod.virNetworkDefineXML(self._o, xml) + if ret is None:raise libvirtError('virNetworkDefineXML() failed', conn=self) + __tmp = virNetwork(self, _obj=ret) + return __tmp + + def networkLookupByName(self, name): + """Try to lookup a network on the given hypervisor based on + its name. """ + ret = libvirtmod.virNetworkLookupByName(self._o, name) + if ret is None:raise libvirtError('virNetworkLookupByName() failed', conn=self) + __tmp = virNetwork(self, _obj=ret) + return __tmp + + def networkLookupByUUIDString(self, uuidstr): + """Try to lookup a network on the given hypervisor based on + its UUID. """ + ret = libvirtmod.virNetworkLookupByUUIDString(self._o, uuidstr) + if ret is None:raise libvirtError('virNetworkLookupByUUIDString() failed', conn=self) + __tmp = virNetwork(self, _obj=ret) + return __tmp + + def nodeDeviceLookupByName(self, name): + """Lookup a node device by its name. """ + ret = libvirtmod.virNodeDeviceLookupByName(self._o, name) + if ret is None:raise libvirtError('virNodeDeviceLookupByName() failed', conn=self) + __tmp = virNodeDevice(self, _obj=ret) + return __tmp + + def numOfDefinedDomains(self): + """Provides the number of defined but inactive domains. """ + ret = libvirtmod.virConnectNumOfDefinedDomains(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfDefinedDomains() failed', conn=self) + return ret + + def numOfDefinedNetworks(self): + """Provides the number of inactive networks. """ + ret = libvirtmod.virConnectNumOfDefinedNetworks(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfDefinedNetworks() failed', conn=self) + return ret + + def numOfDefinedStoragePools(self): + """Provides the number of inactive storage pools """ + ret = libvirtmod.virConnectNumOfDefinedStoragePools(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfDefinedStoragePools() failed', conn=self) + return ret + + def numOfDevices(self, cap, flags): + """Provides the number of node devices. If the optional 'cap' + argument is non-None, then the count will be restricted to + devices with the specified capability """ + ret = libvirtmod.virNodeNumOfDevices(self._o, cap, flags) + if ret == -1: raise libvirtError ('virNodeNumOfDevices() failed', conn=self) + return ret + + def numOfDomains(self): + """Provides the number of active domains. """ + ret = libvirtmod.virConnectNumOfDomains(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfDomains() failed', conn=self) + return ret + + def numOfNetworks(self): + """Provides the number of active networks. """ + ret = libvirtmod.virConnectNumOfNetworks(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfNetworks() failed', conn=self) + return ret + + def numOfStoragePools(self): + """Provides the number of active storage pools """ + ret = libvirtmod.virConnectNumOfStoragePools(self._o) + if ret == -1: raise libvirtError ('virConnectNumOfStoragePools() failed', conn=self) + return ret + + def ref(self): + """Increment the reference count on the connection. For each + additional call to this method, there shall be a + corresponding call to virConnectClose to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a connection would increment the reference + count. """ + ret = libvirtmod.virConnectRef(self._o) + if ret == -1: raise libvirtError ('virConnectRef() failed', conn=self) + return ret + + def restore(self, frm): + """This method will restore a domain saved to disk by + virDomainSave(). """ + ret = libvirtmod.virDomainRestore(self._o, frm) + if ret == -1: raise libvirtError ('virDomainRestore() failed', conn=self) + return ret + + def storagePoolCreateXML(self, xmlDesc, flags): + """Create a new storage based on its XML description. The pool + is not persistent, so its definition will disappear when it + is destroyed, or if the host is restarted """ + ret = libvirtmod.virStoragePoolCreateXML(self._o, xmlDesc, flags) + if ret is None:raise libvirtError('virStoragePoolCreateXML() failed', conn=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + def storagePoolDefineXML(self, xml, flags): + """Define a new inactive storage pool based on its XML + description. The pool is persistent, until explicitly + undefined. """ + ret = libvirtmod.virStoragePoolDefineXML(self._o, xml, flags) + if ret is None:raise libvirtError('virStoragePoolDefineXML() failed', conn=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + def storagePoolLookupByName(self, name): + """Fetch a storage pool based on its unique name """ + ret = libvirtmod.virStoragePoolLookupByName(self._o, name) + if ret is None:raise libvirtError('virStoragePoolLookupByName() failed', conn=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + def storagePoolLookupByUUID(self, uuid): + """Fetch a storage pool based on its globally unique id """ + ret = libvirtmod.virStoragePoolLookupByUUID(self._o, uuid) + if ret is None:raise libvirtError('virStoragePoolLookupByUUID() failed', conn=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + def storagePoolLookupByUUIDString(self, uuidstr): + """Fetch a storage pool based on its globally unique id """ + ret = libvirtmod.virStoragePoolLookupByUUIDString(self._o, uuidstr) + if ret is None:raise libvirtError('virStoragePoolLookupByUUIDString() failed', conn=self) + __tmp = virStoragePool(self, _obj=ret) + return __tmp + + def storageVolLookupByKey(self, key): + """Fetch a pointer to a storage volume based on its globally + unique key """ + ret = libvirtmod.virStorageVolLookupByKey(self._o, key) + if ret is None:raise libvirtError('virStorageVolLookupByKey() failed', conn=self) + __tmp = virStorageVol(self, _obj=ret) + return __tmp + + def storageVolLookupByPath(self, path): + """Fetch a pointer to a storage volume based on its locally + (host) unique path """ + ret = libvirtmod.virStorageVolLookupByPath(self._o, path) + if ret is None:raise libvirtError('virStorageVolLookupByPath() failed', conn=self) + __tmp = virStorageVol(self, _obj=ret) + return __tmp + + # + # virConnect functions from module python + # + + def getCellsFreeMemory(self, startCell, maxCells): + """Returns the available memory for a list of cells """ + ret = libvirtmod.virNodeGetCellsFreeMemory(self._o, startCell, maxCells) + if ret is None: raise libvirtError ('virNodeGetCellsFreeMemory() failed', conn=self) + return ret + + def getInfo(self): + """Extract hardware information about the Node. """ + ret = libvirtmod.virNodeGetInfo(self._o) + if ret is None: raise libvirtError ('virNodeGetInfo() failed', conn=self) + return ret + + def listDefinedDomains(self): + """list the defined domains, stores the pointers to the names + in @names """ + ret = libvirtmod.virConnectListDefinedDomains(self._o) + if ret is None: raise libvirtError ('virConnectListDefinedDomains() failed', conn=self) + return ret + + def listDefinedNetworks(self): + """list the defined networks, stores the pointers to the names + in @names """ + ret = libvirtmod.virConnectListDefinedNetworks(self._o) + if ret is None: raise libvirtError ('virConnectListDefinedNetworks() failed', conn=self) + return ret + + def listDefinedStoragePools(self): + """list the defined storage pool, stores the pointers to the + names in @names """ + ret = libvirtmod.virConnectListDefinedStoragePools(self._o) + if ret is None: raise libvirtError ('virConnectListDefinedStoragePools() failed', conn=self) + return ret + + def listDevices(self, cap, flags): + """list the node devices """ + ret = libvirtmod.virNodeListDevices(self._o, cap, flags) + if ret is None: raise libvirtError ('virNodeListDevices() failed', conn=self) + return ret + + def listDomainsID(self): + """Returns the list of the ID of the domains on the hypervisor """ + ret = libvirtmod.virConnectListDomainsID(self._o) + if ret is None: raise libvirtError ('virConnectListDomainsID() failed', conn=self) + return ret + + def listNetworks(self): + """list the networks, stores the pointers to the names in + @names """ + ret = libvirtmod.virConnectListNetworks(self._o) + if ret is None: raise libvirtError ('virConnectListNetworks() failed', conn=self) + return ret + + def listStoragePools(self): + """list the storage pools, stores the pointers to the names in + @names """ + ret = libvirtmod.virConnectListStoragePools(self._o) + if ret is None: raise libvirtError ('virConnectListStoragePools() failed', conn=self) + return ret + + def lookupByUUID(self, uuid): + """Try to lookup a domain on the given hypervisor based on its + UUID. """ + ret = libvirtmod.virDomainLookupByUUID(self._o, uuid) + if ret is None:raise libvirtError('virDomainLookupByUUID() failed', conn=self) + __tmp = virDomain(self,_obj=ret) + return __tmp + + # + # virConnect functions from module virterror + # + + def virConnGetLastError(self): + """Provide a pointer to the last error caught on that + connection This method is not protected against access + from multiple threads. In a multi-threaded application, + always use the global virGetLastError() API which is backed + by thread local storage. If the connection object was + discovered to be invalid by an API call, then the error + will be reported against the global error object. Since + 0.6.0, all errors reported in the per-connection object are + also duplicated in the global error object. As such an + application can always use virGetLastError(). This method + remains for backwards compatability. """ + ret = libvirtmod.virConnGetLastError(self._o) + return ret + + def virConnResetLastError(self): + """The error object is kept in thread local storage, so + separate threads can safely access this concurrently. + Reset the last error caught on that connection """ + libvirtmod.virConnResetLastError(self._o) + + # + # virConnect methods from virConnect.py (hand coded) + # + def __del__(self): + try: + for cb,opaque in self.domainEventCallbacks.items(): + del self.domainEventCallbacks[cb] + self.domainEventCallbacks = None + 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: + 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) + + def dispatchDomainEventCallbacks(self, dom, event, detail): + """Dispatches events to python user domain event callbacks + """ + try: + for cb,opaque in self.domainEventCallbacks.items(): + cb(self,dom,event,detail,opaque) + return 0 + except AttributeError: + pass +class virNodeDevice: + def __init__(self, conn, _obj=None): + self._conn = conn + if _obj != None:self._o = _obj;return + self._o = None + + def __del__(self): + if self._o != None: + libvirtmod.virNodeDeviceFree(self._o) + self._o = None + + # + # virNodeDevice functions from module libvirt + # + + def XMLDesc(self, flags): + """Fetch an XML document describing all aspects of the device. """ + ret = libvirtmod.virNodeDeviceGetXMLDesc(self._o, flags) + if ret is None: raise libvirtError ('virNodeDeviceGetXMLDesc() failed') + return ret + + def destroy(self): + """Destroy the device object. The virtual device is removed + from the host operating system. This function may require + privileged access """ + ret = libvirtmod.virNodeDeviceDestroy(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceDestroy() failed') + return ret + + def dettach(self): + """Dettach the node device from the node itself so that it may + be assigned to a guest domain. Depending on the + hypervisor, this may involve operations such as unbinding + any device drivers from the device, binding the device to a + dummy device driver and resetting the device. If the + device is currently in use by the node, this method may + fail. Once the device is not assigned to any guest, it may + be re-attached to the node using the + virNodeDeviceReattach() method. """ + ret = libvirtmod.virNodeDeviceDettach(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceDettach() failed') + return ret + + def name(self): + """Just return the device name """ + ret = libvirtmod.virNodeDeviceGetName(self._o) + return ret + + def numOfCaps(self): + """Accessor for the number of capabilities supported by the + device. """ + ret = libvirtmod.virNodeDeviceNumOfCaps(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceNumOfCaps() failed') + return ret + + def parent(self): + """Accessor for the parent of the device """ + ret = libvirtmod.virNodeDeviceGetParent(self._o) + return ret + + def reAttach(self): + """Re-attach a previously dettached node device to the node so + that it may be used by the node again. Depending on the + hypervisor, this may involve operations such as resetting + the device, unbinding it from a dummy device driver and + binding it to its appropriate driver. If the device is + currently in use by a guest, this method may fail. """ + ret = libvirtmod.virNodeDeviceReAttach(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceReAttach() failed') + return ret + + def ref(self): + """Increment the reference count on the dev. For each + additional call to this method, there shall be a + corresponding call to virNodeDeviceFree to release the + reference count, once the caller no longer needs the + reference to this object. This method is typically useful + for applications where multiple threads are using a + connection, and it is required that the connection remain + open until all threads have finished using it. ie, each new + thread using a dev would increment the reference count. """ + ret = libvirtmod.virNodeDeviceRef(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceRef() failed') + return ret + + def reset(self): + """Reset a previously dettached node device to the node before + or after assigning it to a guest. The exact reset + semantics depends on the hypervisor and device type but, + for example, KVM will attempt to reset PCI devices with a + Function Level Reset, Secondary Bus Reset or a Power + Management D-State reset. If the reset will affect other + devices which are currently in use, this function may fail. """ + ret = libvirtmod.virNodeDeviceReset(self._o) + if ret == -1: raise libvirtError ('virNodeDeviceReset() failed') + return ret + + # + # virNodeDevice functions from module python + # + + def listCaps(self): + """list the node device's capabilities """ + ret = libvirtmod.virNodeDeviceListCaps(self._o) + if ret is None: raise libvirtError ('virNodeDeviceListCaps() failed') + return ret + +# virDomainMigrateFlags +VIR_MIGRATE_LIVE = 1 + +# virErrorLevel +VIR_ERR_NONE = 0 +VIR_ERR_WARNING = 1 +VIR_ERR_ERROR = 2 + +# virDomainEventResumedDetailType +VIR_DOMAIN_EVENT_RESUMED_UNPAUSED = 0 +VIR_DOMAIN_EVENT_RESUMED_MIGRATED = 1 + +# virErrorDomain +VIR_FROM_NONE = 0 +VIR_FROM_XEN = 1 +VIR_FROM_XEND = 2 +VIR_FROM_XENSTORE = 3 +VIR_FROM_SEXPR = 4 +VIR_FROM_XML = 5 +VIR_FROM_DOM = 6 +VIR_FROM_RPC = 7 +VIR_FROM_PROXY = 8 +VIR_FROM_CONF = 9 +VIR_FROM_QEMU = 10 +VIR_FROM_NET = 11 +VIR_FROM_TEST = 12 +VIR_FROM_REMOTE = 13 +VIR_FROM_OPENVZ = 14 +VIR_FROM_XENXM = 15 +VIR_FROM_STATS_LINUX = 16 +VIR_FROM_LXC = 17 +VIR_FROM_STORAGE = 18 +VIR_FROM_NETWORK = 19 +VIR_FROM_DOMAIN = 20 +VIR_FROM_UML = 21 +VIR_FROM_NODEDEV = 22 +VIR_FROM_XEN_INOTIFY = 23 +VIR_FROM_SECURITY = 24 +VIR_FROM_VBOX = 25 + +# virDomainEventStartedDetailType +VIR_DOMAIN_EVENT_STARTED_BOOTED = 0 +VIR_DOMAIN_EVENT_STARTED_MIGRATED = 1 +VIR_DOMAIN_EVENT_STARTED_RESTORED = 2 + +# virEventHandleType +VIR_EVENT_HANDLE_READABLE = 1 +VIR_EVENT_HANDLE_WRITABLE = 2 +VIR_EVENT_HANDLE_ERROR = 4 +VIR_EVENT_HANDLE_HANGUP = 8 + +# virDomainEventType +VIR_DOMAIN_EVENT_DEFINED = 0 +VIR_DOMAIN_EVENT_UNDEFINED = 1 +VIR_DOMAIN_EVENT_STARTED = 2 +VIR_DOMAIN_EVENT_SUSPENDED = 3 +VIR_DOMAIN_EVENT_RESUMED = 4 +VIR_DOMAIN_EVENT_STOPPED = 5 + +# virDomainState +VIR_DOMAIN_NOSTATE = 0 +VIR_DOMAIN_RUNNING = 1 +VIR_DOMAIN_BLOCKED = 2 +VIR_DOMAIN_PAUSED = 3 +VIR_DOMAIN_SHUTDOWN = 4 +VIR_DOMAIN_SHUTOFF = 5 +VIR_DOMAIN_CRASHED = 6 + +# virStoragePoolDeleteFlags +VIR_STORAGE_POOL_DELETE_NORMAL = 0 +VIR_STORAGE_POOL_DELETE_ZEROED = 1 + +# virStoragePoolState +VIR_STORAGE_POOL_INACTIVE = 0 +VIR_STORAGE_POOL_BUILDING = 1 +VIR_STORAGE_POOL_RUNNING = 2 +VIR_STORAGE_POOL_DEGRADED = 3 + +# virSchedParameterType +VIR_DOMAIN_SCHED_FIELD_INT = 1 +VIR_DOMAIN_SCHED_FIELD_UINT = 2 +VIR_DOMAIN_SCHED_FIELD_LLONG = 3 +VIR_DOMAIN_SCHED_FIELD_ULLONG = 4 +VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5 +VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 + +# virConnectFlags +VIR_CONNECT_RO = 1 + +# virDomainEventDefinedDetailType +VIR_DOMAIN_EVENT_DEFINED_ADDED = 0 +VIR_DOMAIN_EVENT_DEFINED_UPDATED = 1 + +# virErrorNumber +VIR_ERR_OK = 0 +VIR_ERR_INTERNAL_ERROR = 1 +VIR_ERR_NO_MEMORY = 2 +VIR_ERR_NO_SUPPORT = 3 +VIR_ERR_UNKNOWN_HOST = 4 +VIR_ERR_NO_CONNECT = 5 +VIR_ERR_INVALID_CONN = 6 +VIR_ERR_INVALID_DOMAIN = 7 +VIR_ERR_INVALID_ARG = 8 +VIR_ERR_OPERATION_FAILED = 9 +VIR_ERR_GET_FAILED = 10 +VIR_ERR_POST_FAILED = 11 +VIR_ERR_HTTP_ERROR = 12 +VIR_ERR_SEXPR_SERIAL = 13 +VIR_ERR_NO_XEN = 14 +VIR_ERR_XEN_CALL = 15 +VIR_ERR_OS_TYPE = 16 +VIR_ERR_NO_KERNEL = 17 +VIR_ERR_NO_ROOT = 18 +VIR_ERR_NO_SOURCE = 19 +VIR_ERR_NO_TARGET = 20 +VIR_ERR_NO_NAME = 21 +VIR_ERR_NO_OS = 22 +VIR_ERR_NO_DEVICE = 23 +VIR_ERR_NO_XENSTORE = 24 +VIR_ERR_DRIVER_FULL = 25 +VIR_ERR_CALL_FAILED = 26 +VIR_ERR_XML_ERROR = 27 +VIR_ERR_DOM_EXIST = 28 +VIR_ERR_OPERATION_DENIED = 29 +VIR_ERR_OPEN_FAILED = 30 +VIR_ERR_READ_FAILED = 31 +VIR_ERR_PARSE_FAILED = 32 +VIR_ERR_CONF_SYNTAX = 33 +VIR_ERR_WRITE_FAILED = 34 +VIR_ERR_XML_DETAIL = 35 +VIR_ERR_INVALID_NETWORK = 36 +VIR_ERR_NETWORK_EXIST = 37 +VIR_ERR_SYSTEM_ERROR = 38 +VIR_ERR_RPC = 39 +VIR_ERR_GNUTLS_ERROR = 40 +VIR_WAR_NO_NETWORK = 41 +VIR_ERR_NO_DOMAIN = 42 +VIR_ERR_NO_NETWORK = 43 +VIR_ERR_INVALID_MAC = 44 +VIR_ERR_AUTH_FAILED = 45 +VIR_ERR_INVALID_STORAGE_POOL = 46 +VIR_ERR_INVALID_STORAGE_VOL = 47 +VIR_WAR_NO_STORAGE = 48 +VIR_ERR_NO_STORAGE_POOL = 49 +VIR_ERR_NO_STORAGE_VOL = 50 +VIR_WAR_NO_NODE = 51 +VIR_ERR_INVALID_NODE_DEVICE = 52 +VIR_ERR_NO_NODE_DEVICE = 53 +VIR_ERR_NO_SECURITY_MODEL = 54 + +# virDomainMemoryFlags +VIR_MEMORY_VIRTUAL = 1 + +# virDomainEventStoppedDetailType +VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN = 0 +VIR_DOMAIN_EVENT_STOPPED_DESTROYED = 1 +VIR_DOMAIN_EVENT_STOPPED_CRASHED = 2 +VIR_DOMAIN_EVENT_STOPPED_MIGRATED = 3 +VIR_DOMAIN_EVENT_STOPPED_SAVED = 4 +VIR_DOMAIN_EVENT_STOPPED_FAILED = 5 + +# virVcpuState +VIR_VCPU_OFFLINE = 0 +VIR_VCPU_RUNNING = 1 +VIR_VCPU_BLOCKED = 2 + +# virStorageVolDeleteFlags +VIR_STORAGE_VOL_DELETE_NORMAL = 0 +VIR_STORAGE_VOL_DELETE_ZEROED = 1 + +# virDomainEventSuspendedDetailType +VIR_DOMAIN_EVENT_SUSPENDED_PAUSED = 0 +VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED = 1 + +# virStoragePoolBuildFlags +VIR_STORAGE_POOL_BUILD_NEW = 0 +VIR_STORAGE_POOL_BUILD_REPAIR = 1 +VIR_STORAGE_POOL_BUILD_RESIZE = 2 + +# virDomainXMLFlags +VIR_DOMAIN_XML_SECURE = 1 +VIR_DOMAIN_XML_INACTIVE = 2 + +# virStorageVolType +VIR_STORAGE_VOL_FILE = 0 +VIR_STORAGE_VOL_BLOCK = 1 + +# virDomainEventUndefinedDetailType +VIR_DOMAIN_EVENT_UNDEFINED_REMOVED = 0 + +# virConnectCredentialType +VIR_CRED_USERNAME = 1 +VIR_CRED_AUTHNAME = 2 +VIR_CRED_LANGUAGE = 3 +VIR_CRED_CNONCE = 4 +VIR_CRED_PASSPHRASE = 5 +VIR_CRED_ECHOPROMPT = 6 +VIR_CRED_NOECHOPROMPT = 7 +VIR_CRED_REALM = 8 +VIR_CRED_EXTERNAL = 9 + +# virDomainCreateFlags +VIR_DOMAIN_NONE = 0 + |