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
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
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)
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')
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')
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)
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']
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)
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)
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())
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()
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)
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