Fix errors when overwriting DHCP leases

Ensure we remove any existing leases for the MAC first, before adding a
new entry for that MAC. Otherwise what dnsmasq returns will not be valid
and this can cause CloudInit bootstrap errors.
This commit is contained in:
2026-03-01 21:10:35 -05:00
parent eff972a62e
commit dfc8d598cb

View File

@@ -130,6 +130,8 @@ def read_lease_database(zk_conn, zk_leases_key):
def add_lease(zk_conn, zk_leases_key, expiry, macaddr, ipaddr, hostname, clientid): def add_lease(zk_conn, zk_leases_key, expiry, macaddr, ipaddr, hostname, clientid):
if not hostname: if not hostname:
hostname = "" hostname = ""
try:
zk_conn.delete("{}/{}".format(zk_leases_key, macaddr), recursive=True)
transaction = zk_conn.transaction() transaction = zk_conn.transaction()
transaction.create("{}/{}".format(zk_leases_key, macaddr), "".encode("ascii")) transaction.create("{}/{}".format(zk_leases_key, macaddr), "".encode("ascii"))
transaction.create( transaction.create(
@@ -145,6 +147,8 @@ def add_lease(zk_conn, zk_leases_key, expiry, macaddr, ipaddr, hostname, clienti
"{}/{}/clientid".format(zk_leases_key, macaddr), clientid.encode("ascii") "{}/{}/clientid".format(zk_leases_key, macaddr), clientid.encode("ascii")
) )
transaction.commit() transaction.commit()
except Exception as e:
print(f"FATAL: {e}")
def del_lease(zk_conn, zk_leases_key, macaddr, expiry): def del_lease(zk_conn, zk_leases_key, macaddr, expiry):