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,21 +130,25 @@ 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 = ""
transaction = zk_conn.transaction() try:
transaction.create("{}/{}".format(zk_leases_key, macaddr), "".encode("ascii")) zk_conn.delete("{}/{}".format(zk_leases_key, macaddr), recursive=True)
transaction.create( transaction = zk_conn.transaction()
"{}/{}/expiry".format(zk_leases_key, macaddr), expiry.encode("ascii") transaction.create("{}/{}".format(zk_leases_key, macaddr), "".encode("ascii"))
) transaction.create(
transaction.create( "{}/{}/expiry".format(zk_leases_key, macaddr), expiry.encode("ascii")
"{}/{}/ipaddr".format(zk_leases_key, macaddr), ipaddr.encode("ascii") )
) transaction.create(
transaction.create( "{}/{}/ipaddr".format(zk_leases_key, macaddr), ipaddr.encode("ascii")
"{}/{}/hostname".format(zk_leases_key, macaddr), hostname.encode("ascii") )
) transaction.create(
transaction.create( "{}/{}/hostname".format(zk_leases_key, macaddr), hostname.encode("ascii")
"{}/{}/clientid".format(zk_leases_key, macaddr), clientid.encode("ascii") )
) transaction.create(
transaction.commit() "{}/{}/clientid".format(zk_leases_key, macaddr), clientid.encode("ascii")
)
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):