diff --git a/src/vm/VirtualMachinePool.cc b/src/vm/VirtualMachinePool.cc index 4864c16657..e47cdd8711 100644 --- a/src/vm/VirtualMachinePool.cc +++ b/src/vm/VirtualMachinePool.cc @@ -965,7 +965,7 @@ void VirtualMachinePool::delete_attach_disk(int vid) void VirtualMachinePool::delete_attach_nic(int vid) { VirtualMachine * vm; - VirtualMachineNic * nic; + VirtualMachineNic * nic, * p_nic; int uid; int gid; @@ -1009,6 +1009,18 @@ void VirtualMachinePool::delete_attach_nic(int vid) nic->vector_value("ALIAS_ID", alias_id); vm->clear_nic_alias_context(parent_id, alias_id); + + p_nic = vm->get_nic(parent_id); + + // As NIC is an alias, parent ALIAS_IDS array should be updated + // to remove the alias_id + std::set p_a_ids; + + one_util::split_unique(p_nic->vector_value("ALIAS_IDS"), ',', p_a_ids); + + p_a_ids.erase(nic_id); + + p_nic->replace("ALIAS_IDS", one_util::join(p_a_ids, ',')); } uid = vm->get_uid();