Shell-Script to list leases using the API

Carsten Strotmann

2026/01/19

Using the API from the shell to list the lease database

This shell script writes out all entries of the lease database,

Requirements

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