mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	* Create switchprobe link during xCAT-probe installation * remove debug message * Modify upgrade path * make symbolic link
		
			
				
	
	
		
			133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#! /usr/bin/perl
 | 
						|
# IBM(c) 2016 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
BEGIN { $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr'; }
 | 
						|
 | 
						|
use lib "$::XCATROOT/probe/lib/perl";
 | 
						|
use Cwd 'abs_path';
 | 
						|
use Cwd;
 | 
						|
use File::Basename;
 | 
						|
use File::Path;
 | 
						|
use probe_utils;
 | 
						|
use Getopt::Long qw(:config no_ignore_case);
 | 
						|
 | 
						|
my $proname = basename("$0");
 | 
						|
my $currdir = dirname(abs_path($0));
 | 
						|
my $output  = "stdout";
 | 
						|
 | 
						|
$::USAGE = "Usage:
 | 
						|
    $proname -h
 | 
						|
    $proname  <noderange> [-c] [-V]
 | 
						|
 | 
						|
Description:
 | 
						|
    To retrieve MAC address mapping for the specified switch, or all the switches defined in switches table in xCAT db.
 | 
						|
    Currently, this command does not support hierarchy.
 | 
						|
 | 
						|
Options:
 | 
						|
    -c: Check if the switch is OK to retrieve MAC address mapping.
 | 
						|
    -V: Output verbose information when accessing the switch
 | 
						|
";
 | 
						|
 | 
						|
my $help;
 | 
						|
my $test;
 | 
						|
my $check;
 | 
						|
my @nodes   = ();
 | 
						|
my $verbose = '';
 | 
						|
if (!GetOptions("help|h" => \$help,
 | 
						|
        "T" => \$test,
 | 
						|
        "c" => \$check,
 | 
						|
        "V" => \$verbose)) {
 | 
						|
    probe_utils->send_msg("$output", "f", "Option not supported");
 | 
						|
    probe_utils->send_msg("$output", "d", $::USAGE);
 | 
						|
    exit 1;
 | 
						|
}
 | 
						|
foreach (@ARGV) {
 | 
						|
    if (/^-\w*/) {
 | 
						|
        probe_utils->send_msg("$output", "f", "Option $_ not supported");
 | 
						|
        exit 1;
 | 
						|
    } else {
 | 
						|
        push @nodes, $_;
 | 
						|
    }
 | 
						|
}
 | 
						|
if ($help) {
 | 
						|
    probe_utils->send_msg("$output", "d", $::USAGE);
 | 
						|
    exit 0;
 | 
						|
}
 | 
						|
 | 
						|
if ($test) {
 | 
						|
    `$currdir/bin/switchprobe -h`;
 | 
						|
    if ($?) {
 | 
						|
        probe_utils->send_msg("$output", "f", "No 'switchprobe' tool is available at $currdir/bin/");
 | 
						|
        exit 1;
 | 
						|
    } else {
 | 
						|
        probe_utils->send_msg("$output", "o", "To retrieve MAC address mapping for the specified switch, or all the switches defined in 'switches' table in xCAT db. Currently, this command does not support hierarchy.");
 | 
						|
        exit 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
if ($verbose) {
 | 
						|
    $verbose = "-V";
 | 
						|
}
 | 
						|
my $noderange   = join(',', @nodes);
 | 
						|
my $normal_file = "/tmp/result_normal";
 | 
						|
my $error_file  = "/tmp/result_error";
 | 
						|
if (-f $normal_file) {
 | 
						|
    unlink($normal_file);
 | 
						|
}
 | 
						|
if (-f $error_file) {
 | 
						|
    unlink($error_file);
 | 
						|
}
 | 
						|
if ($check) {
 | 
						|
`$currdir/bin/switchprobe $noderange -c $verbose >$normal_file 2>$error_file`;
 | 
						|
}
 | 
						|
else {
 | 
						|
    `$currdir/bin/switchprobe $noderange $verbose >$normal_file 2>$error_file`;
 | 
						|
}
 | 
						|
if (-f $error_file) {
 | 
						|
    `cat $error_file >> $normal_file`;
 | 
						|
}
 | 
						|
my $fd;
 | 
						|
open($fd, "<", "$normal_file");
 | 
						|
my @fails = ();
 | 
						|
my @error_nodes = ();
 | 
						|
# There is 2 kinds of error message:
 | 
						|
# 1. Error: The nodetype is not 'switch' for nodes: switch1
 | 
						|
#    Error: No switch configuration info find for switch-10-5-23-1
 | 
						|
# 2. switch-10-5-23-1: Error: Timeout
 | 
						|
foreach (<$fd>) {
 | 
						|
    chomp($_);
 | 
						|
    if (/Error:/) {
 | 
						|
        if (/^(\S*):\s*Error:\s*(.*)/) {
 | 
						|
            push @fails, "$1 - $2";
 | 
						|
        } elsif (/^Error:\s*The nodetype is not 'switch' for nodes: (.+)/) {
 | 
						|
            push @error_nodes, "$1";
 | 
						|
        } elsif (/^Error:\s*(.*)/) {
 | 
						|
            push @fails, $1;
 | 
						|
        } else {
 | 
						|
            push @fails, $_;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    elsif (/^(\S*):\s*PASS/) {
 | 
						|
        probe_utils->send_msg("$output", "o", "$1");
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        probe_utils->send_msg("$output", "d", $_);
 | 
						|
    }
 | 
						|
}
 | 
						|
close($fd);
 | 
						|
my $rc = 0;
 | 
						|
if (-f $normal_file) {
 | 
						|
    unlink($normal_file);
 | 
						|
}
 | 
						|
if (-f $error_file) {
 | 
						|
    unlink($error_file);
 | 
						|
}
 | 
						|
if (@error_nodes) {
 | 
						|
    my $error_node = join(",", @error_nodes);
 | 
						|
    probe_utils->send_msg("$output", "d", "[$error_node] : Error, switch-macmap can only be run against xCAT objects that have 'nodetype=switch'");
 | 
						|
    $rc = 1;
 | 
						|
}
 | 
						|
foreach (@fails) {
 | 
						|
    probe_utils->send_msg("$output", "f", "$_");
 | 
						|
    $rc = 1;
 | 
						|
}
 | 
						|
exit $rc;
 |