From a3cc5a9347486476fc743f22eae028cbd5f4aecb Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Tue, 30 Jan 2024 21:01:20 +0100 Subject: [PATCH] bundles/kea-dhcp-server: add kea-lease-list script --- bundles/kea-dhcp-server/files/kea-lease-list | 37 ++++++++++++++++++++ bundles/kea-dhcp-server/items.py | 4 +++ 2 files changed, 41 insertions(+) create mode 100644 bundles/kea-dhcp-server/files/kea-lease-list diff --git a/bundles/kea-dhcp-server/files/kea-lease-list b/bundles/kea-dhcp-server/files/kea-lease-list new file mode 100644 index 0000000..7919b0c --- /dev/null +++ b/bundles/kea-dhcp-server/files/kea-lease-list @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +from csv import DictReader +from datetime import datetime, timezone +from os import scandir +from os.path import join + + +def parse(): + NOW = datetime.now() + active_leases = {} + for file in scandir("/var/lib/kea/"): + with open(file.path) as f: + for row in DictReader(f): + expires = datetime.fromtimestamp(int(row["expire"])) + + if expires >= NOW: + if ( + row["address"] not in active_leases + or active_leases[row["address"]]["expires_dt"] < expires + ): + row["expires_dt"] = expires + active_leases[row["address"]] = row + return active_leases.values() + + +def print_table(leases): + print(""" address | MAC | expires | hostname +-----------------+-------------------+---------+----------""") + for lease in sorted(leases, key=lambda r: r["address"]): + print( + f' {lease["address"]:<15} | {lease["hwaddr"].lower()} | {lease["expires_dt"]:%H:%M} | {lease["hostname"]}' + ) + + +if __name__ == "__main__": + print_table(parse()) diff --git a/bundles/kea-dhcp-server/items.py b/bundles/kea-dhcp-server/items.py index 9171d0b..c6219cf 100644 --- a/bundles/kea-dhcp-server/items.py +++ b/bundles/kea-dhcp-server/items.py @@ -44,6 +44,10 @@ files['/etc/kea/kea-dhcp4.conf'] = { }, } +files['/usr/local/bin/kea-lease-list'] = { + 'mode': '0500', +} + svc_systemd['kea-dhcp4-server'] = { 'needs': { 'file:/etc/kea/kea-dhcp4.conf',