summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2022-08-25 10:08:59 +0000
committerLars Wirzenius <liw@liw.fi>2022-08-25 10:08:59 +0000
commitd00439a95d58d05de6c794245ed06991fb4e7533 (patch)
treecfd607c842a30d9b169a55a9faae664c39a864f7
parent5865db8c2a0da062bd82b271e4e41b892913686a (diff)
parentd01f229b1e553186e8b65ac4081e644217a00c40 (diff)
downloadpuomi-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-xleases.sh13
-rwxr-xr-xroles/puomi/files/leases47
-rw-r--r--roles/puomi/tasks/main.yml6
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