r2081 + make SLB submitter a distinct ophandler
authorDenis Ovsienko <infrastation@yandex.ru>
Mon, 28 Jul 2008 12:31:00 +0000 (12:31 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 28 Jul 2008 12:31:00 +0000 (12:31 +0000)
+ fix slbconfig message log
+ introduce oneLiner() and make use of it

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

index dff398164d2b2b6c13352763f8bd586ff5127c69..ff03b9f8c14d2cc2506daa00bc2e5ddf9a57af0c 100644 (file)
@@ -2442,7 +2442,7 @@ function getLBList ()
 // attached (each with vsconfig/rsconfig in turn), each with the list of
 // virtual services terminating the pool. Each pool also lists all real
 // servers with rsconfig.
-function buildLBConfig ($object_id)
+function getSLBConfig ($object_id)
 {
        if ($object_id <= 0)
        {
index 01fc9b41676b8b59fc02736d9b2ffda7e4d18586..776ed0a2f7334f65aaf4c2bc776800c2c9738558 100644 (file)
@@ -1111,15 +1111,6 @@ function getObjectCount ($rackData)
        return count ($objects);
 }
 
-// Perform substitutions and return resulting string
-function apply_macros ($macros, $subject)
-{
-       $ret = $subject;
-       foreach ($macros as $search => $replace)
-               $ret = str_replace ($search, $replace, $ret);
-       return $ret;
-}
-
 // Make sure the string is always wrapped with LF characters
 function lf_wrap ($str)
 {
@@ -1591,10 +1582,15 @@ function buildRedirectURL ($status, $args = array(), $nextpage = NULL, $nexttab
                $nextpage = $pageno;
        if ($nexttab === NULL)
                $nexttab = $tabno;
-       $code = $msgcode[$pageno][$tabno][$op][$status];
-       $log = array ('v' => 2);
-       $log['m'][] = count ($args) ? array ('c' => $code, 'a' => $args) : array ('c' => $code);
-       return buildWideRedirectURL ($log, $nextpage, $nexttab);
+       return buildWideRedirectURL (oneLiner ($msgcode[$pageno][$tabno][$op][$status], $args), $nextpage, $nexttab);
+}
+
+// Return a message log consisting of only one message.
+function oneLiner ($code, $args = array())
+{
+       $ret = array ('v' => 2);
+       $ret['m'][] = count ($args) ? array ('c' => $code, 'a' => $args) : array ('c' => $code);
+       return $ret;
 }
 
 function validTagName ($s, $allow_autotag = FALSE)
@@ -1646,4 +1642,74 @@ function getRackImageHeight ($units)
        return 3 + 3 + $units * 2;
 }
 
+// Perform substitutions and return resulting string
+// used solely by buildLVSConfig()
+function apply_macros ($macros, $subject)
+{
+       $ret = $subject;
+       foreach ($macros as $search => $replace)
+               $ret = str_replace ($search, $replace, $ret);
+       return $ret;
+}
+
+function buildLVSConfig ($object_id = 0)
+{
+       if ($object_id <= 0)
+       {
+               showError ('Invalid argument', __FUNCTION__);
+               return;
+       }
+       $oInfo = getObjectInfo ($object_id);
+       $lbconfig = getSLBConfig ($object_id);
+       if ($lbconfig === NULL)
+       {
+               showError ('getSLBConfig() failed', __FUNCTION__);
+               return;
+       }
+       $newconfig = "#\n#\n# This configuration has been generated automatically by RackTables\n";
+       $newconfig .= "# for object_id == ${object_id}\n# object name: ${oInfo['name']}\n#\n#\n\n\n";
+       foreach ($lbconfig as $vs_id => $vsinfo)
+       {
+               $newconfig .=  "########################################################\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 ]
+               $macros = array
+               (
+                       '%VIP%' => $vsinfo['vip'],
+                       '%VPORT%' => $vsinfo['vport'],
+                       '%PROTO%' => $vsinfo['proto'],
+                       '%VNAME%' =>  $vsinfo['vs_name'],
+                       '%RSPOOLNAME%' => $vsinfo['pool_name']
+               );
+               $newconfig .=  "virtual_server ${vsinfo['vip']} ${vsinfo['vport']} {\n";
+               $newconfig .=  "\tprotocol ${vsinfo['proto']}\n";
+               $newconfig .= apply_macros
+               (
+                       $macros,
+                       lf_wrap ($vsinfo['vs_vsconfig']) .
+                       lf_wrap ($vsinfo['lb_vsconfig']) .
+                       lf_wrap ($vsinfo['pool_vsconfig'])
+               );
+               foreach ($vsinfo['rslist'] as $rs)
+               {
+                       $macros['%RSIP%'] = $rs['rsip'];
+                       $macros['%RSPORT%'] = $rs['rsport'];
+                       $newconfig .=  "\treal_server ${rs['rsip']} ${rs['rsport']} {\n";
+                       $newconfig .= apply_macros
+                       (
+                               $macros,
+                               lf_wrap ($vsinfo['vs_rsconfig']) .
+                               lf_wrap ($vsinfo['lb_rsconfig']) .
+                               lf_wrap ($vsinfo['pool_rsconfig']) .
+                               lf_wrap ($rs['rs_rsconfig'])
+                       );
+                       $newconfig .=  "\t}\n";
+               }
+               $newconfig .=  "}\n\n\n";
+       }
+       return $newconfig;
+}
+
 ?>
index 26cff50e0e8403774a381e528cb93e156766fcfb..d4b55beb55bb5ca3e4fe280e462f64a3f8ce2ab7 100644 (file)
@@ -208,15 +208,14 @@ function setSwitchVLANs ($object_id = 0, $setcmd)
 function activateSLBConfig ($object_id = 0, $configtext = '')
 {
        global $remote_username;
-       $log = array();
        if ($object_id <= 0 or empty ($configtext))
-               return array (array ('c' => 160)); // invalid arguments
+               return oneLiner (160); // invalid arguments
        $objectInfo = getObjectInfo ($object_id);
        $endpoints = findAllEndpoints ($object_id, $objectInfo['name']);
        if (count ($endpoints) == 0)
-               return array (array ('c' => 161)); // endpoint not found
+               return oneLiner (161); // endpoint not found
        if (count ($endpoints) > 1)
-               return array (array ('c' => 162)); // can't pick an address
+               return oneLiner (162); // can't pick an address
        $hwtype = $swtype = 'unknown';
        $endpoint = str_replace (' ', '+', $endpoints[0]);
        $tmpfilename = tempnam ('', 'RackTables-slbconfig-');
@@ -230,18 +229,18 @@ function activateSLBConfig ($object_id = 0, $configtext = '')
        );
        unlink ($tmpfilename);
        if ($data == NULL)
-               return array (array ('c' => 163)); // unknown gateway failure
+               return oneLiner (163); // unknown gateway failure
        if (strpos ($data[0], 'OK!') !== 0)
-               return array (array ('c' => 164, 'a' => array ($data[0]))); // gateway failure
+               return oneLiner (164, array ($data[0])); // gateway failure
        if (count ($data) != 2)
-               return array (array ('c' => 165)); // protocol violation
+               return oneLiner (165); // protocol violation
        // Finally we can parse the response into message array.
-       $ret = array();
-       $codemap['ERR'] = 166;
-       $codemap['OK'] = 62;
+       $log = array ('v' => 2);
+       $codemap['ERR'] = 166; // generic gateway error
+       $codemap['OK'] = 62; // generic gateway success
        list ($code, $text) = split ('!', $data[1]);
-       $ret[] = array ('c' => $codemap[$code], 'a' => array ($text));
-       return $ret;
+       $log['m'][] = array ('c' => $codemap[$code], 'a' => array ($text));
+       return $log;
 }
 
 ?>
index 4bbe974339cee7dfef5c8f2024b35559c53c2aa1..fb54924576dbb0f8403e7196bad878d6cf909f8f 100644 (file)
@@ -4014,69 +4014,20 @@ Dictionary edit page in Configuration section.
 
 function renderLVSConfig ($object_id = 0)
 {
+       showMessageOrError();
        global $root, $pageno, $tabno;
        if ($object_id <= 0)
        {
-               showError ('Invalid object_id', __FUNCTION__);
+               showError ('Invalid argument', __FUNCTION__);
                return;
        }
-       $oInfo = getObjectInfo ($object_id);
-       $lbconfig = buildLBConfig ($object_id);
-       $newconfig = "#\n#\n# This configuration has been generated automatically by RackTables\n";
-       $newconfig .= "# for object_id == ${object_id}\n# object name: ${oInfo['name']}\n#\n#\n\n\n";
-       foreach ($lbconfig as $vs_id => $vsinfo)
-       {
-               $newconfig .=  "########################################################\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 ]
-               $macros = array
-               (
-                       '%VIP%' => $vsinfo['vip'],
-                       '%VPORT%' => $vsinfo['vport'],
-                       '%PROTO%' => $vsinfo['proto'],
-                       '%VNAME%' =>  $vsinfo['vs_name'],
-                       '%RSPOOLNAME%' => $vsinfo['pool_name']
-               );
-               $newconfig .=  "virtual_server ${vsinfo['vip']} ${vsinfo['vport']} {\n";
-               $newconfig .=  "\tprotocol ${vsinfo['proto']}\n";
-               $newconfig .= apply_macros
-               (
-                       $macros,
-                       lf_wrap ($vsinfo['vs_vsconfig']) .
-                       lf_wrap ($vsinfo['lb_vsconfig']) .
-                       lf_wrap ($vsinfo['pool_vsconfig'])
-               );
-               foreach ($vsinfo['rslist'] as $rs)
-               {
-                       $macros['%RSIP%'] = $rs['rsip'];
-                       $macros['%RSPORT%'] = $rs['rsport'];
-                       $newconfig .=  "\treal_server ${rs['rsip']} ${rs['rsport']} {\n";
-                       $newconfig .= apply_macros
-                       (
-                               $macros,
-                               lf_wrap ($vsinfo['vs_rsconfig']) .
-                               lf_wrap ($vsinfo['lb_rsconfig']) .
-                               lf_wrap ($vsinfo['pool_rsconfig']) .
-                               lf_wrap ($rs['rs_rsconfig'])
-                       );
-                       $newconfig .=  "\t}\n";
-               }
-               $newconfig .=  "}\n\n\n";
-       }
-       if (isset ($_REQUEST['do_activate']))
-       {
-               printLog (activateSLBConfig ($object_id, html_entity_decode ($newconfig, ENT_QUOTES, 'UTF-8')));
-       }
-       echo "<form method=post action=${root}>";
-       echo "<input type=hidden name=page value=${pageno}>";
-       echo "<input type=hidden name=tab value=${tabno}>";
+       echo '<br>';
+       echo "<form method=post action='${root}process.php?page=${pageno}&tab=${tabno}&op=submitSLBConfig'>";
        echo "<input type=hidden name=object_id value=${object_id}>";
-       echo "<center><input type=submit name=do_activate value='Send this configuration to the real world'></center>";
+       echo "<center><input type=submit value='Submit for activation'></center>";
        echo "</form>";
        echo '<pre>';
-       echo $newconfig;
+       echo buildLVSConfig ($object_id);
        echo '</pre>';
 }
 
index 86990287091e3fdbc31f501ecd36ebb3d6e0b073..6ec5c65c7dbb4ad9356eb126ecbd9d358db24ad8 100644 (file)
@@ -137,6 +137,7 @@ $ophandler['object']['tags']['saveTags'] = 'saveObjectTags';
 $ophandler['object']['editrspvs']['addLB'] = 'addLoadBalancer';
 $ophandler['object']['editrspvs']['delLB'] = 'deleteLoadBalancer';
 $ophandler['object']['editrspvs']['updLB'] = 'updateLoadBalancer';
+$ophandler['object']['lvsconfig']['submitSLBConfig'] = 'submitSLBConfig';
 $delayauth['object']['livevlans']['setPortVLAN'] = TRUE;
 $msgcode['object']['nat4']['addNATv4Rule']['OK'] = 2;
 $msgcode['object']['nat4']['addNATv4Rule']['ERR'] = 100;
index f3a4af693a1d57d73b686ccbcd86cb0135bb4770..15df9943c3b6d0a154f3125293e407329ca0ff7b 100644 (file)
@@ -1335,4 +1335,12 @@ function setPortVLAN ()
        return buildWideRedirectURL ($log);
 }
 
+function submitSLBConfig ()
+{
+       assertUIntArg ('object_id', __FUNCTION__);
+       $newconfig = buildLVSConfig ($_REQUEST['object_id']);
+       $msglog = activateSLBConfig ($_REQUEST['object_id'], html_entity_decode ($newconfig, ENT_QUOTES, 'UTF-8'));
+       return buildWideRedirectURL ($msglog);
+}
+
 ?>