Using the API from the shell to list the lease database
This shell script writes out all entries of the lease database,
Requirements
- Unix Shell
- The
curlprogram ( https://curl.se/ ), installed via package manager - The
jqprogram ( https://jqlang.org/ ), installed via package manager
Shell-Script
#!/bin/bash
function getleases () {
echo ${leases} | jq ".arguments.leases.[] | select(.state == ${state})" | jq -c | while read -r lease;
do
subnetid=$(echo ${lease} | jq '."subnet-id"')
hostname=$(echo ${lease} | jq '.hostname')
hwaddress=$(echo ${lease} | jq '."hw-address"')
ipaddress=$(echo ${lease} | jq '."ip-address"')
validlft=$(echo ${lease} | jq '."valid-lft"')
echo "${subnetid},${hostname},${hwaddress},${ipaddress},${validlft}"
done
}
api="http://[::1]:9098/"
if [ $# -eq 0 ]; then
leases=$(curl -s --json '{ "command": "lease4-get-all", "service": [ "dhcp4" ] }' ${api} | jq ".[0]" | jq "del(.result)" | jq "del(.arguments.hash)" )
else
leases=$(curl -s --json '{ "command": "lease4-get-all", "arguments": { "subnets": [ '${1}' ] }, "service": [ "dhcp4" ] }' ${api} | jq ".[0]" | jq "del(.result)" | jq "del(.arguments.hash)" )
fi
echo ${leases} | jq ".text"
echo ""
echo "Assigned leases ..."
state=0
getleases
echo "Declines leases ..."
state=1
getleases
echo "Expired-reclaimed leases ..."
state=2
getleases
echo "Released leases ..."
state=3
getleases