/** * fetch next available (within quota) vm instance number for a given lab id * * @param int $lab_id lab id * * @return int|bool vm instance number | FALSE on error */ function ace_db_lab_get_available_vm_instance($lab_id) { $quota_array = ace_db_lab_get_quota_array($lab_id); $vm_quota = $quota_array['vms']; $instance_list = array(); $table = ace_db_lab_get_vm_table($lab_id); if (is_array($table)) { for ($row = 0; $row < count($table); $row++) { $instance_list[$row] = $table[$row]['instance']; } $valid_instances = range(0, $vm_quota); $available_instances = array_diff($valid_instances, $instance_list); if (count($available_instances) > 0) { $available_instance = reset($available_instances); $return = $available_instance; } else { $return = FALSE; } } else { $return = 0; } return $return; }
/** * deletes a lab * * @api * * @param int $lab_id lab id * * @return bool on success TRUE/FALSE */ function ace_lab_delete($lab_id) { if (ace_lab_is_active($lab_id)) { ace_lab_deactivate($lab_id); } $lab_group_ids = ace_lab_get_group_ids($lab_id); if (is_array($lab_group_ids)) { foreach ($lab_group_ids as $group_id) { ace_group_remove_lab($group_id, $lab_id); } } $vm_table = ace_db_lab_get_vm_table($lab_id); foreach ($vm_table as $vm) { $cdrom_table = ace_db_vm_get_cdrom_table($vm['id']); foreach ($cdrom_table as $cdrom) { ace_db_vm_detach_cdrom($cdrom['vm_id'], $cdrom['instance']); } $disk_table = ace_db_vm_get_disk_table($vm['id']); foreach ($disk_table as $disk) { ace_db_vm_detach_disk($disk['vm_id'], $disk['instance']); } $nic_table = ace_db_vm_get_nic_table($vm['id']); foreach ($nic_table as $nic) { ace_db_vm_detach_nic($nic['vm_id'], $nic['instance']); } ace_db_vm_delete($vm['id']); } $volume_table = ace_db_lab_get_volume_table($lab_id); foreach ($volume_table as $volume) { ace_db_volume_delete($volume['id']); } $network_table = ace_db_lab_get_network_table($lab_id); foreach ($network_table as $network) { ace_db_network_delete($network['id']); } return ace_db_lab_delete($lab_id); }