r1553 + completed buildLBConfig() and renderLVSConfig()
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 16 Jan 2008 12:54:33 +0000 (12:54 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 16 Jan 2008 12:54:33 +0000 (12:54 +0000)
inc/database.php
inc/interface.php

index 2f70a5e32ad4d98ce259c40e7a29b195df687c3a..1d117cf5897635bb8754d7c3f04d55263998149d 100644 (file)
@@ -2538,14 +2538,15 @@ function buildLBConfig ($object_id)
        }
        global $dbxlink;
        $ret = array();
-       $query = 'select lb.rspool_id, vs_id, vs.vsconfig as vs_vsconfig, vs.rsconfig as vs_rsconfig, ' .
-               'lb.vsconfig as lb_vsconfig, lb.rsconfig as lb_rsconfig, ' .
+       $query = 'select vs_id, inet_ntoa(vip) as vip, vport, proto, vs.name as vs_name, ' .
+               'vs.vsconfig as vs_vsconfig, vs.rsconfig as vs_rsconfig, ' .
+               'lb.vsconfig as lb_vsconfig, lb.rsconfig as lb_rsconfig, pool.id as pool_id, pool.name as pool_name, ' .
                'pool.vsconfig as pool_vsconfig, pool.rsconfig as pool_rsconfig, ' .
-               'rs.rsconfig as rs_rsconfig from ' .
-               'IPLoadBalancer as lb inner join IPVirtualService as vs on lb.vs_id = vs.id ' .
-               'inner join IPRSPool as pool on pool.id = lb.rspool_id ' .
+               'rs.id as rs_id, inet_ntoa(rsip) as rsip, rsport, rs.rsconfig as rs_rsconfig from ' .
+               'IPLoadBalancer as lb inner join IPRSPool as pool on lb.rspool_id = pool.id ' .
+               'inner join IPVirtualService as vs on lb.vs_id = vs.id ' .
                'inner join IPRealServer as rs on lb.rspool_id = rs.rspool_id ' .
-               "where lb.object_id = ${object_id}";
+               "where lb.object_id = ${object_id} order by vs.vip, vport, proto, pool.name, rs.rsip, rs.rsport";
        $result = $dbxlink->query ($query);
        if ($result == NULL)
        {
@@ -2554,6 +2555,15 @@ function buildLBConfig ($object_id)
        }
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
        {
+               $vs_id = $row['vs_id'];
+               if (!isset ($ret[$vs_id]))
+               {
+                       foreach (array ('vip', 'vport', 'proto', 'vs_name', 'vs_vsconfig', 'vs_rsconfig', 'lb_vsconfig', 'lb_rsconfig', 'pool_vsconfig', 'pool_rsconfig', 'pool_id', 'pool_name') as $c)
+                               $ret[$vs_id][$c] = $row[$c];
+                       $ret[$vs_id]['rslist'] = array();
+               }
+               foreach (array ('rsip', 'rsport', 'rs_rsconfig') as $c)
+                       $ret[$vs_id]['rslist'][$row['rs_id']][$c] = $row[$c];
        }
        $result->closeCursor();
        return $ret;
index 8117fbff8153a3558ee3c704e6059625b21ba736..840d1110a98d7ab910ef352f05cf5c37038eaff1 100644 (file)
@@ -3624,7 +3624,28 @@ function renderLVSConfig ($object_id = 0)
        }
        $lbconfig = buildLBConfig ($object_id);
        echo '<pre>';
-       print_r ($lbconfig);
+       echo "#\n#\n# This configuration has been generated automatically by RackTables\n";
+       echo "# for object_id == ${object_id}\n#\n#\n\n\n";
+       foreach ($lbconfig as $vs_id => $vsinfo)
+       {
+               $vsheader = "########################################################\n" .
+                       "# VS (id == ${vs_id}): " . (empty ($vsinfo['vs_name']) ? 'NO NAME' : $vsinfo['vs_name']) . "\n" .
+                       "# RS pool (id == ${vsinfo['pool_id']}): " . (empty ($vsinfo['pool_name']) ? 'ANONYMOUS' : $vsinfo['pool_name']) . "\n" .
+                       "########################################################\n";
+               # The order of inheritance is: VS -> LB -> pool [ -> RS ]
+               $vsconfig = $vsinfo['vs_vsconfig'] . $vsinfo['lb_vsconfig'] . $vsinfo['pool_vsconfig'];
+               echo $vsheader;
+               echo "virtual_server ${vsinfo['vip']} ${vsinfo['vport']} {\n";
+               echo "${vsconfig}\n";
+               foreach ($vsinfo['rslist'] as $rs)
+               {
+                       $rsconfig = $vsinfo['vs_rsconfig'] . $vsinfo['lb_rsconfig'] . $vsinfo['pool_rsconfig'] . $rs['rs_rsconfig'];
+                       echo "\treal_server ${rs['rsip']} ${rs['rsport']} {\n";
+                       echo "\t${rsconfig}\n";
+                       echo "\t}\n";
+               }
+               echo "}\n\n\n";
+       }
        echo '</pre>';
 }