[cisco-stats] Switched generate_cisco_port_configuration_overview argument handling...
authorMaximilian Wilhelm <max@rfc2324.org>
Sat, 5 Jan 2008 21:25:17 +0000 (22:25 +0100)
committerMaximilian Wilhelm <max@rfc2324.org>
Sat, 5 Jan 2008 21:25:17 +0000 (22:25 +0100)
Signed-off-by: Maximilian Wilhelm <max@rfc2324.org>

cisco-stats/generate_cisco_port_configuration_overview

index 5fd1fb2..ff3a0e9 100755 (executable)
 
 use strict;
 
-# Default configuration
-my $opt = {
-       ignore_shutdown_interfaces => undef,
-};
+use Getopt::Long;
 
+# command line options
+my $opt = {};
 
-# Try to get filename
-my $filename = shift @ARGV;
-
-my @include_ports_list = @ARGV;
-foreach my $arg (@ARGV) {
-       if ($arg =~ m/^--(.*)$/) {
-               my $arg_name = $1;
-
-               # Simple trick to simplfy argument handling
-               if (exists $opt->{$arg_name}) {
-                       $opt->{$arg_name} = 42;
-               }
-
-       } else {
-               push @include_ports_list, $arg;
-       }
-}
+Getopt::Long::Configure ("bundling");
+GetOptions (
+       "file|f=s"      => \$opt->{filename},
+       "include|i=s"   => \$opt->{include},
+       "ignore_shutdown_interfaces" => \$opt->{ignore_shutdown_interfaces},
+       "help|h"        => \$opt->{help},
+);
 
 
 # The device/hostname
@@ -58,8 +47,11 @@ my $interfaces = {};
 #  values: something...
 my $vlans = {};
 
-if (! defined $filename) {
-       print "Usage: $0 filename [--ignore_shutdown_interfaces] [port1 [port2 [...]]]\n";
+if (! defined $opt->{filename} || defined $opt->{help}) {
+       print STDERR "Usage: $0 --file filename\n";
+       print STDERR "\t[--help | -h]\n";
+       print STDERR "\t[--include int1[,int2[...]] | -i]\n";
+       print STDERR "\t[--ignore_shutdown_interfaces]\n";
        exit 1;
 }
 
@@ -68,16 +60,17 @@ if (! defined $filename) {
 my $current_int = undef;
 my $line_num = 0;
 
-open (RUNNING_CONFIG, "< $filename")
-       or die "Could not open file \"$filename\": $!\n";
+open (RUNNING_CONFIG, "< $opt->{filename}")
+       or die "Could not open file \"$opt->{filename}\": $!\n";
 
-if (@include_ports_list) {
+
+if (defined $opt->{include}) {
        $include_ports = {};
 
        # Just put all given ports into the hash
        # No input validation as garbage won't harm us here.
        # If there is an invalid string in the hash, it just won't match anything
-       foreach my $port (@include_ports_list) {
+       foreach my $port (split (/,/, $opt->{include})) {
                # Expand short forms
                $port =~ s/^Fa([0-9]+\/)/FastEthernet$1/;
                $port =~ s/^Gi([0-9]+\/)/GigabitEthernet$1/;
@@ -87,7 +80,7 @@ if (@include_ports_list) {
 }
 
 
-while (my $line = <RUNNING_CONFIG>) { # Read configuration {{{
+while (my $line = <RUNNING_CONFIG>) { # Read device configuration {{{
        chomp $line;
        $line_num++;
 
@@ -427,6 +420,7 @@ print '
          </a>
         </p>
        </body>
-</html>';
+</html>
+';
 
 # vim:foldmathod=marker