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)); }
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); }
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; }
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; }
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> </th><th>Address</th><th>Port</th><th>Comment</th><th>in service</th><th>configuration</th><th> </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(); }