diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 11a553cb758..a854d14fe83 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -895,6 +895,7 @@ NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource, DnsServ @Override public boolean release(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { + removeDhcpEntry(network, nic, vm); return true; } diff --git a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py index 6ea91742d78..e7abb902046 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py @@ -118,7 +118,6 @@ class CsDhcp(CsDataBag): def delete_leases(self): macs_dhcphosts = [] - interfaces = filter(lambda x: x.startswith('eth'), os.listdir('/sys/class/net')) try: logging.info("Attempting to delete entries from dnsmasq.leases file for VMs which are not on dhcphosts file") for host in open(DHCP_HOSTS): @@ -130,10 +129,9 @@ class CsDhcp(CsDataBag): mac = lease[1] ip = lease[2] if mac not in macs_dhcphosts: - for interface in interfaces: - cmd = "dhcp_release %s %s %s" % (interface, ip, mac) - logging.info(cmd) - CsHelper.execute(cmd) + cmd = "dhcp_release $(ip route get %s | grep eth | head -1 | awk '{print $3}') %s %s" % (ip, ip, mac) + logging.info(cmd) + CsHelper.execute(cmd) removed = removed + 1 self.del_host(ip) logging.info("Deleted %s entries from dnsmasq.leases file" % str(removed)) diff --git a/systemvm/debian/opt/cloud/bin/cs_dhcp.py b/systemvm/debian/opt/cloud/bin/cs_dhcp.py index 735f847dbb8..bb2ff7b07c3 100755 --- a/systemvm/debian/opt/cloud/bin/cs_dhcp.py +++ b/systemvm/debian/opt/cloud/bin/cs_dhcp.py @@ -27,11 +27,6 @@ def merge(dbag, data): del(dbag[data['ipv4_address']]) else: remove_keys = set() - for key, entry in dbag.iteritems(): - if key != 'id' and entry['host_name'] == data['host_name']: - remove_keys.add(key) - break - for key, entry in dbag.iteritems(): if key != 'id' and entry['mac_address'] == data['mac_address']: remove_keys.add(key)