ace_session_redirect_form_refresh(_CONSOLE_URL_ . (isset($_SESSION['current_lab_id']) ? '?lab_id=' . $_SESSION['current_lab_id'] : '')); $nonce = rand(); if (isset($_POST['lab_id']) && $_POST['lab_id'] != 'null') { $lab_id = $_POST['lab_id']; $_SESSION['current_lab_id'] = $lab_id; } else { $lab_id = NULL; $_SESSION['current_lab_id'] = NULL; ace_out_redirect_page(_LAB_URL_); } # BEGIN COMMAND PROCESSING switch ($_POST['action']) { case 'vm_power_on': if (isset($_POST['vm_id'])) { $vm_display_name = ace_vm_get_display_name_by_id($_POST['vm_id']); $success = ace_vm_activate($_POST['vm_id']); $message = create_message($success, "starting {$vm_display_name}"); } else { $message = create_message(FALSE, "starting vm, no vm_id specified"); } break; case 'vm_power_off': if (isset($_POST['vm_id'])) { $vm_display_name = ace_vm_get_display_name_by_id($_POST['vm_id']); $success = ace_vm_deactivate($_POST['vm_id']); $message = create_message($success, "stopping {$vm_display_name}"); } else { $message = create_message(FALSE, "stopping vm, no vm_id specified"); } break; case 'vm_shutdown':
/** * activates a lab (deploys to a host) * * @api * * @param int $lab_id lab id * * @return bool on success TRUE/FALSE */ function ace_lab_activate($lab_id) { # only if user has no active labs (i.e. must deactivate other labs first) $user_id = ace_lab_get_user_id($lab_id); $user_lab_table = ace_user_get_lab_table($user_id); $another_user_lab_is_active = FALSE; foreach ($user_lab_table as $lab) { if ($lab['state'] == 1) { $another_user_lab_is_active = TRUE; } } if (!$another_user_lab_is_active) { # determine best host, and update lab record $host_id = ace_db_get_best_host(); if (is_numeric($host_id)) { # set lab as activated in db $db_success = ace_db_lab_set_state($lab_id, TRUE); # this lab was inactive, and was successfully activated $activated = $db_success; # update lab record with host_id ace_db_lab_set_host_id($lab_id, $host_id); # construct lab on host $net_table = ace_db_lab_get_network_table($lab_id); foreach ($net_table as $net) { # create (define) each network ace_virt_network_create($net['id']); # start each network if marked active in db if ($net['state'] == 1) { ace_virt_network_activate($net['id']); } } $vol_table = ace_db_lab_get_volume_table($lab_id); foreach ($vol_table as $vol) { # create each volume ace_virt_volume_create($vol['id']); } $vm_table = ace_db_lab_get_vm_table($lab_id); foreach ($vm_table as $vm) { # create (define) each vm ace_virt_vm_create($vm['id']); $vm_cdrom_table = ace_db_vm_get_cdrom_table($vm['id']); foreach ($vm_cdrom_table as $vm_cdrom) { ace_virt_vm_attach_cdrom($vm['id'], $vm_cdrom['instance']); if ($vm_cdrom['volume_id'] != NULL) { ace_virt_vm_cdrom_insert_media($vm['id'], $vm_cdrom['instance'], $vm_cdrom['volume_id']); } } $vm_disk_table = ace_db_vm_get_disk_table($vm['id']); foreach ($vm_disk_table as $vm_disk) { ace_virt_vm_attach_disk($vm['id'], $vm_disk['instance'], $vm_disk['volume_id']); } $vm_nic_table = ace_db_vm_get_nic_table($vm['id']); foreach ($vm_nic_table as $vm_nic) { $vm_nic_mac_address = ace_gen_convert_int2mac($vm_nic['mac_index']); ace_virt_vm_attach_nic($vm['id'], $vm_nic['instance'], $vm_nic_mac_address); ace_virt_vm_nic_connect_network($vm['id'], $vm_nic['instance'], $vm_nic['network_id']); } # set each vm state if ($vm['state'] == 1) { ace_vm_activate($vm['id']); } } } else { $activated = FALSE; } } else { $activated = FALSE; } return $activated; }
<?php $lab_state = ace_lab_is_active($lab_id); $lab_vm_table = ace_lab_get_vm_table($lab_id); foreach ($lab_vm_table as $vm) { if ($vm['user_visible'] == 1) { $vm_id = $vm['id']; $vm_active = $vm['state'] == 1 ? TRUE : FALSE; if ($lab_state) { $virt_vm_active = ace_vm_get_virt_state($vm_id); if (!$virt_vm_active && $vm_active) { $db_success = ace_vm_deactivate($vm_id); $vm['state'] = 0; $vm_active = FALSE; } if ($virt_vm_active && !$vm_active) { $db_success = ace_vm_activate($vm_id); $vm['state'] = 1; $vm_active = TRUE; } } $vm_change_state_disabled = $lab_state ? '' : 'disabled'; $vm_shutdown_button_disabled = $vm_active ? '' : 'disabled'; $vm_console_disabled = $lab_state ? '' : 'disabled'; $num_vm_cdroms = ($vm_cdroms = ace_vm_get_cdrom_table($vm_id)) ? count($vm_cdroms) : 0; $vm_cdrom_attach_disabled = $vm_active ? 'disabled' : ''; $vm_cdrom_detach_disabled = $num_vm_cdroms == 0 || $vm_active ? 'disabled' : ''; $vm_cdrom_eject_disabled = $num_vm_cdroms == 0 ? 'disabled' : ''; $num_vm_disks = ($vm_disks = ace_vm_get_disk_table($vm_id)) ? count($vm_disks) : 0; $vm_disk_attach_disabled = $vm_active ? 'disabled' : ''; $vm_disk_detach_disabled = $num_vm_disks == 0 || $vm_active ? 'disabled' : ''; $num_vm_nics = ($vm_nics = ace_vm_get_nic_table($vm_id)) ? count($vm_nics) : 0;