From 48710c22c6aea5dcb8c3cfe2f40e3f8563812e6e Mon Sep 17 00:00:00 2001 From: Alexander Grothe Date: Fri, 10 Aug 2018 09:01:53 +0200 Subject: [PATCH] Add pci_facts.py module for detailed PCI device descriptions --- Manual.org | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/Manual.org b/Manual.org index d8f4ac1..850d6b0 100644 --- a/Manual.org +++ b/Manual.org @@ -5688,6 +5688,78 @@ def main(): 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 ** satip_facts.py #+BEGIN_SRC python :tangle library/satip_facts.py :shebang #!/usr/bin/env python2 DOCUMENTATION = '''