Пример #1
0
function cloneRSPool()
{
    assertUIntArg('pool_id');
    $pool = spotEntity('ipv4rspool', $_REQUEST['pool_id']);
    $rs_list = getRSListInPool($pool['id']);
    $tagidlist = array();
    foreach ($pool['etags'] as $taginfo) {
        $tagidlist[] = $taginfo['id'];
    }
    $new_id = commitCreateRSPool($pool['name'] . ' (copy)', $pool['vsconfig'], $pool['rsconfig'], $tagidlist);
    foreach ($rs_list as $rs) {
        addRStoRSPool($new_id, $rs['rsip_bin'], $rs['rsport'], $rs['inservice'], $rs['rsconfig'], $rs['comment']);
    }
    showSuccess('Created a copy of pool  ' . mkA($pool['name'], 'ipv4rspool', $pool['id']));
    return buildRedirectURL('ipv4rspool', 'default', array('pool_id' => $new_id));
}
Пример #2
0
 public function getRSList()
 {
     if (isset($this->macros['RSP_ID'])) {
         return getRSListInPool($this->macros['RSP_ID']);
     }
     return array();
 }
function renderRSPoolServerForm($pool_id)
{
    $poolInfo = spotEntity('ipv4rspool', $pool_id);
    startPortlet("Manage RS list ({$poolInfo['rscount']})");
    renderEditRSList(getRSListInPool($pool_id));
    finishPortlet();
    portletRSPoolAddMany($pool_id);
}
Пример #4
0
 public function generateConfig()
 {
     $parser = $this->prepareParser();
     // return the expanded VS template using prepared $macros array
     $ret = $parser->expand("\n# LB (id == %LB_ID%): %LB_NAME%\n# VS (id == %VS_ID%): %VS_NAME%\n# RS (id == %RSP_ID%): %RSP_NAME%\nvirtual_server %VS_HEADER% {\n\tprotocol %PROTO%\n\t%GLOBAL_VS_CONF%\n\t%RSP_VS_CONF%\n\t%VS_VS_CONF%\n\t%SLB_VS_CONF%\n");
     foreach (getRSListInPool($this->rs['id']) as $rs) {
         if ($rs['inservice'] != 'yes') {
             continue;
         }
         $parser->pushdefs();
         // backup macros
         $this->prepareParserForRS($parser, $rs);
         // do not add v6 reals into v4 service and vice versa
         $rsip_bin = ip_checkparse($parser->expandMacro('RSIP'));
         if ($rsip_bin !== FALSE && strlen($rsip_bin) == strlen($this->vs['vip_bin'])) {
             foreach (explode(',', $parser->expandMacro('RSPORT')) as $rsp_token) {
                 $port_range = explode('-', $rsp_token);
                 if (count($port_range) < 1) {
                     throw new InvalidArgException('RSPORT', $rsp_token, "invalid RS port range");
                 }
                 if (count($port_range) < 2) {
                     $port_range[] = $port_range[0];
                 }
                 if ($port_range[0] > $port_range[1]) {
                     throw new InvalidArgException('RSPORT', $rsp_token, "invalid RS port range");
                 }
                 for ($rsport = $port_range[0]; $rsport <= $port_range[1]; $rsport++) {
                     $parser->pushdefs();
                     $parser->addMacro('RSPORT', $rsport);
                     $ret .= $parser->expand("\n\t%RS_PREPEND%\n\treal_server %RS_HEADER% {\n\t\t%GLOBAL_RS_CONF%\n\t\t%VS_RS_CONF%\n\t\t%RSP_RS_CONF%\n\t\t%SLB_RS_CONF%\n\t\t%RS_RS_CONF%\n\t}\n");
                     $parser->popdefs();
                 }
             }
         }
         $parser->popdefs();
         // restore original (VS-driven) macros
     }
     $ret .= "}\n";
     return $ret;
 }
Пример #5
0
 function generateConfig()
 {
     // fill the predefined macros
     $parser = $this->createParser();
     $parser->addMacro('LB_ID', $this->lb['id']);
     $parser->addMacro('LB_NAME', $this->lb['name']);
     $parser->addMacro('VS_ID', $this->vs['id']);
     $parser->addMacro('VS_NAME', $this->vs['name']);
     $parser->addMacro('RSP_ID', $this->rs['id']);
     $parser->addMacro('RSP_NAME', $this->rs['name']);
     $parser->addMacro('VIP', $this->vs['vip']);
     $parser->addMacro('VPORT', $this->vs['vport']);
     $parser->addMacro('PRIO', $this->slb['prio']);
     $parser->addMacro('IP_VER', strlen($this->vs['vip_bin']) == 16 ? 6 : 4);
     if ($this->vs['proto'] == 'MARK') {
         $parser->addMacro('PROTO', 'TCP');
         $mark = implode('', unpack('N', substr($this->vs['vip_bin'], 0, 4)));
         $parser->addMacro('MARK', $mark);
         $parser->addMacro('VS_HEADER', "fwmark {$mark}");
     } else {
         $parser->addMacro('VS_HEADER', $this->vs['vip'] . ' ' . $this->vs['vport']);
         $parser->addMacro('PROTO', $this->vs['proto']);
     }
     $defaults = getSLBDefaults(TRUE);
     $parser->addMacro('GLOBAL_VS_CONF', dos2unix($defaults['vs']));
     $parser->addMacro('RSP_VS_CONF', dos2unix($this->rs['vsconfig']));
     $parser->addMacro('VS_VS_CONF', dos2unix($this->vs['vsconfig']));
     $parser->addMacro('SLB_VS_CONF', dos2unix($this->slb['vsconfig']));
     // return the expanded VS template using prepared $macros array
     $ret = $parser->expand("\n# LB (id == %LB_ID%): %LB_NAME%\n# VS (id == %VS_ID%): %VS_NAME%\n# RS (id == %RSP_ID%): %RSP_NAME%\nvirtual_server %VS_HEADER% {\n\tprotocol %PROTO%\n\t%GLOBAL_VS_CONF%\n\t%RSP_VS_CONF%\n\t%VS_VS_CONF%\n\t%SLB_VS_CONF%\n");
     foreach (getRSListInPool($this->rs['id']) as $rs) {
         // do not add v6 reals into v4 service and vice versa
         if (strlen($rs['rsip_bin']) != strlen($this->vs['vip_bin'])) {
             continue;
         }
         if ($rs['inservice'] != 'yes') {
             continue;
         }
         $parser->pushdefs();
         // backup macros
         $parser->addMacro('RS_HEADER', $this->vs['proto'] == 'MARK' ? '%RSIP%' : '%RSIP% %RSPORT%');
         $parser->addMacro('RSIP', $rs['rsip']);
         $parser->addMacro('RSPORT', isset($rs['rsport']) ? $rs['rsport'] : $this->vs['vport']);
         // VS port is a default value for RS port
         $parser->addMacro('RS_COMMENT', $rs['comment']);
         $parser->addMacro('GLOBAL_RS_CONF', dos2unix($defaults['rs']));
         $parser->addMacro('VS_RS_CONF', dos2unix($this->vs['rsconfig']));
         $parser->addMacro('RSP_RS_CONF', dos2unix($this->rs['rsconfig']));
         $parser->addMacro('SLB_RS_CONF', dos2unix($this->slb['rsconfig']));
         $parser->addMacro('RS_RS_CONF', $rs['rsconfig']);
         $ret .= $parser->expand("\n\t%RS_PREPEND%\n\treal_server %RS_HEADER% {\n\t\t%GLOBAL_RS_CONF%\n\t\t%VS_RS_CONF%\n\t\t%RSP_RS_CONF%\n\t\t%SLB_RS_CONF%\n\t\t%RS_RS_CONF%\n\t}\n");
         $parser->popdefs();
         // restore original (VS-driven) macros
     }
     $ret .= "}\n";
     return $ret;
 }
Пример #6
0
function renderRSPoolServerForm($pool_id)
{
    global $nextorder;
    $poolInfo = spotEntity('ipv4rspool', $pool_id);
    if ($poolInfo['rscount']) {
        startPortlet("Manage RS list ({$poolInfo['rscount']})");
        echo "<table cellspacing=0 cellpadding=5 align=center class=cooltable>\n";
        echo "<tr><th>&nbsp;</th><th>Address</th><th>Port</th><th>Comment</th><th>in service</th><th>configuration</th><th>&nbsp;</th></tr>\n";
        // new RS form
        printOpFormIntro('addRS');
        echo "<tr class=row_odd valign=top><td>";
        printImageHREF('add', 'Add new real server');
        echo "</td><td><input type=text name=rsip></td>";
        $default_port = getConfigVar('DEFAULT_SLB_RS_PORT');
        if ($default_port == 0) {
            $default_port = '';
        }
        echo "<td><input type=text name=rsport size=5 value='{$default_port}'></td>";
        echo "<td><input type=text name=comment size=15></td>";
        $checked = getConfigVar('DEFAULT_IPV4_RS_INSERVICE') == 'yes' ? 'checked' : '';
        echo "<td><input type=checkbox name=inservice {$checked}></td>";
        echo "<td><textarea name=rsconfig></textarea></td><td>";
        printImageHREF('ADD', 'Add new real server', TRUE);
        echo "</td></tr></form>\n";
        $order = 'even';
        foreach (getRSListInPool($pool_id) as $rsid => $rs) {
            printOpFormIntro('updRS', array('rs_id' => $rsid));
            echo "<tr valign=top class=row_{$order}><td><a href='" . makeHrefProcess(array('op' => 'delRS', 'pool_id' => $pool_id, 'id' => $rsid)) . "'>";
            printImageHREF('delete', 'Delete this real server');
            echo "</td><td><input type=text name=rsip value='{$rs['rsip']}'></td>";
            echo "<td><input type=text name=rsport size=5 value='{$rs['rsport']}'></td>";
            echo "<td><input type=text name=comment size=15 value='{$rs['comment']}'></td>";
            $checked = $rs['inservice'] == 'yes' ? 'checked' : '';
            echo "<td><input type=checkbox name=inservice {$checked}></td>";
            echo "<td><textarea name=rsconfig>{$rs['rsconfig']}</textarea></td><td>";
            printImageHREF('SAVE', 'Save changes', TRUE);
            echo "</td></tr></form>\n";
            $order = $nextorder[$order];
        }
        echo "</table>\n";
        finishPortlet();
    }
    startPortlet('Add many');
    printOpFormIntro('addMany');
    echo "<table border=0 align=center>\n<tr><td>";
    if (getConfigVar('DEFAULT_IPV4_RS_INSERVICE') == 'yes') {
        printImageHREF('inservice', 'in service');
    } else {
        printImageHREF('notinservice', 'NOT in service');
    }
    echo "</td><td>Format: ";
    $formats = callHook('getBulkRealsFormats');
    printSelect($formats, array('name' => 'format'));
    echo "</td><td><input type=submit value=Parse></td></tr>\n";
    echo "<tr><td colspan=3><textarea name=rawtext cols=100 rows=25></textarea></td></tr>\n";
    echo "</table>\n";
    finishPortlet();
}