Fix listing of pci cards and gpu filtering

This commit is contained in:
Alexander Grothe 2017-07-16 08:03:50 +02:00
parent fbd5e88f64
commit 12df1cba57
3 changed files with 3994 additions and 750 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4163,15 +4163,25 @@ from ansible.module_utils.basic import *
PCIDevice = namedtuple("PCIDevice", 'idVendor idProduct idClass pciPath') PCIDevice = namedtuple("PCIDevice", 'idVendor idProduct idClass pciPath')
vendor_dict = {
0x10de: 'nvidia',
0x8086: 'intel',
0x1002: 'amd',
0x80ee: 'virtualbox',
}
def get_pci_devices(): def get_pci_devices():
for device in glob.glob('/sys/devices/pci*/*:*:*/'): for device in glob.glob('/sys/devices/pci*/*:*:*/*:*:*/'):
with open(os.path.join(device, 'device')) as d: try:
product_id = int(d.read().strip(), 16) with open(os.path.join(device, 'device')) as d:
with open(os.path.join(device, 'vendor')) as d: product_id = int(d.read().strip(), 16)
vendor_id = int(d.read().strip(), 16) with open(os.path.join(device, 'vendor')) as d:
with open(os.path.join(device, 'class')) as d: vendor_id = int(d.read().strip(), 16)
class_id = int(d.read().strip(), 16) with open(os.path.join(device, 'class')) as d:
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device) class_id = int(d.read().strip(), 16)
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
except IOError:
pass
def format_device_list(iterator): def format_device_list(iterator):
return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator] return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator]
@ -4180,7 +4190,7 @@ def format_gpu_device_list(iterator):
def get_entries(iterator): def get_entries(iterator):
for d in iterator: for d in iterator:
if d.idClass == 0x030000: if d.idClass == 0x030000:
yield ("{:04x}:{:04x}".format(d.idVendor, d.idProduct)) yield (vendor_dict.get(d.id_Vendor, "unknown"), "{:04x}:{:04x}".format(d.idVendor, d.idProduct))
return [entry for entry in get_entries(iterator)] return [entry for entry in get_entries(iterator)]
arg_specs = { arg_specs = {

View File

@ -66,15 +66,25 @@ from ansible.module_utils.basic import *
PCIDevice = namedtuple("PCIDevice", 'idVendor idProduct idClass pciPath') PCIDevice = namedtuple("PCIDevice", 'idVendor idProduct idClass pciPath')
vendor_dict = {
0x10de: 'nvidia',
0x8086: 'intel',
0x1002: 'amd',
0x80ee: 'virtualbox',
}
def get_pci_devices(): def get_pci_devices():
for device in glob.glob('/sys/devices/pci*/*:*:*/'): for device in glob.glob('/sys/devices/pci*/*:*:*/*:*:*/'):
with open(os.path.join(device, 'device')) as d: try:
product_id = int(d.read().strip(), 16) with open(os.path.join(device, 'device')) as d:
with open(os.path.join(device, 'vendor')) as d: product_id = int(d.read().strip(), 16)
vendor_id = int(d.read().strip(), 16) with open(os.path.join(device, 'vendor')) as d:
with open(os.path.join(device, 'class')) as d: vendor_id = int(d.read().strip(), 16)
class_id = int(d.read().strip(), 16) with open(os.path.join(device, 'class')) as d:
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device) class_id = int(d.read().strip(), 16)
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
except IOError:
pass
def format_device_list(iterator): def format_device_list(iterator):
return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator] return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator]
@ -83,7 +93,7 @@ def format_gpu_device_list(iterator):
def get_entries(iterator): def get_entries(iterator):
for d in iterator: for d in iterator:
if d.idClass == 0x030000: if d.idClass == 0x030000:
yield ("{:04x}:{:04x}".format(d.idVendor, d.idProduct)) yield (vendor_dict.get(d.id_Vendor, "unknown"), "{:04x}:{:04x}".format(d.idVendor, d.idProduct))
return [entry for entry in get_entries(iterator)] return [entry for entry in get_entries(iterator)]
arg_specs = { arg_specs = {