Add role to install nfs-server, cleanup roles and configuration
- use generic media_dirs including vdr recdir, loop over them to create directories, configure samba, nfs, etc. - add role to install an configure nfs-kernel-server - cleanup roles - add custom fact modules
This commit is contained in:
126
library/hardware_facts.py
Normal file
126
library/hardware_facts.py
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# This Module collects the vendor- and device ids for USB- and PCI(e)-devices and currently loaded kernel modules.
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
module: hardware_facts
|
||||
short_description: collects facts for kernel modules, usb and pci devices
|
||||
description:
|
||||
- This Module collects the vendor- and device ids for USB- and PCI(e)-devices and
|
||||
currently loaded kernel modules.
|
||||
options:
|
||||
usb:
|
||||
required: False
|
||||
default: True
|
||||
description:
|
||||
- return a list of vendor- and device ids for usb devices in '04x:04x' notation
|
||||
|
||||
pci:
|
||||
required: False
|
||||
default: True
|
||||
description:
|
||||
- return a list of vendor- and device ids for pci devices in '04x:04x' notation
|
||||
|
||||
modules:
|
||||
required: False
|
||||
default: True
|
||||
description:
|
||||
- return a list of currently loaded kernel modules
|
||||
|
||||
gpus:
|
||||
required: False
|
||||
default: True
|
||||
description:
|
||||
- return a list of devices of the pci gpu class (0x030000)
|
||||
notes:
|
||||
- requres python-pyusb and python-kmodpy
|
||||
requirements: [ ]
|
||||
author: "Alexander Grothe <seahawk1986@gmx.de>"
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: get information about usb and pci hardware and loaded kernel modules
|
||||
hardware_facts:
|
||||
usb: True
|
||||
pci: True
|
||||
modules: True
|
||||
- debug:
|
||||
var: usb
|
||||
- debug
|
||||
var: pci
|
||||
- debug
|
||||
var: modules
|
||||
- debug
|
||||
var: gpus
|
||||
'''
|
||||
|
||||
import glob
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import usb.core
|
||||
from collections import namedtuple
|
||||
|
||||
import kmodpy
|
||||
from ansible.module_utils.basic import *
|
||||
|
||||
|
||||
PCIDevice = namedtuple("PCIDevice", ['idVendor', 'idProduct', 'idClass'])
|
||||
|
||||
def get_pci_devices():
|
||||
for device in glob.glob('/sys/devices/pci*/*:*:*/'):
|
||||
with open(os.path.join(device, 'device')) as d:
|
||||
product_id = int(d.read().strip(), 16)
|
||||
with open(os.path.join(device, 'vendor')) as d:
|
||||
vendor_id = int(d.read().strip(), 16)
|
||||
with open(os.path.join(device, 'class')) as d:
|
||||
class_id = int(d.read().strip(), 16)
|
||||
yield PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id)
|
||||
|
||||
def format_device_list(iterator):
|
||||
return ["{:04x}:{:04x}".format(d.idVendor, d.idProduct) for d in iterator]
|
||||
|
||||
def format_gpu_device_list(iterator):
|
||||
def get_entries(iterator):
|
||||
for d in iterator:
|
||||
if d.idClass == 0x030000:
|
||||
yield ("{:04x}:{:04x}".format(d.idVendor, d.idProduct))
|
||||
return [entry for entry in get_entries(iterator)]
|
||||
|
||||
arg_specs = {
|
||||
'usb': dict(default=True, type='bool', required=False),
|
||||
'pci': dict(default=True, type='bool', required=False),
|
||||
'modules': dict(default=True, type='bool', required=False),
|
||||
'gpus': dict(default=True, type='bool', required=False),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(argument_spec=arg_specs, supports_check_mode=True,)
|
||||
collect_usb = module.params['usb']
|
||||
collect_pci = module.params['pci']
|
||||
collect_modules = module.params['modules']
|
||||
collect_gpus = module.params['gpus']
|
||||
if collect_usb:
|
||||
usb_devices = format_device_list(usb.core.find(find_all=True))
|
||||
else:
|
||||
usb_device = []
|
||||
if collect_pci:
|
||||
pci_devices = format_device_list(get_pci_devices())
|
||||
else:
|
||||
pci_devices = []
|
||||
if collect_modules:
|
||||
k = kmodpy.Kmod()
|
||||
modules = [m[0] for m in k.loaded()]
|
||||
else:
|
||||
modules = []
|
||||
if collect_gpus:
|
||||
gpus = format_gpu_device_list(get_pci_devices())
|
||||
else:
|
||||
gpus = []
|
||||
data = {'usb': usb_devices, 'pci': pci_devices, 'modules': modules, 'gpus': gpus}
|
||||
module.exit_json(changed=False, ansible_facts=data, msg=data)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
63
library/satip_facts.py
Normal file
63
library/satip_facts.py
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python2
|
||||
|
||||
DOCUMENTATION = '''
|
||||
---
|
||||
module: hardware_facts
|
||||
short_description: "check if at least one SAT>IP server responds on the network"
|
||||
description:
|
||||
- This script sends a multicast message and awaits responses by Sat>IP servers.
|
||||
Returns the boolean variable 'satip_detected'
|
||||
'''
|
||||
EXAMPLES = '''
|
||||
- name: "detect SAT>IP Server on the network"
|
||||
action: satip_facts
|
||||
|
||||
- debug:
|
||||
var: satip_detected
|
||||
'''
|
||||
|
||||
import json
|
||||
import socket
|
||||
import sys
|
||||
import time
|
||||
|
||||
from ansible.module_utils.basic import *
|
||||
|
||||
SSDP_ADDR = "239.255.255.250"
|
||||
SSDP_PORT = 1900
|
||||
# SSDP_MX = max delay for server response
|
||||
# a value of 2s is recommended by the SAT>IP specification 1.2.2
|
||||
SSDP_MX = 2
|
||||
SSDP_ST = "urn:ses-com:device:SatIPServer:1"
|
||||
|
||||
ssdpRequest = "\r\n".join((
|
||||
"M-SEARCH * HTTP/1.1",
|
||||
"HOST: %s:%d" % (SSDP_ADDR, SSDP_PORT),
|
||||
"MAN: \"ssdp:discover\"",
|
||||
"MX: %d" % (SSDP_MX),
|
||||
"ST: %s" % (SSDP_ST),
|
||||
"\r\n"))
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(argument_spec={}, supports_check_mode=True,)
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
# according to Sat>IP Specification 1.2.2, p. 20
|
||||
# a client should send three requests within 100 ms with a ttl of 2
|
||||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
|
||||
sock.settimeout(SSDP_MX + 0.5)
|
||||
for _ in range(3):
|
||||
sock.sendto(ssdpRequest, (SSDP_ADDR, SSDP_PORT))
|
||||
time.sleep(0.03)
|
||||
try:
|
||||
response = sock.recv(1000)
|
||||
if response and "SERVER:" in response:
|
||||
got_response = True
|
||||
else:
|
||||
raise ValueError('No satip server detected')
|
||||
except (socket.timeout, ValueError):
|
||||
got_response = False
|
||||
|
||||
module.exit_json(changed=False, ansible_facts={'satip_detected': got_response})
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user