Ejemplo n.º 1
0
def _initialize_dmi_data():
    """ Initialize _dmi_data unless it already exist and returns it """
    global _dmi_data, _dmi_not_available
    if _dmi_data is None:
        if _dmi_not_available:
            # do not try to initialize it again and again if not available
            return None
        else:
            dmixml = dmidecode.dmidecodeXML()
            dmixml.SetResultType(dmidecode.DMIXML_DOC)
            # Get all the DMI data and prepare a XPath context
            try:
                data = dmixml.QuerySection('all')
                dmi_warn = dmi_warnings()
                if dmi_warn:
                    dmidecode.clear_warnings()
                    log = up2dateLog.initLog()
                    log.log_debug("dmidecode warnings: %s" % dmi_warn)
            except:
                # DMI decode FAIL, this can happend e.g in PV guest
                _dmi_not_available = 1
                dmi_warn = dmi_warnings()
                if dmi_warn:
                    dmidecode.clear_warnings()
                return None
            _dmi_data = data.xpathNewContext()
    return _dmi_data
Ejemplo n.º 2
0
def _initialize_dmi_data():
    """ Initialize _dmi_data unless it already exist and returns it """
    global _dmi_data, _dmi_not_available
    if _dmi_data is None:
        if _dmi_not_available:
            # do not try to initialize it again and again if not available
            return None
        else :
            dmixml = dmidecode.dmidecodeXML()
            dmixml.SetResultType(dmidecode.DMIXML_DOC)
            # Get all the DMI data and prepare a XPath context
            try:
                data = dmixml.QuerySection('all')
                dmi_warn = dmi_warnings()
                if dmi_warn:
                    dmidecode.clear_warnings()
                    log = up2dateLog.initLog()
                    log.log_debug("dmidecode warnings: " % dmi_warn)
            except:
                # DMI decode FAIL, this can happend e.g in PV guest
                _dmi_not_available = 1
                dmi_warn = dmi_warnings()
                if dmi_warn:
                    dmidecode.clear_warnings()
                return None
            _dmi_data = data.xpathNewContext()
    return _dmi_data
Ejemplo n.º 3
0
    def __init__(self, config):
        self.version = '0.3'
        self.smbios = None
        self.sharedir = config.installdir

        self.dmixml = dmidecode.dmidecodeXML()
        self.smbios = dmidecode.dmi.replace('SMBIOS ', '').replace(' present', '')

        xsltdoc = self.__load_xslt('rteval_dmi.xsl')
        self.xsltparser = libxslt.parseStylesheetDoc(xsltdoc)
Ejemplo n.º 4
0
    def __init__(self, config, logger):
        self.__version = '0.5'

        if not dmidecode_loaded:
            logger.log(Log.DEBUG|Log.WARN, "No dmidecode module found, ignoring DMI tables")
            self.__fake = True
            return

        self.__fake = False
        self.__dmixml = dmidecode.dmidecodeXML()

        self.__xsltparser = self.__load_xslt('rteval_dmi.xsl')
Ejemplo n.º 5
0
    def __init__(self, config, logger):
        self.__version = '0.5'

        if not dmidecode_loaded:
            logger.log(Log.DEBUG | Log.WARN,
                       "No dmidecode module found, ignoring DMI tables")
            self.__fake = True
            return

        self.__fake = False
        self.__dmixml = dmidecode.dmidecodeXML()

        self.__xsltparser = self.__load_xslt('rteval_dmi.xsl')
Ejemplo n.º 6
0
    def __init__(self, config):
        self.version = '0.3'
        self.smbios = None
        self.sharedir = config.installdir

        if hasattr(dmidecode, "fake"):
            return

        self.dmixml = dmidecode.dmidecodeXML()
        self.smbios = dmidecode.dmi.replace('SMBIOS ', '').replace(' present', '')

        xsltdoc = self.__load_xslt('rteval_dmi.xsl')
        self.xsltparser = libxslt.parseStylesheetDoc(xsltdoc)
Ejemplo n.º 7
0
	def __init__(self):
		if os.getuid() != 0:
			raise Exception("This code must be run as root")

		dmixml = dmidecode.dmidecodeXML()
		dmixml.SetResultType(dmidecode.DMIXML_DOC)
		self.xp = dmixml.QuerySection('all').xpathNewContext()

		# Get CMS Card info
		try:
			# The CMS interface is the boot interface identified by BOOTIF in /proc/cmdline
			self._cms_dev, mac = get_bootif()
			with open('/sys/class/net/' + self._cms_dev + '/speed', 'r') as f:
				speed = int(f.readline().strip())
		except Exception:
			logger.error("No 'eth0' interface. Giving up...")
			raise Exception("Cannot get MAC address.")

		self._cms_nic = {'HardwareAddress': mac, 'CardType': self._speedString[speed]}
		logger.info("CMS NIC: {0}".format(self._cms_nic))

		# Get BMC Card info
		try:
			ipmi = Popen(['ipmitool', 'lan', 'print'], stdout=PIPE).communicate()
			findMac = re.compile('(([a-f0-9]{2}:){5}[a-f0-9]{2})')
			mac = findMac.search(ipmi[0]).group(0)
			# We assume the BMC NIC is a GIGABITETHERNET
			self._bmc_nic = {'HardwareAddress': mac, 'CardType': self._speedString[1000]}
		except Exception as e:
			# Something went wrong here. Maybe no BMC?
			# We log the message and continue.
			logger.warning("Cannot get BMC information: {0}".format(e))

		logger.info("BMC NIC: {0}".format(self._bmc_nic))

		# Create the LanDB proxy which gets information form LanDB service
		mac = self._cms_nic['HardwareAddress']
		if 'atoken' in globals():
			self._landbproxy = LanDBProxy(mac, atoken=atoken)
		else:
			self._landbproxy = LanDBProxy(mac)
	
		swName, swPort = self._landbproxy.connection
		rackName = self._landbproxy.location
		headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' }
		url = 'http://%s/api/racklayout/%s/%d' % (RACKINFOSERVER, rackName, swPort)
		logger.info("Trying to get racklayout info from: ".format(url))
		self._rackInfo = requests.get(url, headers=headers).json()
		self._fqdn = '%s--cms.cern.ch.' % self._rackInfo['machine_name']
		self._shortname = self._rackInfo['machine_name']
Ejemplo n.º 8
0
    def build_inventory():
        # Check if root user
        root = (os.getuid() == 0)
        if not root:
            raise StandardError(
                "#### Program stopped: You MUST use this program as root user ###"
            )
        else:
            self = ueinventory()
            dmixml = dmidecode.dmidecodeXML()
            dmixml.SetResultType(dmidecode.DMIXML_DOC)
            xmldoc = dmixml.QuerySection('all')
            dmixp = xmldoc.xpathNewContext()

            manufacturer = self.get_manufacturer(dmixp)
            product = self.get_product(dmixp)
            serial = self.get_serial(dmixp)
            uuid = self.get_uuid(dmixp)
            domain = self.get_domain()
            language = self.get_language()
            chassistype = self.get_chassistype(dmixp)
            hostname = self.get_hostname()
            osdata = self.format_oslist(self.get_oslist())
            ossum = str(hashlib.md5(osdata).hexdigest())
            softwaredata = self.format_softlist(self.get_softwarelist())
            softsum = str(hashlib.md5(softwaredata).hexdigest())
            netdata = self.format_netlist(self.get_netlist())
            netsum = str(hashlib.md5(netdata).hexdigest())
            data = "<Inventory>\n\
                <Hostname>" + hostname.strip() + "</Hostname>\n\
                <SerialNumber>" + serial.strip() + "</SerialNumber>\n\
                <Manufacturer>" + manufacturer.strip() + "</Manufacturer>\n\
                <Uuid>" + uuid.strip() + "</Uuid>\n\
                <UserName>Undefined</UserName>\n\
                <Domain>" + domain.strip() + "</Domain>\n\
                <Language>" + language.strip() + "</Language>\n\
                <Product>" + product.strip() + "</Product>\n\
                <Chassistype>" + chassistype.strip() + "</Chassistype>\n\
                <Ossum>" + ossum + "</Ossum>\n\
                <Softsum>" + softsum + "</Softsum>\n\
                <Netsum>" + netsum + "</Netsum>\n\
                " + osdata + "\n\
                " + softwaredata + "\n\
                " + netdata + "\n\
                </Inventory>"

            return (data, softsum)
Ejemplo n.º 9
0
    def build_inventory():
     # Check if root user
        root = (os.getuid() == 0)
        if not root:
            raise StandardError("#### Program stopped: You MUST use this program as root user ###")
        else:
            self = ueinventory()
            dmixml = dmidecode.dmidecodeXML()
            dmixml.SetResultType(dmidecode.DMIXML_DOC)
            xmldoc = dmixml.QuerySection('all')
            dmixp = xmldoc.xpathNewContext()
            
            manufacturer = self.get_manufacturer(dmixp)
            product = self.get_product(dmixp)
            serial = self.get_serial(dmixp)
            uuid = self.get_uuid(dmixp)
            domain = self.get_domain()
            language = self.get_language()
            chassistype = self.get_chassistype(dmixp)
            hostname = self.get_hostname()
            osdata = self.format_oslist(self.get_oslist())
            ossum =  str(hashlib.md5(osdata).hexdigest())
            softwaredata = self.format_softlist(self.get_softwarelist())
            softsum = str(hashlib.md5(softwaredata).hexdigest()) 
            netdata = self.format_netlist(self.get_netlist())
            netsum =  str(hashlib.md5(netdata).hexdigest())
            data = "<Inventory>\n\
                <Hostname>"+hostname.strip()+"</Hostname>\n\
                <SerialNumber>"+serial.strip()+"</SerialNumber>\n\
                <Manufacturer>"+manufacturer.strip()+"</Manufacturer>\n\
                <Uuid>"+uuid.strip()+"</Uuid>\n\
                <UserName>Undefined</UserName>\n\
                <Domain>"+domain.strip()+"</Domain>\n\
                <Language>"+language.strip()+"</Language>\n\
                <Product>"+product.strip()+"</Product>\n\
                <Chassistype>"+chassistype.strip()+"</Chassistype>\n\
                <Ossum>"+ossum+"</Ossum>\n\
                <Softsum>"+softsum+"</Softsum>\n\
                <Netsum>"+netsum+"</Netsum>\n\
                "+osdata+"\n\
                "+softwaredata+"\n\
                "+netdata+"\n\
                </Inventory>"

            return (data, softsum)
Ejemplo n.º 10
0
def main():
    dmixml = dmidecode.dmidecodeXML()
    dmixml.SetResultType(dmidecode.DMIXML_DOC) # DMIXML_DOC, DMIXML_NODE
    xmldoc = dmixml.QuerySection('all')

    # Do some XPath queries on the XML document
    print "Performing XPath queries against XML document."
    dmixp = xmldoc.xpathNewContext()

    # What to look for - XPath expressions
    keys = ['/dmidecode/SystemInfo/Manufacturer',
            '/dmidecode/SystemInfo/ProductName',
            '/dmidecode/SystemInfo/SystemUUID']

    # Extract data and print
    for k in keys:
        data = dmixp.xpathEval(k)
        for d in data:
            print "%s: %s" % (k, d.get_content())
Ejemplo n.º 11
0
def generate_dmidecode():
    """
    Generate a machine_id based off dmidecode fields
    """
    import hashlib
    import dmidecode
    dmixml = dmidecode.dmidecodeXML()

    # Fetch all DMI data into a libxml2.xmlDoc object
    dmixml.SetResultType(dmidecode.DMIXML_DOC)
    xmldoc = dmixml.QuerySection('all')

    # Do some XPath queries on the XML document
    dmixp = xmldoc.xpathNewContext()

    # What to look for - XPath expressions
    keys = ['/dmidecode/SystemInfo/Manufacturer',
            '/dmidecode/SystemInfo/ProductName',
            '/dmidecode/SystemInfo/SerialNumber',
            '/dmidecode/SystemInfo/SystemUUID']

    # Create a sha256 of ^ for machine_id
    machine_id = hashlib.sha256()

    # Run xpath expressions
    for k in keys:
        data = dmixp.xpathEval(k)
        for element in  data:
            logger.log(logging.DEBUG, "%s: %s", k, element.get_content())
            # Update the hash as we find the fields we are looking for
            machine_id.update(element.get_content())

    del dmixp
    del xmldoc
    # Create sha256 digest
    return machine_id.hexdigest()
Ejemplo n.º 12
0
def read_values():
    # Check if running as root .... provide a warning if not
    root_user = (os.getuid() == 0 and True or False)
    if not root_user:
        print("####  NOT RUNNING AS ROOT")
        sys.exit()

    if root_user:
        dmixml = dmidecode.dmidecodeXML()
        dmixml.SetResultType(dmidecode.DMIXML_DOC)
        xmldoc = dmixml.QuerySection('system')

        tree = xmldoc.xpathNewContext()

        # What to look for - XPath expressions
        vendorpath = "/dmidecode/SystemInfo/Manufacturer"
        productpath = "/dmidecode/SystemInfo/ProductName"

        vendorlist = tree.xpathEval(vendorpath)
        productlist = tree.xpathEval(productpath)
        vendor = vendorlist[0].get_content()
        product = productlist[0].get_content()
        print_warnings()
        return (vendor, product)
Ejemplo n.º 13
0
print("*** Querying for the BIOS section")
pprint(dmidecode.QuerySection('bios'))
print_warnings()

#
# Test XML stuff
#
print()
print()
print()
print("---------------------------------------")
print("*** *** *** Testing XML API *** *** ***")
print("---------------------------------------")
print()
print()
dmixml = dmidecode.dmidecodeXML()

# Fetch all DMI data into a libxml2.xmlDoc object
print("*** Getting all DMI data into a XML document variable")
dmixml.SetResultType(dmidecode.DMIXML_DOC)  # Valid values: dmidecode.DMIXML_DOC, dmidecode.DMIXML_NODE
xmldoc = dmixml.QuerySection('all')

# Dump the XML to dmidump.xml - formated in UTF-8 decoding
print("*** Dumping XML document to dmidump.xml")
xmldoc.saveFormatFileEnc('dmidump.xml','UTF-8',1)

# Do some XPath queries on the XML document
print("*** Doing some XPath queries against the XML document")
dmixp = xmldoc.xpathNewContext()

# What to look for - XPath expressions