diff options
Diffstat (limited to 'dlink-ng/dlink-ng.pl')
-rwxr-xr-x | dlink-ng/dlink-ng.pl | 88 |
1 files changed, 42 insertions, 46 deletions
diff --git a/dlink-ng/dlink-ng.pl b/dlink-ng/dlink-ng.pl index 8369e05..5d9efa0 100755 --- a/dlink-ng/dlink-ng.pl +++ b/dlink-ng/dlink-ng.pl @@ -1,17 +1,4 @@ #!/usr/bin/perl -# -# USAGE: -# -# On all switches; -# dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | dlink-ng/dlink-ng.pl -# -# On a specific switch; -# dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | dlink-ng/dlink-ng.pl -s e11-1 -# -# On multiple switches; -# dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | grep -E "11-1|11-2|13-1|13-2" | dlink-ng/dlink-ng.pl -# -# use strict; use warnings; use Net::Telnet::Cisco; @@ -44,16 +31,14 @@ my $DLINK_TEMPLATE; # Filehandle used for reading D-Link template $| = 1; # Get options -my ($cisco_config, $single_switch, $dlink_config, $save_config, $skipped_port_only, $skipped_port_desc_only, $no_skip); +my ($cisco_config, $single_switch, $dlink_config, $last_port_config, $last_port_desc); if (@ARGV > 0) { GetOptions( 'c|cisco|ciscoconfig' => \$cisco_config, # Configure on the Cisco-side only (Portchannel, interfaces, etc) 's|switch=s' => \$single_switch, # Configure a single switch 'd|dlink|dlinkconfig=s' => \$dlink_config, # Push D-Link-template-config to D-Link (not used @ TG) - 'w|write' => \$save_config, # Write config on Cisco-side - 'portskip' => \$skipped_port_only, # Configure the skipped port only (Cisco-side) - 'skipdesc' => \$skipped_port_desc_only, # Configure the skipped port description only (Cisco-side) - 'noskip' => \$no_skip # Override $dlinkng::config::skip_last_port + 'lastport' => \$last_port_config, # Configure the last port only (Cisco-side) + 'lastportdesc' => \$last_port_desc, # Configure the description on the last port (Cisco-side) ) } @@ -64,19 +49,21 @@ if ($dlink_config){ } } -# Exit if $cisco_config and $skipped_port_only or $skipped_port_desc_only is set -if ($cisco_config && ($skipped_port_only || $skipped_port_desc_only)){ - die("\$cisco_config and \$skipped_port_only (or \$skipped_port_desc_only) can't be used together.\n"); +# Exit if $cisco_config and $last_port_config or $last_port_desc is set +if ($cisco_config && ($last_port_config || $last_port_desc)){ + die("\$cisco_config and \$last_port_config (or \$last_port_desc) can't be used together.\n"); } -# Update $dlinkng::config::skip_last_port if $no_skip is set -if ($no_skip){ - $dlinkng::config::skip_last_port = 0; +# If $last_port_desc, assume $last_port_config +if ($last_port_desc){ + $last_port_config = 1; } -# If skipdesc, assume $skipped_port_only -if ($skipped_port_desc_only){ - $skipped_port_only = 1; +# Exit if we give $last_port_config or $last_port_desc parameters, but $configure_last_port is not set +if ($last_port_config || $last_port_desc){ + unless($dlinkng::config::configure_last_port){ + die("\$configure_last_port not set, but expected due to either \$last_port_config or \$last_port_desc.\n"); + } } # Print stuff @@ -600,20 +587,23 @@ sub setup{ my $vrf = threads->tid(); # use thread ID as VRF-number # Remove last port if we're skipping it - my $skipped_port; - if ($dlinkng::config::skip_last_port){ - $skipped_port = pop(@{$switch->{ports}}); + my $last_port; + if ($dlinkng::config::configure_last_port){ + # assume we want to skip a port, so we check against regex + if($switch->{switchname} =~ m/$dlinkng::config::last_port_regex/){ + $last_port = pop(@{$switch->{ports}}); + } } - if($skipped_port_only){ - info($switch->{switchname}, "Configuring skipped port only."); + if($last_port_config){ + info($switch->{switchname}, "Configuring last port only."); } if($cisco_config){ info($switch->{switchname}, "Configuring things on the Cisco-side only."); } - unless($cisco_config || $skipped_port_only){ + unless($cisco_config || $last_port_config){ info($switch->{switchname}, "Starting configuration of $switch->{switchname} ($switch->{ipv4address})."); info($switch->{switchname}, "Trying to ping $switch->{ipv4address}."); @@ -696,7 +686,7 @@ sub setup{ telnet_cmd($switch, $cisco, "terminal length 0") or return abort($switch->{switchname}, $cisco); - unless($cisco_config || $skipped_port_only){ + unless($cisco_config || $last_port_config){ # Prepare ports reset_interfaces($switch, $cisco) or return abort($switch->{switchname}, $cisco); @@ -872,7 +862,7 @@ sub setup{ $dlink->close; } - unless($skipped_port_only){ + unless($last_port_config){ # Configure final IOS stuff info($switch->{switchname}, "Final IOS config phase. Setting up all interfaces + Port-Channel."); @@ -913,6 +903,12 @@ sub setup{ or return abort($switch->{switchname}, $cisco); telnet_cmd($switch, $cisco, "description D-Link $switch->{switchname}; RJ-45; 1G;") or return abort($switch->{switchname}, $cisco); + + # disable CDP if specified + unless($dlinkng::config::cdp_enable){ + telnet_cmd($switch, $cisco, "no cdp enable") + or return abort($switch->{switchname}, $cisco); + } # Assign to Etherchannel if(is_xr($switch->{coreswos})){ @@ -1039,26 +1035,26 @@ sub setup{ } # If we skipped last port at the start, we configure it now - if (($dlinkng::config::skip_last_port && $skipped_port && defined($skipped_port)) || ($skipped_port_only && defined($skipped_port_only))){ - if ($skipped_port_desc_only){ - info($switch->{switchname}, "Configuring skipped port... (description only)"); + if ($dlinkng::config::configure_last_port && $last_port){ + if ($last_port_desc){ + info($switch->{switchname}, "Configuring last port... (description only)"); } else { - info($switch->{switchname}, "Configuring skipped port..."); + info($switch->{switchname}, "Configuring last port..."); } telnet_cmd($switch, $cisco, "conf t") or return abort($switch->{switchname}, $cisco); - unless ($skipped_port_desc_only){ - telnet_cmd($switch, $cisco, "default int $skipped_port") + unless ($last_port_desc){ + telnet_cmd($switch, $cisco, "default int $last_port") or return abort($switch->{switchname}, $cisco); } - telnet_cmd($switch, $cisco, "int $skipped_port") + telnet_cmd($switch, $cisco, "int $last_port") or return abort($switch->{switchname}, $cisco); telnet_cmd($switch, $cisco, "description AP \@ D-Link $switch->{switchname}; RJ-45; 1G;") or return abort($switch->{switchname}, $cisco); - unless ($skipped_port_desc_only){ + unless ($last_port_desc){ foreach my $cmd (@{$dlinkng::config::last_port_config->{$switch->{coreswos}}}){ telnet_cmd($switch, $cisco, $cmd) or return abort($switch->{switchname}, $cisco); @@ -1085,7 +1081,7 @@ sub setup{ # Check if all is OK, but not if configuring skipped port only my $return = 0; - if ($skipped_port_only){ + if ($last_port_config){ info($switch->{switchname}, "Done doing skipped port config. Not checking if anything is online."); $return = 1; } else { @@ -1114,7 +1110,7 @@ sub setup{ } } - if($save_config && !is_xr($switch->{coreswos})){ + if($dlinkng::config::save_config && !is_xr($switch->{coreswos})){ # save the cisco-config, but not if IOS-XR info($switch->{switchname}, "Saving config on core-switch ($switch->{coreswip})."); telnet_cmd($switch, $cisco, "write") @@ -1177,7 +1173,7 @@ sub process_switches { # Let's start my $time_start = time(); log_it("INFO", "yellow", "dlink-ng", "Starting dlink-ng with $dlinkng::config::max_threads threads..."); -log_it("INFO", "yellow", "dlink-ng", "Configured to skip last port on all switches.") if $dlinkng::config::skip_last_port; +log_it("INFO", "yellow", "dlink-ng", "Configured to skip last port on all switches.") if $dlinkng::config::configure_last_port; # Let's add all switches to the queue while (<STDIN>){ |