diff options
author | Lars Wirzenius <liw@liw.fi> | 2022-08-25 10:08:59 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2022-08-25 10:08:59 +0000 |
commit | d00439a95d58d05de6c794245ed06991fb4e7533 (patch) | |
tree | cfd607c842a30d9b169a55a9faae664c39a864f7 | |
parent | 5865db8c2a0da062bd82b271e4e41b892913686a (diff) | |
parent | d01f229b1e553186e8b65ac4081e644217a00c40 (diff) | |
download | puomi-d00439a95d58d05de6c794245ed06991fb4e7533.tar.gz |
Merge branch 'leases' into 'main'
feat: add script to show current DHCP leases
Closes #9
See merge request larswirzenius/puomi!10
-rwxr-xr-x | leases.sh | 13 | ||||
-rwxr-xr-x | roles/puomi/files/leases | 47 | ||||
-rw-r--r-- | roles/puomi/tasks/main.yml | 6 |
3 files changed, 53 insertions, 13 deletions
diff --git a/leases.sh b/leases.sh deleted file mode 100755 index 513998a..0000000 --- a/leases.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -awk ' -$4 == "*" { name=$2 } -$4 != "*" { name=$4 } -{ print name, $1, $3 } -' /var/lib/misc/dnsmasq.leases | - sort | - while read name timestamp ip; do - printf '%s %-15s %s\n' "$(date -Imin --date "@$timestamp")" "$ip" "$name" - done diff --git a/roles/puomi/files/leases b/roles/puomi/files/leases new file mode 100755 index 0000000..8532c15 --- /dev/null +++ b/roles/puomi/files/leases @@ -0,0 +1,47 @@ +#!/usr/bin/python3 + +import argparse +import time + + +class Lease: + def __init__(self, name, timestamp, ip): + self.name = name + self.timestamp = timestamp + self.ip = ip + + @classmethod + def parse_line(_, line): + words = line.split() + (timestamp, mac, ip, name) = words[:4] + timestamp = int(timestamp) + if name == "*": + name = mac + return Lease(name, timestamp, ip) + + +parser = argparse.ArgumentParser() +parser.add_argument("--input", metavar="FILE", default="/var/lib/misc/dnsmasq.leases") +parser.add_argument("--time", "-t", action="store_true") +parser.add_argument("--remains", action="store_true") +args = parser.parse_args() + +leases = [] +with open(args.input) as f: + for line in f: + leases.append(Lease.parse_line(line)) + +if args.time: + leases.sort(key=lambda x: x.timestamp) +else: + leases.sort(key=lambda x: x.name) + +if args.remains: + now = time.time() + for x in leases: + remain = int(x.timestamp - now) + print(f"{remain:4}s {x.ip:12} {x.name}") +else: + for x in leases: + expires = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x.timestamp)) + print(f"{expires} {x.ip:12} {x.name}") diff --git a/roles/puomi/tasks/main.yml b/roles/puomi/tasks/main.yml index 90356c5..2b1911e 100644 --- a/roles/puomi/tasks/main.yml +++ b/roles/puomi/tasks/main.yml @@ -107,3 +107,9 @@ IPMasquerade=true ConfigureWithoutCarrier=true dest: /etc/systemd/network/br0.network + +- name: "puomi: install script to show current DHCP leases" + copy: + src: leases + dest: /usr/local/bin + mode: 0755 |