Add pci_facts.py module for detailed PCI device descriptions
This commit is contained in:
parent
5035437aa2
commit
48710c22c6
72
Manual.org
72
Manual.org
@ -5685,6 +5685,78 @@ def main():
|
||||
module.exit_json(changed=False, ansible_facts=data, msg=data)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
#+END_SRC
|
||||
** pci_facts.py
|
||||
#+BEGIN_SRC python :tangle library/pci_facts.py :shebang "#!/usr/bin/env python"
|
||||
|
||||
# This module parses the output of lspci for detailed information about available (sub) devices.
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
module: pci_facts
|
||||
short_description: parses lspci output for detailed (sub) devices data
|
||||
description:
|
||||
- This module parses the output of lspci for detailed information about available (sub) devices.
|
||||
- returns a list with a dict for each device
|
||||
|
||||
notes:
|
||||
- requires lspci (package pciutils)
|
||||
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: get detailled pci device infos
|
||||
pci_facts:
|
||||
|
||||
- debug:
|
||||
var: pci_devices
|
||||
'''
|
||||
|
||||
|
||||
import argparse
|
||||
import shlex
|
||||
import subprocess
|
||||
from collections import namedtuple
|
||||
|
||||
from ansible.module_utils.basic import *
|
||||
|
||||
def convert2hex(arg):
|
||||
arg = arg.strip('"')
|
||||
if arg:
|
||||
return int(arg, 16)
|
||||
else:
|
||||
return None
|
||||
|
||||
def parse_lspci_data():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-r', '--revision', help='revision', type=convert2hex)
|
||||
parser.add_argument('-p', '--progif', help='proginf', type=convert2hex)
|
||||
parser.add_argument('slot')
|
||||
parser.add_argument('device_class', type=convert2hex)
|
||||
parser.add_argument('vendor_id', type=convert2hex)
|
||||
parser.add_argument('device_id', type=convert2hex)
|
||||
parser.add_argument('sub_vendor_id', type=convert2hex)
|
||||
parser.add_argument('sub_device_id', type=convert2hex)
|
||||
parser.add_argument('other', nargs='*', default=[])
|
||||
|
||||
devices = []
|
||||
for line in subprocess.check_output(['lspci', '-nm'], universal_newlines=True).splitlines():
|
||||
args = parser.parse_args(args=shlex.split(line))
|
||||
devices.append(vars(args))
|
||||
return devices
|
||||
|
||||
|
||||
def main():
|
||||
arg_specs = {}
|
||||
module = AnsibleModule(argument_spec=arg_specs, supports_check_mode=True,)
|
||||
try:
|
||||
pci_devices = parse_lspci_data()
|
||||
except:
|
||||
module.fail_json(msg="Something fatal happened")
|
||||
data = {'pci_devices': pci_devices}
|
||||
module.exit_json(changed=False, ansible_facts=data, msg=data)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
#+END_SRC
|
||||
|
Loading…
Reference in New Issue
Block a user