Beispiel #1
0
function addIPToVS()
{
    $ip_bin = assertIPArg('ip');
    $vsinfo = spotEntity('ipvs', assertUIntArg('vs_id'));
    amplifyCell($vsinfo);
    $row = array('vs_id' => $vsinfo['id'], 'vip' => $ip_bin, 'vsconfig' => NULL, 'rsconfig' => NULL);
    if ($vip = isVIPEnabled($row, $vsinfo['vips'])) {
        showError("Service already contains IP " . formatVSIP($vip));
        return;
    }
    usePreparedInsertBlade('VSIPs', $row);
    showSuccess("IP addded");
}
function renderSLBTriplets2($cell, $editable = FALSE, $hl_ip = NULL)
{
    list($realm1, $realm2) = array_values(array_diff(array('object', 'ipvs', 'ipv4rspool'), array($cell['realm'])));
    if ($editable && getConfigVar('ADDNEW_AT_TOP') == 'yes') {
        callHook('renderNewTripletForm', $realm1, $realm2);
    }
    $fields = array('ipvs' => 'vs_id', 'object' => 'object_id', 'ipv4rspool' => 'rspool_id');
    $headers = array('ipvs' => 'VS', 'object' => 'LB', 'ipv4rspool' => 'RS pool');
    $triplets = groupTriplets(getTriplets($cell));
    // sort $headers by number of grouped cells
    $new_headers = array();
    $grouped_by = array('ipvs' => 0, 'object' => 0, 'ipv4rspool' => 0);
    foreach ($triplets as $slb) {
        if (isset($slb['span'])) {
            foreach (array_keys($slb['span']) as $realm) {
                $grouped_by[$realm]++;
            }
        }
    }
    arsort($grouped_by, SORT_NUMERIC);
    foreach (array_keys($grouped_by) as $realm) {
        $new_headers[$realm] = $headers[$realm];
    }
    $headers = $new_headers;
    // render table header
    if (count($triplets)) {
        startPortlet('VS group instances (' . count($triplets) . ')');
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable><tr><th></th>";
        foreach ($headers as $realm => $header) {
            if ($realm != $cell['realm']) {
                echo "<th>{$header}</th>";
            }
        }
        echo '<th>Ports</th>';
        echo '<th>VIPs</th>';
        echo "</tr>";
    }
    addJS('js/slb_editor.js');
    addJS('js/jquery.thumbhover.js');
    $class = 'slb-checks';
    if ($editable) {
        $class .= ' editable';
    }
    // render table rows
    global $nextorder;
    $order = 'odd';
    $span = array();
    foreach ($triplets as $slb) {
        $vs_cell = spotEntity('ipvs', $slb['vs_id']);
        amplifyCell($vs_cell);
        echo makeHtmlTag('tr', array('valign' => 'top', 'class' => "row_{$order} triplet-row", 'data-object_id' => $slb['object_id'], 'data-vs_id' => $slb['vs_id'], 'data-rspool_id' => $slb['rspool_id']));
        echo '<td><a href="#" onclick="' . "slb_config_preview(event, {$slb['object_id']}, {$slb['vs_id']}, {$slb['rspool_id']}); return false" . '">' . getImageHREF('Zoom', 'config preview') . '</a></td>';
        foreach (array_keys($headers) as $realm) {
            if ($realm == $cell['realm']) {
                continue;
            }
            if (isset($span[$realm])) {
                if (--$span[$realm] <= 0) {
                    unset($span[$realm]);
                }
            } else {
                $span_html = '';
                if (isset($slb['span'][$realm])) {
                    $span[$realm] = $slb['span'][$realm] - 1;
                    $span_html = sprintf("rowspan=%d", $slb['span'][$realm]);
                }
                echo "<td {$span_html} class=tdleft>";
                $slb_cell = spotEntity($realm, $slb[$fields[$realm]]);
                renderSLBEntityCell($slb_cell);
                echo "</td>";
            }
        }
        // render ports
        echo "<td class=tdleft><ul class='{$class}'>";
        foreach ($vs_cell['ports'] as $port) {
            echo '<li class="' . (($row = isPortEnabled($port, $slb['ports'])) ? 'enabled' : 'disabled') . '">';
            echo formatVSPort($port) . getPopupSLBConfig($row);
            if ($editable) {
                renderPopupTripletForm($slb, $port, NULL, $row);
            }
            echo '</li>';
        }
        echo '</ul></td>';
        // render VIPs
        echo "<td class=tdleft><ul class='{$class}'>";
        foreach ($vs_cell['vips'] as $vip) {
            $row = isVIPEnabled($vip, $slb['vips']);
            $li_class = $row ? 'enabled' : 'disabled';
            if ($vip['vip'] === $hl_ip && $li_class == 'enabled') {
                $li_class .= ' highlight';
            }
            echo "<li class='{$li_class}'>";
            echo formatVSIP($vip);
            if (is_array($row) && !empty($row['prio'])) {
                $prio_class = 'slb-prio slb-prio-' . preg_replace('/\\s.*/', '', $row['prio']);
                echo '<span class="' . htmlspecialchars($prio_class, ENT_QUOTES) . '">' . htmlspecialchars($row['prio']) . '</span>';
            }
            echo getPopupSLBConfig($row);
            if ($editable) {
                renderPopupTripletForm($slb, NULL, $vip, $row);
            }
            echo '</li>';
        }
        echo '<ul></td>';
        if ($editable) {
            echo '<td valign=middle>';
            printOpFormIntro('del', array('object_id' => $slb['object_id'], 'vs_id' => $slb['vs_id'], 'rspool_id' => $slb['rspool_id']));
            printImageHREF('DELETE', 'Remove triplet', TRUE);
            echo '</form></td>';
        }
        echo "</tr>\n";
        $order = $nextorder[$order];
    }
    if (count($triplets)) {
        echo "</table>\n";
        finishPortlet();
    }
    if ($editable && getConfigVar('ADDNEW_AT_TOP') != 'yes') {
        callHook('renderNewTripletForm', $realm1, $realm2);
    }
}