def scan(srobj): systemrootID = util.getrootdevID() hbadict = srobj.hbadict hbas = srobj.hbas dom = xml.dom.minidom.Document() e = dom.createElement("Devlist") dom.appendChild(e) if not os.path.exists(DEVPATH): return dom.toprettyxml() devs = srobj.devs vdis = {} for key in hbadict: hba = hbadict[key] path = os.path.join("/dev",key) realpath = path obj = srobj.vdi("") try: obj._query(realpath, devs[realpath][4]) except: continue # Test for root dev or existing PBD if len(obj.SCSIid) and len(systemrootID) and util.match_scsiID(obj.SCSIid, systemrootID): util.SMlog("Ignoring root device %s" % realpath) continue elif util.test_SCSIid(srobj.session, None, obj.SCSIid): util.SMlog("SCSIid in use, ignoring (%s)" % obj.SCSIid) continue elif not devs.has_key(realpath): continue ids = devs[realpath] obj.adapter = ids[1] obj.channel = ids[2] obj.id = ids[3] obj.lun = ids[4] obj.hba = hba['procname'] obj.numpaths = 1 if vdis.has_key(obj.SCSIid): vdis[obj.SCSIid].numpaths += 1 vdis[obj.SCSIid].path += " [%s]" % key elif obj.hba == 'mpp': mppdict = _genMPPHBA(obj.adapter) if mppdict.has_key(key): item = mppdict[key] adapters = '' for i in item: if len(adapters): adapters += ', ' obj.numpaths += 1 adapters += i if len(adapters): obj.mpp = adapters vdis[obj.SCSIid] = obj else: vdis[obj.SCSIid] = obj for key in vdis: obj = vdis[key] d = dom.createElement("BlockDevice") e.appendChild(d) for attr in ['path','numpaths','SCSIid','vendor','serial','size','adapter','channel','id','lun','hba','mpp']: try: aval = getattr(obj, attr) except AttributeError: if attr in ['mpp']: continue raise xs_errors.XenError('InvalidArg', \ opterr='Missing required field [%s]' % attr) entry = dom.createElement(attr) d.appendChild(entry) textnode = dom.createTextNode(str(aval)) entry.appendChild(textnode) for key in hbas.iterkeys(): a = dom.createElement("Adapter") e.appendChild(a) entry = dom.createElement('host') a.appendChild(entry) textnode = dom.createTextNode(key) entry.appendChild(textnode) entry = dom.createElement('name') a.appendChild(entry) textnode = dom.createTextNode(hbas[key]) entry.appendChild(textnode) entry = dom.createElement('manufacturer') a.appendChild(entry) textnode = dom.createTextNode(getManufacturer(hbas[key])) entry.appendChild(textnode) id = key.replace("host","") entry = dom.createElement('id') a.appendChild(entry) textnode = dom.createTextNode(id) entry.appendChild(textnode) _add_host_parameters_to_adapter(dom, a, 'fc_host', id, ['node_name', 'port_name', 'port_state', 'speed', 'supported_speeds']) _add_host_parameters_to_adapter(dom, a, 'iscsi_host', id, ['hwaddress', 'initiatorname', 'ipaddress', 'port_speed', 'port_state']) return dom.toprettyxml()
def scan(srobj): systemrootID = util.getrootdevID() hbadict = srobj.hbadict hbas = srobj.hbas dom = xml.dom.minidom.Document() e = dom.createElement("Devlist") dom.appendChild(e) if not os.path.exists(DEVPATH): return dom.toprettyxml() devs = srobj.devs vdis = {} for key in hbadict: hba = hbadict[key] path = os.path.join("/dev", key) realpath = path obj = srobj.vdi("") try: obj._query(realpath, devs[realpath][4]) except: continue # Test for root dev or existing PBD if len(obj.SCSIid) and len(systemrootID) and util.match_scsiID(obj.SCSIid, systemrootID): util.SMlog("Ignoring root device %s" % realpath) continue elif util.test_SCSIid(srobj.session, None, obj.SCSIid): util.SMlog("SCSIid in use, ignoring (%s)" % obj.SCSIid) continue elif not devs.has_key(realpath): continue ids = devs[realpath] obj.adapter = ids[1] obj.channel = ids[2] obj.id = ids[3] obj.lun = ids[4] obj.hba = hba["procname"] obj.numpaths = 1 if vdis.has_key(obj.SCSIid): vdis[obj.SCSIid].numpaths += 1 vdis[obj.SCSIid].path += " [%s]" % key elif obj.hba == "mpp": mppdict = _genMPPHBA(obj.adapter) if mppdict.has_key(key): item = mppdict[key] adapters = "" for i in item: if len(adapters): adapters += ", " obj.numpaths += 1 adapters += i if len(adapters): obj.mpp = adapters vdis[obj.SCSIid] = obj else: vdis[obj.SCSIid] = obj for key in vdis: obj = vdis[key] d = dom.createElement("BlockDevice") e.appendChild(d) for attr in [ "path", "numpaths", "SCSIid", "vendor", "serial", "size", "adapter", "channel", "id", "lun", "hba", "mpp", ]: try: aval = getattr(obj, attr) except AttributeError: if attr in ["mpp"]: continue raise xs_errors.XenError("InvalidArg", opterr="Missing required field [%s]" % attr) entry = dom.createElement(attr) d.appendChild(entry) textnode = dom.createTextNode(str(aval)) entry.appendChild(textnode) for key in hbas.iterkeys(): a = dom.createElement("Adapter") e.appendChild(a) entry = dom.createElement("host") a.appendChild(entry) textnode = dom.createTextNode(key) entry.appendChild(textnode) entry = dom.createElement("name") a.appendChild(entry) textnode = dom.createTextNode(hbas[key]) entry.appendChild(textnode) entry = dom.createElement("manufacturer") a.appendChild(entry) textnode = dom.createTextNode(getManufacturer(hbas[key])) entry.appendChild(textnode) id = key.replace("host", "") entry = dom.createElement("id") a.appendChild(entry) textnode = dom.createTextNode(id) entry.appendChild(textnode) return dom.toprettyxml()