mirror of
				https://github.com/xcat2/confluent.git
				synced 2025-11-04 05:12:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import subprocess
 | 
						|
import os
 | 
						|
 | 
						|
class DiskInfo(object):
 | 
						|
    def __init__(self, devname):
 | 
						|
        self.name = devname
 | 
						|
        self.wwn = None
 | 
						|
        self.path = None
 | 
						|
        self.model = ''
 | 
						|
        self.size = 0
 | 
						|
        self.driver = None
 | 
						|
        self.mdcontainer = ''
 | 
						|
        devnode = '/dev/{0}'.format(devname)
 | 
						|
        qprop = subprocess.check_output(
 | 
						|
            ['udevadm', 'info', '--query=property', devnode])
 | 
						|
        if not isinstance(qprop, str):
 | 
						|
            qprop = qprop.decode('utf8')
 | 
						|
        for prop in qprop.split('\n'):
 | 
						|
            if '=' not in prop:
 | 
						|
                continue
 | 
						|
            k, v = prop.split('=', 1)
 | 
						|
            if k == 'DEVTYPE' and v != 'disk':
 | 
						|
                raise Exception('Not a disk')
 | 
						|
            elif k == 'DM_NAME':
 | 
						|
                raise Exception('Device Mapper')
 | 
						|
            elif k == 'ID_MODEL':
 | 
						|
                self.model = v
 | 
						|
            elif k == 'DEVPATH':
 | 
						|
                self.path = v
 | 
						|
            elif k == 'ID_WWN':
 | 
						|
                self.wwn = v
 | 
						|
            elif k == 'MD_CONTAINER':
 | 
						|
                self.mdcontainer = v
 | 
						|
        attrs = subprocess.check_output(['udevadm', 'info', '-a', devnode])
 | 
						|
        if not isinstance(attrs, str):
 | 
						|
            attrs = attrs.decode('utf8')
 | 
						|
        for attr in attrs.split('\n'):
 | 
						|
            if '==' not in attr:
 | 
						|
                continue
 | 
						|
            k, v = attr.split('==', 1)
 | 
						|
            k = k.strip()
 | 
						|
            if k == 'ATTRS{size}':
 | 
						|
                self.size = v.replace('"', '')
 | 
						|
            elif (k == 'DRIVERS' and not self.driver
 | 
						|
                    and v not in ('"sd"', '""')):
 | 
						|
                self.driver = v.replace('"', '')
 | 
						|
        if not self.driver and 'imsm' not in self.mdcontainer:
 | 
						|
            raise Exception("No driver detected")
 | 
						|
 | 
						|
    @property
 | 
						|
    def priority(self):
 | 
						|
        if self.model.lower() in ('thinksystem_m.2_vd', 'thinksystem m.2'):
 | 
						|
            return 0
 | 
						|
        if 'imsm' in self.mdcontainer:
 | 
						|
            return 1
 | 
						|
        if self.driver == 'ahci':
 | 
						|
            return 2
 | 
						|
        if self.driver.startswith('megaraid'):
 | 
						|
            return 3
 | 
						|
        if self.driver.startswith('mpt'):
 | 
						|
            return 4
 | 
						|
        return 99
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        return repr({
 | 
						|
            'name': self.name,
 | 
						|
            'path': self.path,
 | 
						|
            'wwn': self.wwn,
 | 
						|
            'driver': self.driver,
 | 
						|
            'size': self.size,
 | 
						|
            'model': self.model,
 | 
						|
        })
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    disks = []
 | 
						|
    for disk in sorted(os.listdir('/sys/class/block')):
 | 
						|
        try:
 | 
						|
            disk = DiskInfo(disk)
 | 
						|
            disks.append(disk)
 | 
						|
        except Exception as e:
 | 
						|
            print("Skipping {0}: {1}".format(disk, str(e)))
 | 
						|
    nd = [x.name for x in sorted(disks, key=lambda x: x.priority)]
 | 
						|
    if nd:
 | 
						|
        open('/tmp/installdisk', 'w').write(nd[0])
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |