config: net: avoid duplicate ipam entries on nic update

Updating the NIC of a VM when the following conditions were met:
* VM is turned off
* NIC is on a bridge that uses automatic dhcp
* Leave bridge unchanged

led to duplicate IPAM entries for the same network device.

This is due to the fact that the add_next_free_cidr always ran on
applying pending network changes.

Now we only add a new ipam entry if either:
* the value of the bridge or mac address changed
* the network device has been newly added

This way no duplicate IPAM entries should get created.

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
This commit is contained in:
Stefan Hanreich 2024-07-17 15:06:02 +02:00 committed by Thomas Lamprecht
parent 1c5001c2e7
commit 0565f489ff

View File

@ -5254,11 +5254,12 @@ sub vmconfig_apply_pending {
safe_string_ne($old_net->{macaddr}, $new_net->{macaddr})
)) {
PVE::Network::SDN::Vnets::del_ips_from_mac($old_net->{bridge}, $old_net->{macaddr}, $conf->{name});
}
}
#fixme: reuse ip if mac change && same bridge
PVE::Network::SDN::Vnets::add_next_free_cidr($new_net->{bridge}, $conf->{name}, $new_net->{macaddr}, $vmid, undef, 1);
}
} else {
PVE::Network::SDN::Vnets::add_next_free_cidr($new_net->{bridge}, $conf->{name}, $new_net->{macaddr}, $vmid, undef, 1);
}
}
};
if (my $err = $@) {
$add_apply_error->($opt, $err);