r1522 + implement RS pool management
authorDenis Ovsienko <infrastation@yandex.ru>
Mon, 14 Jan 2008 18:42:30 +0000 (18:42 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 14 Jan 2008 18:42:30 +0000 (18:42 +0000)
+ fix VS management

inc/database.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php

index afc89795a9d1b63f06d4054d8dcdadc79e72ff7b..4f9bf62dfadbbb199d68d903ff39e82d76eb8e7e 100644 (file)
@@ -2268,8 +2268,8 @@ function commitUpdateVS ($vsid = 0, $vip = '', $vport = 0, $proto = '', $name =
                "proto = '${proto}', " .
                'name = ' . (empty ($name) ? 'NULL,' : "'${name}', ") .
                'vsconfig = ' . (empty ($vsconfig) ? 'NULL,' : "'${vsconfig}', ") .
-               'rsconfig = ' . (empty ($rsconfig) ? 'NULL,' : "'${rsconfig}' ") .
-               "where id = ${vsid} limit 1";
+               'rsconfig = ' . (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'") .
+               " where id = ${vsid} limit 1";
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
@@ -2396,4 +2396,61 @@ function getRSPoolsForObject ($object_id = 0)
        return $pool_list;
 }
 
+function commitCreateRSPool ($vs_id = 0, $name = '', $vsconfig, $rsconfig)
+{
+       if ($vs_id <= 0)
+       {
+               showError ('Invalid argument', __FUNCTION__);
+               die;
+       }
+       return useInsertBlade
+       (
+               'IPRSPool',
+               array
+               (
+                       'vs_id' => $vs_id,
+                       'name' => (empty ($name) ? 'NULL' : "'${name}'"),
+                       'vsconfig' => (empty ($vsconfig) ? 'NULL' : "'${vsconfig}'"),
+                       'rsconfig' => (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'")
+               )
+       );
+}
+
+function commitDeleteRSPool ($pool_id = 0)
+{
+       global $dbxlink;
+       if ($pool_id <= 0)
+               return FALSE;
+       $query = "delete from IPRSPool where id = ${pool_id} limit 1";
+       $result = $dbxlink->exec ($query);
+       if ($result === NULL)
+               return FALSE;
+       elseif ($result != 1)
+               return FALSE;
+       else
+               return TRUE;
+}
+
+function commitUpdateRSPool ($pool_id = 0, $name = '', $vsconfig = '', $rsconfig = '')
+{
+       if ($pool_id <= 0)
+       {
+               showError ('Invalid arg', __FUNCTION__);
+               die;
+       }
+       global $dbxlink;
+       $query = "update IPRSPool set " .
+               'name = ' . (empty ($name) ? 'NULL,' : "'${name}', ") .
+               'vsconfig = ' . (empty ($vsconfig) ? 'NULL,' : "'${vsconfig}', ") .
+               'rsconfig = ' . (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'") .
+               " where id = ${pool_id} limit 1";
+       $result = $dbxlink->exec ($query);
+       if ($result === NULL)
+               return FALSE;
+       elseif ($result != 1)
+               return FALSE;
+       else
+               return TRUE;
+}
+
 ?>
index d5fddaa9ad113ea16dedf6183c71f56192cc8555..109c562082bdcaa9a9be3e52867655e8d58ec2f7 100644 (file)
@@ -4026,4 +4026,66 @@ function renderRSPoolList ()
        echo "</table>";
 }
 
+function editRSPools ()
+{
+       global $root, $pageno, $tabno;
+       showMessageOrError();
+       $pool_list = getRSPoolList();
+       // Something we are going to render as a SELECT element later.
+       $vs_list = array ();
+       foreach (getVSList() as $vsid => $vsinfo)
+               $vs_list[$vsid] = buildVServiceName ($vsinfo) . (empty ($vsinfo['name']) ? '' : " (${vsinfo['name']})");
+
+       startPortlet ('Manage existing');
+       echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
+       echo "<tr><th>&nbsp;</th><th>parent VS</th><th>name</th><th>VS configuration</th><th>RS configuration</th><th>&nbsp;</th></tr>";
+       foreach ($pool_list as $pool_id => $pool_info)
+       {
+               echo "<form method=post action='${root}process.php'>\n";
+               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=upd>\n";
+               echo "<input type=hidden name=id value=${pool_id}>\n";
+               echo "<tr valign=top><td>";
+               if ($pool_info['rscount'])
+                       echo '&nbsp;';
+               else
+               {
+                       echo "<a href='${root}process.php?page=${pageno}&tab=${tabno}&op=del&id=${pool_id}'>";
+                       printImageHREF ('delete', 'delete real server pool');
+                       echo '</a>';
+               }
+               echo "</td><td class=tdleft>";
+               printSelect ($vs_list, 'vs_id', $pool_info['vs_id']);
+               echo "</td>";
+               echo "<td class=tdleft><input type=text name=name value='${pool_info['name']}'></td>";
+               echo "<td><textarea name=vsconfig>${pool_info['vsconfig']}</textarea></td>";
+               echo "<td><textarea name=rsconfig>${pool_info['rsconfig']}</textarea></td>";
+               echo "<td><input type=submit value=OK></td>";
+               echo "</tr></form>\n";
+       }
+       echo "</table>";
+       finishPortlet();
+
+       startPortlet ('Add new');
+       echo "<form method=post action='${root}process.php'>\n";
+       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=add>\n";
+       echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
+       echo "<tr><th>&nbsp;</th><th>parent VS</th><th>name</th><th>&nbsp;</th></tr>";
+       echo "<tr valign=top><td>&nbsp;</td><td>";
+       // FIXME: change printSelect to accept tabindex and markup this form appropriately (others probably as well).
+       // Note: array_merge() will renumber array keys and mess things up. Use '+' instead.
+       $vs_list = array (0 => 'select virtual service') + $vs_list;
+       printSelect ($vs_list, 'vs_id', 0);
+       echo "</td>";
+       echo "<td class=tdleft><input type=text name=name></td>";
+       echo "<td rowspan=3 valign=middle><input type=submit value=OK></td></tr>";
+       echo "<tr><th>VS configuration</th><td colspan=2><textarea name=vsconfig rows=10 cols=80></textarea></td></tr>";
+       echo "<tr><th>RS configuration</th><td colspan=2><textarea name=rsconfig rows=10 cols=80></textarea></td></tr>";
+       echo "</table></form>";
+       finishPortlet();
+}
+
 ?>
index 506b503c0b6483e5b481310199ee7c9b27f54132..f6e92fd3d2d65a0786c59390a0e7fb263b68eecd 100644 (file)
@@ -167,7 +167,12 @@ $page['vservice']['handler'] = 'renderVirtualService';
 $page['rspools']['title'] = 'RS pools';
 $page['rspools']['parent'] = 'ipv4space';
 $tab['rspools']['default'] = 'View';
+$tab['rspools']['edit'] = 'Edit';
 $tabhandler['rspools']['default'] = 'renderRSPoolList';
+$tabhandler['rspools']['edit'] = 'editRSPools';
+$ophandler['rspools']['edit']['add'] = 'addRSPool';
+$ophandler['rspools']['edit']['del'] = 'deleteRSPool';
+$ophandler['rspools']['edit']['upd'] = 'updateRSPool';
 
 $page['rspool']['title_handler'] = 'dynamic_title_rspool';
 $page['rspool']['parent'] = 'rspools';
index b12baf2c80ef5528fc0a0235043efbcf3304df2e..ce49dd6eb953b97831e141a6cbbf2c7b204ffb8f 100644 (file)
@@ -1089,13 +1089,49 @@ function addLoadBalancer ()
        assertStringArg ('vsconfig', TRUE);
        assertStringArg ('rsconfig', TRUE);
        $pool_id = $_REQUEST['pool_id'];
-       $object_id = $_REQUEST['object_id'];
-       $vsconfig = $_REQUEST['vsconfig'];
-       $rsconfig = $_REQUEST['rsconfig'];
-       if (!addLBtoRSPool ($pool_id, $object_id, $vsconfig, $rsconfig))
+       if (!addLBtoRSPool ($pool_id, $_REQUEST['object_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");
 }
 
+function addRSPool ()
+{
+       global $root, $pageno, $tabno;
+
+       assertUIntArg ('vs_id');
+       assertStringArg ('name', TRUE);
+       assertStringArg ('vsconfig', TRUE);
+       assertStringArg ('rsconfig', TRUE);
+       if (!commitCreateRSPool ($_REQUEST['vs_id'], $_REQUEST['name'], $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
+               return "${root}?page=${pageno}&tab=${tabno}&error=" . urlencode ('commitCreateRSPool() failed');
+       else
+               return "${root}?page=${pageno}&tab=${tabno}&message=" . urlencode ("Real server pool was successfully created");
+}
+
+function deleteRSPool ()
+{
+       global $root, $pageno, $tabno;
+
+       assertUIntArg ('id');
+       if (!commitDeleteRSPool ($_REQUEST['id']))
+               return "${root}?page=${pageno}&tab=${tabno}&error=" . urlencode ('commitDeleteRSPool() failed');
+       else
+               return "${root}?page=${pageno}&tab=${tabno}&message=" . urlencode ("Real server pool was successfully deleted");
+}
+
+function updateRSPool ()
+{
+       global $root, $pageno, $tabno;
+
+       assertUIntArg ('id');
+       assertStringArg ('name', TRUE);
+       assertStringArg ('vsconfig', TRUE);
+       assertStringArg ('rsconfig', TRUE);
+       if (!commitUpdateRSPool ($_REQUEST['id'], $_REQUEST['name'], $_REQUEST['vsconfig'], $_REQUEST['rsconfig']))
+               return "${root}?page=${pageno}&tab=${tabno}&error=" . urlencode ('commitUpdateRSPool() failed');
+       else
+               return "${root}?page=${pageno}&tab=${tabno}&message=" . urlencode ("Real server pool was successfully updated");
+}
+
 ?>