r1539 + fix RS pool LB management
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 15 Jan 2008 17:44:25 +0000 (17:44 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 15 Jan 2008 17:44:25 +0000 (17:44 +0000)
inc/database.php
inc/interface.php
inc/ophandlers.php

index 0e8dfe6e511399ed16bf5159c0ea832dbcc4f9b5..3dfd601d00a096085df8986001c9244592ba4da4 100644 (file)
@@ -2088,13 +2088,13 @@ function getVServiceInfo ($vsid = 0)
 // Collect and return the following info about the given real server pool:
 // basic information
 // parent virtual service information
-// load balancers list
+// load balancers list (each with a list of VSes)
 // real servers list
 
 function getRSPoolInfo ($id = 0)
 {
        global $dbxlink;
-       $query1 = "select ${id} as id, name, vsconfig, rsconfig from " .
+       $query1 = "select id, name, vsconfig, rsconfig from " .
                "IPRSPool where id = ${id}";
        $result1 = $dbxlink->query ($query1);
        if ($result1 == NULL)
@@ -2111,7 +2111,7 @@ function getRSPoolInfo ($id = 0)
        $result1->closeCursor();
        $ret['lblist'] = array();
        $ret['rslist'] = array();
-       $query2 = "select object_id, vsconfig, rsconfig from IPLoadBalancer where rspool_id = ${id} order by object_id";
+       $query2 = "select object_id, vs_id, vsconfig, rsconfig from IPLoadBalancer where rspool_id = ${id} order by object_id";
        $result2 = $dbxlink->query ($query2);
        if ($result2 == NULL)
        {
@@ -2120,7 +2120,7 @@ function getRSPoolInfo ($id = 0)
        }
        while ($row = $result2->fetch (PDO::FETCH_ASSOC))
                foreach (array ('vsconfig', 'rsconfig') as $c)
-                       $ret['lblist'][$row['object_id']][$c] = $row[$c];
+                       $ret['lblist'][$row['object_id']][$row['vs_id']][$c] = $row[$c];
        $result2->closeCursor();
        $query3 = "select id, inet_ntoa(rsip) as rsip, rsport, rsconfig from " .
                "IPRealServer where rspool_id = ${id} order by IPRealServer.rsip, rsport";
@@ -2179,9 +2179,9 @@ function commitCreateVS ($vip = '', $vport = 0, $proto = '', $name = '', $vsconf
        );
 }
 
-function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vsconfig = '', $rsconfig = '')
+function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vs_id = 0, $vsconfig = '', $rsconfig = '')
 {
-       if ($pool_id <= 0 or $object_id <= 0)
+       if ($pool_id <= 0 or $object_id <= 0 or $vs_id <= 0)
        {
                showError ('Invalid arguments', __FUNCTION__);
                die;
@@ -2193,6 +2193,7 @@ function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vsconfig = '', $rsconfig
                (
                        'object_id' => $object_id,
                        'rspool_id' => $pool_id,
+                       'vs_id' => $vs_id,
                        'vsconfig' => (empty ($vsconfig) ? 'NULL' : "'${vsconfig}'"),
                        'rsconfig' => (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'")
                )
@@ -2213,12 +2214,13 @@ function commitDeleteVS ($id = 0)
        return useDeleteBlade ('IPVirtualService', 'id', $id);
 }
 
-function commitDeleteLB ($object_id = 0, $pool_id = 0)
+function commitDeleteLB ($object_id = 0, $pool_id = 0, $vs_id = 0)
 {
        global $dbxlink;
-       if ($object_id <= 0 or $pool_id <= 0)
+       if ($object_id <= 0 or $pool_id <= 0 or $vs_id = 0)
                return FALSE;
-       $query = "delete from IPLoadBalancer where object_id = ${object_id} and rspool_id = ${pool_id} limit 1";
+       $query = "delete from IPLoadBalancer where object_id = ${object_id} and " .
+               "rspool_id = ${pool_id} and vs_id = ${vs_id} limit 1";
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
@@ -2254,9 +2256,9 @@ function commitUpdateRS ($rsid = 0, $rsip = '', $rsport = 0, $rsconfig = '')
        return TRUE;
 }
 
-function commitUpdateLB ($object_id = 0, $pool_id = 0, $vsconfig = '', $rsconfig = '')
+function commitUpdateLB ($object_id = 0, $pool_id = 0, $vs_id = 0, $vsconfig = '', $rsconfig = '')
 {
-       if ($object_id <= 0 or $pool_id <= 0)
+       if ($object_id <= 0 or $pool_id <= 0 or $vs_id <= 0)
        {
                showError ('Invalid args', __FUNCTION__);
                die;
@@ -2267,7 +2269,8 @@ function commitUpdateLB ($object_id = 0, $pool_id = 0, $vsconfig = '', $rsconfig
                (empty ($vsconfig) ? 'NULL' : "'${vsconfig}'") .
                ', rsconfig = ' .
                (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'") .
-               " where object_id = ${object_id} and rspool_id = ${pool_id} limit 1";
+               " where object_id = ${object_id} and rspool_id = ${pool_id} " .
+               "and vs_id = ${vs_id} limit 1";
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
index 0924e9d00bdbdfc40814dc69685aecd098b7f455..7c456b063438a9338aec130326417db170136254 100644 (file)
@@ -3805,26 +3805,33 @@ function renderRSPoolLBForm ($pool_id = 0)
        showMessageOrError();
 
        $poolInfo = getRSPoolInfo ($pool_id);
+       $vs_list = array ();
+       foreach (getVSList() as $vsid => $vsinfo)
+               $vs_list[$vsid] = buildVServiceName ($vsinfo) . (empty ($vsinfo['name']) ? '' : " (${vsinfo['name']})");
        startPortlet ('Manage existing (' . count ($poolInfo['lblist']) . ')');
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
-       echo "<tr><th>&nbsp;</th><th>Object</th><th>VS config</th><th>RS config</th><th>&nbsp;</th></tr>\n";
-       foreach ($poolInfo['lblist'] as $object_id => $lbinfo)
-       {
-               $oi = getObjectInfo ($object_id);
-               echo "<form action='${root}process.php'>";
-               echo "<input type=hidden name=page value='${pageno}'>\n";
-               echo "<input type=hidden name=tab value='${tabno}'>\n";
-               echo "<input type=hidden name=op value=updLB>";
-               echo "<input type=hidden name=pool_id value='${pool_id}'>";
-               echo "<input type=hidden name=object_id value='${object_id}'>";
-               echo "<tr valign=top><td><a href='${root}process.php?page=${pageno}&tab=${tabno}&op=delLB&pool_id=${pool_id}&object_id=${object_id}'>";
-               printImageHREF ('delete', 'Unconfigure');
-               echo "</a></td>";
-               echo "<td class=tdleft><a href='${root}?page=object&object_id=${object_id}'>${oi['dname']}</a></td>";
-               echo "<td><textarea name=vsconfig>${lbinfo['vsconfig']}</textarea></td>";
-               echo "<td><textarea name=rsconfig>${lbinfo['rsconfig']}</textarea></td>";
-               echo "<td><input type=submit value=OK></td></tr></form>\n";
-       }
+       echo "<tr><th>&nbsp;</th><th>LB</th><th>VS</th><th>VS config</th><th>RS config</th><th>&nbsp;</th></tr>\n";
+       foreach ($poolInfo['lblist'] as $object_id => $vslist)
+               foreach ($vslist as $vs_id => $configs)
+               {
+                       $oi = getObjectInfo ($object_id);
+                       echo "<form action='${root}process.php'>";
+                       echo "<input type=hidden name=page value='${pageno}'>\n";
+                       echo "<input type=hidden name=tab value='${tabno}'>\n";
+                       echo "<input type=hidden name=op value=updLB>";
+                       echo "<input type=hidden name=pool_id value='${pool_id}'>";
+                       echo "<input type=hidden name=vs_id value='${vs_id}'>";
+                       echo "<input type=hidden name=object_id value='${object_id}'>";
+                       echo "<tr valign=top><td><a href='${root}process.php?page=${pageno}&tab=${tabno}&op=delLB&pool_id=${pool_id}&object_id=${object_id}'>";
+                       printImageHREF ('delete', 'Unconfigure');
+                       echo "</a></td>";
+                       echo "<td class=tdleft><a href='${root}?page=object&object_id=${object_id}'>${oi['dname']}</a></td>";
+                       echo "<td class=tdleft><a href='${root}?page=vservice&id=${vs_id}'>";
+                       echo buildVServiceName (getVServiceInfo ($vs_id));
+                       echo "<td><textarea name=vsconfig>${configs['vsconfig']}</textarea></td>";
+                       echo "<td><textarea name=rsconfig>${configs['rsconfig']}</textarea></td>";
+                       echo "<td><input type=submit value=OK></td></tr></form>\n";
+               }
        echo "</table>\n";
        finishPortlet();
 
@@ -3835,14 +3842,16 @@ function renderRSPoolLBForm ($pool_id = 0)
        echo "<input type=hidden name=tab value='${tabno}'>\n";
        echo "<input type=hidden name=op value=addLB>";
        echo "<input type=hidden name=pool_id value='${pool_id}'>";
-       echo "<tr valign=top><th>Object</th><td><select name='object_id' tabindex=1>";
+       echo "<tr valign=top><th>LB / VS</th><td class=tdleft><select name='object_id' tabindex=1>";
        foreach (array(4, 7, 8) as $type)
        {
                $objects = getObjectList ($type);
                foreach ($objects as $object)
                        echo "<option value='${object['id']}'>${object['dname']}</option>";
        }
-       echo "</select></td><td><input type=submit value=OK tabindex=2></td></tr>\n";
+       echo "</select> ";
+       printSelect ($vs_list, 'vs_id');
+       echo "</td><td><input type=submit value=OK tabindex=2></td></tr>\n";
        echo "<tr><th>VS config</th><td colspan=2><textarea name=vsconfig rows=10 cols=80></textarea></td></tr>";
        echo "<tr><th>RS config</th><td colspan=2><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
        echo "</form></table>\n";
@@ -3991,7 +4000,7 @@ function renderRSPoolList ()
 {
        global $root;
        $pool_list = getRSPoolList();
-       if ($pool_list == NULL)
+       if ($pool_list === NULL)
        {
                showError ('getRSPoolList() failed', __FUNCTION__);
                return;
index 5bad22db26f2c0eae53d87e63d30e4168c3f6299..18dca9718dc89075b69a953acd99b16cc7460be9 100644 (file)
@@ -1048,16 +1048,17 @@ function updateRealServer ()
                return "${root}?page=${pageno}&tab=${tabno}&id=${pool_id}&message=" . urlencode ("Real server was successfully updated");
 }
 
-function updateLoadbalancer ()
+function updateLoadBalancer ()
 {
        global $root, $pageno, $tabno;
 
        assertUIntArg ('object_id');
        assertUIntArg ('pool_id');
+       assertUIntArg ('vs_id');
        assertStringArg ('vsconfig', TRUE);
        assertStringArg ('rsconfig', TRUE);
        $pool_id = $_REQUEST['pool_id'];
-       if (!commitUpdateLB ($_REQUEST['object_id'], $pool_id, $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
+       if (!commitUpdateLB ($_REQUEST['object_id'], $pool_id, $_REQUEST['vs_id'], $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
                return "${root}?page=${pageno}&tab=${tabno}&id=${pool_id}&error=" . urlencode ('commitUpdateLB() failed');
        else
                return "${root}?page=${pageno}&tab=${tabno}&id=${pool_id}&message=" . urlencode ("Real server was successfully updated");
@@ -1086,10 +1087,11 @@ function addLoadBalancer ()
 
        assertUIntArg ('pool_id');
        assertUIntArg ('object_id');
+       assertUIntArg ('vs_id');
        assertStringArg ('vsconfig', TRUE);
        assertStringArg ('rsconfig', TRUE);
        $pool_id = $_REQUEST['pool_id'];
-       if (!addLBtoRSPool ($pool_id, $_REQUEST['object_id'], $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
+       if (!addLBtoRSPool ($pool_id, $_REQUEST['object_id'], $_REQUEST['vs_id'], $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
                return "${root}?page=${pageno}&tab=${tabno}&id=${pool_id}&error=" . urlencode ('addLBtoRSPool() failed');
        else
                return "${root}?page=${pageno}&tab=${tabno}&id=${pool_id}&message=" . urlencode ("Load balancer was successfully added");