Reply - Raw
#!/usr/bin/env python
# -*- coding: utf8 -*-
#
# Copyright (c) Odd Stråbø <oddstr13@openshell.no>
# License: MIT - https://opensource.org/licenses/MIT
#

import re

input = '/etc/dhcpd.conf'

data = open(input, 'rb').read()

R = rb'^host\ (?P<name>[^\ ]+)\ \{(?P<content>.*?)\}'


it = re.finditer(R, data, flags=(re.MULTILINE | re.DOTALL))

for item in it:
    g = item.groups()
    gd = item.groupdict()

    name = gd.get('name')
    content = gd.get('content')

    m = re.search(rb'hardware\ ethernet[\ \t](?P<mac>[0-9a-fA-F:]+);', content)
    mac = None
    if m:
        mac = m.group('mac')

    m = re.search(rb'fixed-address[\ \t](?P<ip>[0-9\.]+);', content)
    ip = None
    if m:
        ip = m.group('ip')

    res = {
        'name': name.decode(),
        'mac':  mac.decode(),
        'ip':   ip.decode(),
    }

    print("# {0}".format(res))
    print("echo Adding {name}: {mac} = {ip}".format(**res))
    print('')
    print("HOSTID=$(uci add dhcp host)")
    print("uci set dhcp.${{HOSTID}}.name={name}".format(**res))
    print("uci set dhcp.${{HOSTID}}.mac={mac}".format(**res))
    print("uci set dhcp.${{HOSTID}}.ip={ip}".format(**res))
    print('')
    print('')


print("echo Commiting the following changes:")
print("uci changes")
print("uci commit")