HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/local/qcloud/monitor/barad/comm/virtOperator.py
"""
    Description :   lib virt operation
    created by  :   cloudyang, 2013/Nov/10
    Modified by :   samhuang 2013/Nov/12
    Node        :
"""

# -*- coding: utf-8 -*-

import os
import libvirt
import threading

_g_virlock = threading.Lock()

class VirtOperator :
    virt_conn = None
    virt_hyper = "unknow"
    def __init__(self, uri = None, readonly = True):
        self.__uri = uri
        self.__readonly = readonly
        if VirtOperator.virt_conn == None :
            try:
                _g_virlock.acquire()
                if VirtOperator.virt_conn == None :
                    self._getHypervisorType()
                    self.virt_conn = self._createVirtConnection(uri, readonly)
                else :
                    self.virt_conn = VirtOperator.virt_conn
            finally:
                _g_virlock.release()
        else :
            self.virt_conn = VirtOperator.virt_conn

    def _getHypervisorType(self):
        #hyperCmd = '''awk '/Booting .*virtualized kernel/{ str = tolower($0); if (match(str, "xen")){print "xen"} else if (match(str, "kvm")){print "kvm"} else {print "unknow"}}' /var/log/dmesg'''
        #self.virt_hyper = commands.getoutput(hyperCmd)
        if os.path.isdir('/sys/module/kvm'):
            VirtOperator.virt_hyper = 'kvm'
        else:
            VirtOperator.virt_hyper = 'xen'

    def _createVirtConnection(self, uri, readonly):
        if uri == None:
            if cmp( VirtOperator.virt_hyper, 'xen') == 0:
                realUrl = 'xen:///'
            elif cmp(VirtOperator.virt_hyper, 'kvm') == 0:
                realUrl = 'qemu:///system'
            else:
                realUrl = 'xen:///'             #default as xen
        else:
            realUrl = uri

        if readonly == True:
            VirtOperator.virt_conn = libvirt.openReadOnly(realUrl)
        else :
            VirtOperator.virt_conn =  libvirt.open(realUrl)
        return VirtOperator.virt_conn

    def getHypervisor(self):
        return VirtOperator.virt_hyper

    def getActiveDomains(self):
        try:
            return [ self.virt_conn.lookupByID(x) for x in self.virt_conn.listDomainsID() if x!=0 ]
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)

    def getDefinedDomains(self):
        try:
            return [ self.virt_conn.lookupByName(x) for x in self.virt_conn.listDefinedDomains() ]
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)

    def getAllDomains(self):
        return self.getActiveDomains() + self.getDefinedDomains()

    def lookupByName(self, instance_name):
        try:
            return self.virt_conn.lookupByName(instance_name)
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)
    
    def lookupByID(self, instance_id):
        try:
            return self.virt_conn.lookupByID(instance_id)
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)

    def lookupByUUID(self, instance_uuid):
        try:
            return self.virt_conn.lookupByUUIDString(instance_uuid)
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e) 
    
    def lookupByUUIDString(self, uuid):
        try:
            return self.virt_conn.lookupByUUIDString(uuid)
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)

    def getVersion(self):
        """Get current libvert version"""
        try:
            return self.virt_conn.getVersion()
        except libvirt.libvirtError,e:
            self.virt_conn = self._createVirtConnection(self.__uri, self.__readonly)
            raise Exception("libvirt connection reset, %s" % e)
        
if __name__ == "__main__":
    virtObj = VirtOperator()
    print virtObj.getHypervisor()
    print virtObj.getVersion()
    print virtObj.getActiveDomains()