#!/usr/bin/perl -w # # NAME: Xactivepath.pl # # AUTHOR: Jeremy Pries, Xcedex # DATE : 2006? use Sys::Hostname; use Getopt::Long; ############ # Variables ############ my $hostname = hostname(); my %targetHash = (); my %wwnHash = (); ############ # Command line options ############ GetOptions ('human' => \$human); if ($human) { printf "%-16s%-6s%-19s%-7s%-19s\n","hostname","LUN","Target","HBA","Local WWN"; } else { print "hostname,lun,target,HBA,Local WWN\n"; } my @primaryPaths=`/usr/sbin/vmkmultipath -q | grep active | awk '{ print \$1 }'`; chomp @primaryPaths; my @singlePaths=`/usr/sbin/vmkmultipath -q | grep 'only 1 path' | awk '{ print \$2 }'`; chomp @singlePaths; my @totalPaths = (@primaryPaths, @singlePaths); my @targets=`/usr/sbin/wwpn.pl -t`; chomp @targets; my @wwns=`/usr/sbin/wwpn.pl`; chomp @wwns; ########## # Load targets into a hash for later reference ########## foreach (@targets) { my @splitTargets = split(' ',$_); chop $splitTargets[0]; $targetHash{ $splitTargets[0] } = $splitTargets[1]; } #End foreach target #print "targets: @{[%targetHash]}\n"; ######### # Load local wwns into a hash for later reference ######### foreach (@wwns) { my @splitWwns = split(' ',$_); chop $splitWwns[0]; $wwnHash{ $splitWwns[0] } = $splitWwns[1]; } #End foreach wwn #print "wwns: @{[%wwnHash]}\n"; # # Run thru each path and lookup the target and output # foreach (@totalPaths) { my @vmwarePath = split(":",$_); my $vmhba_target = $vmwarePath[0] . ":" . $vmwarePath[1]; if (defined $targetHash{$vmhba_target}) { if ($human) { printf "%-16s%-6s%-19s%-7s%-19s\n",$hostname,$vmwarePath[2],$targetHash{$vmhba_target},$vmwarePath[0],$wwnHash{$vmwarePath[0]}; } else { print "$hostname,$vmwarePath[2],$targetHash{$vmhba_target},$vmwarePath[0],$wwnHash{$vmwarePath[0]}\n"; } #End if human } #End if } #End foreach primaryPath