r3962 copy more commits from maintenance to trunk
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 6 Oct 2010 20:40:00 +0000 (20:40 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 6 Oct 2010 20:40:00 +0000 (20:40 +0000)
ChangeLog
inc/database.php
inc/gateways.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php
inc/snmp.php

index 7e86674..6bad6a4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
        bugfix: handle locking failure in LDAP caching code
        bugfix: enable deletion of initialized 802.1Q switch
        bugfix: justify table alignment in rack view (#367)
+       bugfix: recognize Nexus portchannel interfaces in 802.1Q
        update: allow scrollbars in port selector (#361)
        update: make IPv4 utilization bar a standard element (by Alexey Andrianov)
        update: make 802.1Q VLANs searchable
@@ -15,6 +16,7 @@
        new feature: rebuild tag filter as soon as user changes it (by Alexey Andrianov)
        new feature: default SLB configuration lines stored in DB (by Alexey Andrianov)
        new feature: {$attr_X_Y} autotags (by Alexey Andrianov)
+       new feature: action "reset object" deleting it's non-hardware properties (Boris Lytochkin)
        bugfix: fixed an issue with LiveCDP remote device names of Nexus switches
 0.18.4 2010-07-13
        bugfix: a race condition could be triggered in permissions editor
index 9471cc2..b85f908 100644 (file)
@@ -624,17 +624,37 @@ function releaseFiles ($entity_realm, $entity_id)
 
 // There are times when you want to delete all traces of an object
 function commitDeleteObject ($object_id = 0)
+{
+       // Reset most of stuff
+       commitResetObject ($object_id);
+       // Object itself
+       usePreparedDeleteBlade ('RackObject', array ('id' => $object_id));
+}
+
+function commitResetObject ($object_id = 0)
 {
        releaseFiles ('object', $object_id);
        destroyTagsForEntity ('object', $object_id);
        usePreparedDeleteBlade ('IPv4LB', array ('object_id' => $object_id));
        usePreparedDeleteBlade ('IPv4Allocation', array ('object_id' => $object_id));
        usePreparedDeleteBlade ('IPv4NAT', array ('object_id' => $object_id));
+       // Rack space
        usePreparedExecuteBlade ('DELETE FROM Atom WHERE molecule_id IN (SELECT new_molecule_id FROM MountOperation WHERE object_id = ?)', array ($object_id));
        usePreparedExecuteBlade ('DELETE FROM Molecule WHERE id IN (SELECT new_molecule_id FROM MountOperation WHERE object_id = ?)', array ($object_id));
+       usePreparedExecuteBlade ('DELETE FROM MountOperation WHERE object_id = ?', array ($object_id));
+       usePreparedExecuteBlade ('DELETE FROM RackSpace WHERE object_id = ?', array ($object_id));
+       // 802.1Q
        usePreparedDeleteBlade ('PortVLANMode', array ('object_id' => $object_id));
+       usePreparedDeleteBlade ('CachedPVM', array ('object_id' => $object_id));
        usePreparedDeleteBlade ('VLANSwitch', array ('object_id' => $object_id));
-       usePreparedDeleteBlade ('RackObject', array ('id' => $object_id));
+       // Ports & links
+       usePreparedDeleteBlade ('Port', array ('object_id' => $object_id));
+       // CN
+       usePreparedExecuteBlade ('UPDATE RackObject SET name=NULL,label="" WHERE id = ?',array ($object_id) );
+       // FQDN
+       commitUpdateAttrValue ($object_id, 3, "");
+       // log history
+       recordHistory ('RackObject', $object_id);
 }
 
 function commitDeleteRack($rack_id)
@@ -2447,7 +2467,7 @@ function commitCreateVS ($vip = '', $vport = 0, $proto = '', $name = '', $vsconf
        return produceTagsForLastRecord ('ipv4vs', $taglist);
 }
 
-function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vs_id = 0, $vsconfig = '', $rsconfig = '')
+function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vs_id = 0, $vsconfig = '', $rsconfig = '', $prio = '')
 {
        return usePreparedInsertBlade
        (
@@ -2458,7 +2478,8 @@ function addLBtoRSPool ($pool_id = 0, $object_id = 0, $vs_id = 0, $vsconfig = ''
                        'rspool_id' => $pool_id,
                        'vs_id' => $vs_id,
                        'vsconfig' => (!strlen ($vsconfig) ? NULL : $vsconfig),
-                       'rsconfig' => (!strlen ($rsconfig) ? NULL : $rsconfig)
+                       'rsconfig' => (!strlen ($rsconfig) ? NULL : $rsconfig),
+                       'prio' => (!strlen ($prio) ? NULL : $prio),
                )
        );
 }
index 4ad900d..1de397c 100644 (file)
@@ -1124,8 +1124,9 @@ function nxos4ScanTopLevel (&$work, $line)
        $matches = array();
        switch (TRUE)
        {
-       case (preg_match ('@^interface ((Ethernet)[[:digit:]]+(/[[:digit:]]+)*)$@', $line, $matches)):
-               $matches[1] = preg_replace ('@^Ethernet(.+)$@', 'e\\1', $matches[1]);
+       case (preg_match ('@^interface ((Ethernet|Port-channel)[[:digit:]]+(/[[:digit:]]+)*)$@i', $line, $matches)):
+               $matches[1] = preg_replace ('@^Ethernet(.+)$@i', 'e\\1', $matches[1]);
+               $matches[1] = preg_replace ('@^Port-channel(.+)$@i', 'po\\1', $matches[1]);
                $work['current'] = array ('port_name' => $matches[1]);
                return 'nxos4PickSwitchportCommand';
        case (preg_match ('@^vlan (.+)$@', $line, $matches)):
@@ -1177,8 +1178,11 @@ function nxos4PickSwitchportCommand (&$work, $line)
                                'native' => $effective_native,
                        );
                        break;
+               case 'SKIP':
+               case 'fex-fabric': // associated port-channel
+                       break;
                default:
-                       // dot1q-tunnel, dynamic, private-vlan, FEX
+                       // dot1q-tunnel, dynamic, private-vlan
                        $work['portdata'][$work['current']['port_name']] = array
                        (
                                'mode' => 'none',
@@ -1213,6 +1217,9 @@ function nxos4PickSwitchportCommand (&$work, $line)
        case (preg_match ('@^  switchport trunk allowed vlan (.+)$@', $line, $matches)):
                $work['current']['trunk allowed vlan'] = iosParseVLANString ($matches[1]);
                break;
+       case preg_match ('/^ +channel-group /', $line):
+               $work['current']['mode'] = 'SKIP';
+               break;
        default: // suppress warning on irrelevant config clause
        }
        return __FUNCTION__;
index 3547bc9..d754d7c 100644 (file)
@@ -710,9 +710,15 @@ function renderEditObjectForm ($object_id)
        if ($object['has_problems'] == 'yes')
                echo ' checked';
        echo "></td></tr>\n";
-       echo "<tr><td>&nbsp;</td><th class=tdright>Actions:</th><td class=tdleft><a href='".
+       echo "<tr><td>&nbsp;</td><th class=tdright>Actions:</th><td class=tdleft>"; 
+       echo "<a href='".
                makeHrefProcess(array('op'=>'deleteObject', 'page'=>'depot', 'tab'=>'addmore', 'object_id'=>$object_id)).
-               "' onclick=\"javascript:return confirm('Are you sure you want to delete the object?')\">Delete object</a></td></tr>\n";
+               "' onclick=\"javascript:return confirm('Are you sure you want to delete the object?')\">" . getImageHREF ('destroy', 'Delete object') . "</a>";
+       echo "&nbsp;";
+       echo "<a href='".
+               makeHrefProcess(array ('op'=>'resetObject', 'page' => 'object', 'tab' => 'edit', 'object_id' => $object_id)).
+               "' onclick=\"javascript:return confirm('Are you sure you want to reset most of object properties?')\">" . getImageHREF ('clear', 'Reset (cleanup) object') . "</a>";
+       echo "</td></tr>\n";
        echo "<tr><td colspan=3><b>Comment:</b><br><textarea name=object_comment rows=10 cols=80>${object['comment']}</textarea></td></tr>";
 
        echo "<tr><th class=submit colspan=3>";
@@ -1577,6 +1583,7 @@ function showMessageOrError ()
                                80 => array ('code' => 'success', 'format' => "Added new object '%s'"),
                                81 => array ('code' => 'success', 'format' => "SNMP: completed '%s' work"),
                                82 => array ('code' => 'success', 'format' => "Bulk port creation was successful. %u ports created, %u failed"),
+                               83 => array ('code' => 'success', 'format' => 'Object "%s" was reset successfully'),
 // records 100~199 with fatal error messages
                                100 => array ('code' => 'error', 'format' => '%s'),
                                101 => array ('code' => 'error', 'format' => 'Port name cannot be empty'),
index 35265f4..2831598 100644 (file)
@@ -150,6 +150,7 @@ $ophandler['object']['ipv4']['addIPv4Allocation'] = 'addIPv4Allocation';
 $ophandler['object']['ipv4']['delIPv4Allocation'] = 'delIPv4Allocation';
 $ophandler['object']['edit']['clearSticker'] = 'clearSticker';
 $ophandler['object']['edit']['update'] = 'updateObject';
+$ophandler['object']['edit']['resetObject'] = 'resetObject';
 $ophandler['object']['nat4']['addNATv4Rule'] = 'addPortForwarding';
 $ophandler['object']['nat4']['delNATv4Rule'] = 'delPortForwarding';
 $ophandler['object']['nat4']['updNATv4Rule'] = 'updPortForwarding';
index 35c6a0a..1f1255b 100644 (file)
@@ -931,7 +931,20 @@ function deleteObject ()
        commitDeleteObject ($_REQUEST['object_id']);
        foreach ($racklist as $rack_id)
                resetThumbCache ($rack_id);
+       return buildRedirectURL (__FUNCTION__, 'OK', array ($oinfo['dname']));
+}
 
+$msgcode['resetObject']['OK'] = 83;
+$msgcode['resetObject']['ERR'] = 100;
+function resetObject ()
+{
+       assertUIntArg ('object_id');
+       $oinfo = spotEntity ('object', $_REQUEST['object_id']);
+
+       $racklist = getResidentRacksData ($_REQUEST['object_id'], FALSE);
+       commitResetObject ($_REQUEST['object_id']);
+       foreach ($racklist as $rack_id)
+               resetThumbCache ($rack_id);
        return buildRedirectURL (__FUNCTION__, 'OK', array ($oinfo['dname']));
 }
 
index 134ec18..cede44f 100644 (file)
@@ -1305,6 +1305,14 @@ function generatePortsForCatModule ($object_id, $slotno = 1, $mtype = 'X6748', $
                        $mac_address = nextMACAddress ($mac_address);
                }
                break;
+       case '3750G-24T':
+               $mac_address = nextMACAddress ($mac_address);
+               for ($i = 1; $i <= 24; $i++)
+               {
+                       commitAddPort ($object_id, "gi${slotno}/0/${i}", '1-24', "unit ${slotno} port ${i}", $mac_address);
+                       $mac_address = nextMACAddress ($mac_address);
+               }
+               break;
        case '3750G-16TD':
                $mac_address = nextMACAddress ($mac_address);
                for ($i = 1; $i <= 16; $i++)