$start = $_GET["start"]; } else { $start = 0; } $filter['filter'] = $_GET["filter"]; if (!empty($_GET['uuid'])) { $filter['machine'] = $_GET['hostname']; $filter['uuid'] = $_GET['uuid']; } else { $filter['group'] = $group->id; } # TODO : decide what we want to do with groups : do we only get the first machine local packages list($count, $packages) = advGetAllPackages($filter, $start, $start + $maxperpage); $err = array(); foreach ($packages as $c_package) { $package = to_package($c_package[0]); $type = $c_package[1]; $p_api = new ServerAPI($c_package[2]); if ($c_package[0]['ERR'] && $c_package[0]['ERR'] == 'PULSE2ERROR_GETALLPACKAGE') { $err[] = sprintf(_T("MMC failed to contact package server %s.", "msc"), $c_package[0]['mirror']); } else { $a_packages[] = $package->label; $a_description[] = $package->description; $a_pversions[] = $package->version; $a_sizes[] = prettyOctetDisplay($package->size); if ($group != null) { $current_convergence_status = getConvergenceStatus($p_api->mountpoint, $package->id, $group_convergence_status, $package->associateinventory); // set param_convergence_edit to True if convergence status is active or inactive $param_convergence_edit = in_array($current_convergence_status, array(1, 2)) ? True : False; $a_convergence_status[] = prettyConvergenceStatusDisplay($current_convergence_status); $a_convergence_action[] = $package->associateinventory ? $convergenceAction : $emptyAction;
function start_a_command($proxy = array()) { if ($_POST['editConvergence']) { $changed_params = getChangedParams($_POST); if ($changed_params == array('active')) { print "We have to edit command...."; } } $error = ""; if (!check_date($_POST)) { $error .= _T("Your start and end dates are not coherent, please check them.<br/>", "msc"); } # should add some other tests on fields (like int are int? ...) if ($error != '') { new NotifyWidgetFailure($error); complete_post(); $url = "base/computers/msctabs?"; foreach ($_GET as $k => $v) { $url .= "{$v}={$k}"; } header("Location: " . urlStrRedirect("msc/logs/viewLogs", array_merge($_GET, $_POST, array('failure' => True)))); exit; } // Vars seeding $post = $_POST; $from = $post['from']; $path = explode('|', $from); $module = $path[0]; $submod = $path[1]; $page = $path[2]; $params = array(); foreach (array('start_script', 'clean_on_success', 'do_reboot', 'do_wol', 'next_connection_delay', 'max_connection_attempt', 'do_inventory', 'ltitle', 'parameters', 'papi', 'maxbw', 'deployment_intervals', 'max_clients_per_proxy', 'launchAction') as $param) { $params[$param] = $post[$param]; } $halt_to = array(); foreach ($post as $p => $v) { if (preg_match('/^issue_halt_to_/', $p)) { $p = preg_replace('/^issue_halt_to_/', '', $p); if ($v == 'on') { $halt_to[] = $p; } } } $params['issue_halt_to'] = $halt_to; $p_api = new ServerAPI(); $p_api->fromURI($post['papi']); foreach (array('start_date', 'end_date') as $param) { if ($post[$param] == _T("now", "msc")) { $params[$param] = "0000-00-00 00:00:00"; } elseif ($post[$param] == _T("never", "msc")) { $params[$param] = "0000-00-00 00:00:00"; } else { $params[$param] = $post[$param]; } } $pid = $post['pid']; $mode = $post['copy_mode']; if (isset($post['uuid']) && $post['uuid']) { // command on a single target $hostname = $post['hostname']; $uuid = $post['uuid']; $target = array($uuid); $tab = 'tablogs'; /* record new command */ $id = add_command_api($pid, $target, $params, $p_api, $mode, NULL); if (!isXMLRPCError()) { scheduler_start_these_commands('', array($id)); /* then redirect to the logs page */ header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => $tab, 'uuid' => $uuid, 'hostname' => $hostname, 'cmd_id' => $id))); exit; } else { /* Return to the launch tab, the backtrace will be displayed */ header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => 'tablaunch', 'uuid' => $uuid, 'hostname' => $hostname))); exit; } } else { # command on a whole group $gid = $post['gid']; $tab = 'grouptablogs'; // record new command // given a proxy list and a proxy style, we now have to build or proxy chain // target structure is an dict using the following stucture: "priority" => array(proxies) $ordered_proxies = array(); if ($_POST['proxy_mode'] == 'multiple') { // first case: split mode; every proxy got the same priority (1 in our case) foreach ($proxy as $p) { array_push($ordered_proxies, array('uuid' => $p, 'priority' => 1, 'max_clients' => $_POST['max_clients_per_proxy'])); } $params['proxy_mode'] = 'split'; } elseif ($_POST['proxy_mode'] == 'single') { // second case: queue mode; one priority level per proxy, starting at 1 $current_priority = 1; foreach ($proxy as $p) { array_push($ordered_proxies, array('uuid' => $p, 'priority' => $current_priority, 'max_clients' => $_POST['max_clients_per_proxy'])); $current_priority += 1; } $params['proxy_mode'] = 'queue'; } if (quick_get('convergence')) { $active = $_POST['active'] == 'on' ? 1 : 0; $cmd_type = 2; // Convergence command type if (quick_get('editConvergence')) { /* Stop command */ $cmd_id = xmlrpc_get_convergence_command_id($gid, $p_api, $pid); stop_command($cmd_id); /* Set end date of this command to now(), don't touch to start date */ $start_date = _get_command_start_date($cmd_id); extend_command($cmd_id, $start_date, date("Y-m-d H:i:s")); /* Create new command */ $deploy_group_id = xmlrpc_get_deploy_group_id($gid, $p_api, $pid); $command_id = add_command_api($pid, NULL, $params, $p_api, $mode, $deploy_group_id, $ordered_proxies, $cmd_type); if (!$active) { // If this convergence is not active, expire this command $start_date = _get_command_start_date($command_id); extend_command($command_id, $start_date, date("Y-m-d H:i:s")); } /* Update convergence DB */ $updated_datas = array('active' => $active, 'commandId' => intval($command_id), 'cmdPhases' => $params); xmlrpc_edit_convergence_datas($gid, $p_api, $pid, $updated_datas); } else { /* Create convergence */ // create sub-groups $group = new Group($gid, True); $package = to_package(getPackageDetails($p_api, $pid)); $convergence_groups = $group->createConvergenceGroups($package); $deploy_group_id = $convergence_groups['deploy_group_id']; $done_group_id = $convergence_groups['done_group_id']; // Add command on sub-group $command_id = add_command_api($pid, NULL, $params, $p_api, $mode, $deploy_group_id, $ordered_proxies, $cmd_type); if (!$active) { // If this convergence is not active, expire this command $start_date = _get_command_start_date($command_id); extend_command($command_id, $start_date, date("Y-m-d H:i:s")); } // feed convergence db xmlrpc_add_convergence_datas($gid, $deploy_group_id, $done_group_id, $pid, $p_api, intval($command_id), $active, $params); } header("Location: " . urlStrRedirect("base/computers/groupmsctabs", array('gid' => $gid))); exit; } else { $id = add_command_api($pid, NULL, $params, $p_api, $mode, $gid, $ordered_proxies); scheduler_start_these_commands('', array($id)); // then redirect to the logs page header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => $tab, 'gid' => $gid, 'cmd_id' => $id, 'proxy' => $proxy))); exit; } } }