#!/usr/local/bin/perl use FileHandle; use Data::Dumper; use Getopt::Long; my $verbose =1; my $in = new FileHandle; my $drives = {}; my $rmts = {}; my $define = undef; my $server = []; my @servers; my $script = 0; my $libr="3592lib"; $result = GetOptions ( "verbose" => \$verbose, "server=s" => $server, "define!" => \$define, "script!" => \$script, ); if ($#{$server} > -1 ) {@servers = @{$server} ;} else {@servers = ( "CTRL" ) } my $out = {}; $in->open("/var/tsm/base/etc/device-correspondence.csv"); while (<$in>) { # print; chomp; my ($tsm,$sn,$lib) = split(/,/); $drives->{$sn} = { 'TSM' => $tsm, 'LIB' => $lib, }; } $in->close; $in->open("/usr/sbin/lsdev -Cc tape|"); while (<$in>) { chomp; # print; my ($rmt,$stat,$loc,@crap) = split(/\s+/); my @junk = split(/-/,$loc); $rmts->{$rmt} = { "pri" => pop(@junk) }; } # print Dumper($rmts); foreach $drive (keys %$drives) { my @lines = `/usr/local/bin/grep rmt ./serial-$drive-*`; my $pri = ""; foreach $line (@lines) { my ($crap,$dev,@crap) = split(/\s+/,$line); my $p = $rmts->{$dev}->{"pri"}; if ($p eq "PRI") { if ($pri ne "") { die "Multiple primay devices for '$drive' ??" } $pri = $dev; } } if ($pri eq "") { die "No primary device for '$drive' ??" } # print "$drive: $pri \n"; $drives->{$drive}->{pri} = $pri; } # print Dumper($drives); if (0) { foreach $drive ( keys %$drives) { print sprintf("select distinct source_name as %s from paths where destination_name = '%s' and device!='/dev/%s'\n", $drives->{$drive}->{TSM}, $drives->{$drive}->{TSM}, $drives->{$drive}->{pri} ); } exit 1; } if ($script) { # setting up a script. my $host = `/usr/bin/hostname`; chomp($host); print " /* Tape paths from $host */\n"; foreach $drive ( keys %$drives ) { my $op = ( $define?"define":"update"); print sprintf("%s path \$1 %s srct=server destt=drive libr=%s device=/dev/%s \n", $op, $drives->{$drive}->{TSM}, $libr, $drives->{$drive}->{pri} ); } } else { # Doing an interactive run... foreach $server (@servers) { foreach $drive ( keys %$drives ) { my $op = ( $define?"define":"update"); print sprintf("%s path %s %s srct=server destt=drive libr=%s device=/dev/%s \n", $op, $server, $drives->{$drive}->{TSM}, $libr, $drives->{$drive}->{pri} ); } } }