From a2df02fa4801f876341676dc240fe3a1104b4b77 Mon Sep 17 00:00:00 2001 From: hu-weihua Date: Tue, 17 Oct 2017 03:35:51 -0400 Subject: [PATCH] modify depending on new requirement #4092 --- xCAT-probe/subcmds/xcatmn | 56 +++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/xCAT-probe/subcmds/xcatmn b/xCAT-probe/subcmds/xcatmn index e7867d51c..49b159ad9 100755 --- a/xCAT-probe/subcmds/xcatmn +++ b/xCAT-probe/subcmds/xcatmn @@ -48,7 +48,7 @@ Description: Options: -h : Get usage information of $program_name -V : Output more information for debug - -i : Required. Specify the network interface name of provision network on management node + -i : Specify the network interface name of provision network on management node. if not specified, will guess the provision network from site table master attribute. Recommand to use -i option. If there is vlan in the network interface, provide the network interface with vlan infomation, such as '-i .'. "; sub do_main_job { @@ -400,22 +400,40 @@ sub check_network { $rst = 1; } } else { # on MN - my $nics = `ip addr show $installnic >/dev/null 2>&1`; - if ($?) { - push @$error_ref, "There isn't NIC '$installnic' in current server"; - $rst = 1; - } else { - $$serverip_ref = `ip addr show $installnic 2>&1| awk -F" " '/inet / {print \$2}'|awk -F"/" '{print \$1}'`; - chomp($$serverip_ref); - if (!defined($$serverip_ref) || ($$serverip_ref eq "")) { - push @$error_ref, "There isn't IP address assigned to NIC $installnic"; + if($installnic){ + #if customer specified install NIC by '-i' option, use that + my $nics = `ip -4 -o a|grep '$installnic\\\\' >/dev/null 2>&1`; + if ($?) { + push @$error_ref, "There isn't NIC '$installnic' in current server"; $rst = 1; } else { - if ($$serverip_ref ne $sitetable_ref->{master}) { - push @$error_ref, "The IP $$serverip_ref of $installnic doesn't equal the value of 'master' in 'site' table"; + $$serverip_ref = `ip -4 -o a|awk -F' ' '/$installnic\\\\/ {print \$4}'|awk -F'/' '{print \$1}'`; + chomp($$serverip_ref); + if (!defined($$serverip_ref) || ($$serverip_ref eq "")) { + push @$error_ref, "There isn't IP address assigned to NIC $installnic"; $rst = 1; + } else { + if ($$serverip_ref ne $sitetable_ref->{master}) { + push @$error_ref, "The IP $$serverip_ref of $installnic doesn't equal the value of 'master' in 'site' table"; + $rst = 1; + } } } + }else{ + #if customer does not specified install NIC by '-i' option, suppose the network which attribute in site table belongs to is install network. + $$serverip_ref = $sitetable_ref->{master}; + my $str = `ip -4 -o a|grep '$$serverip_ref'`; + if($?) { + push @$error_ref, "The value $$serverip_ref of master attribute in site table doesn't belong to any NIC in current server"; + $rst = 1; + }else{ + chomp($str); + my @tmp1 = split("\\\\", $str); + my @tmp2 = split(" ", $tmp1[0]); + $installnic=$tmp2[-1]; + probe_utils->send_msg("$output", "w", "No interface provided by '-i' option, detected site table IP attribute $$serverip_ref, checking xCAT configuration using interface: $installnic"); + probe_utils->send_msg("$output", "w", "If this is incorrect, rerun with -i option"); + } } } @@ -978,11 +996,6 @@ if ($test) { exit 0; } -if (!$installnic){ - probe_utils->send_msg("$output", "f", "Option '-i' is required"); - probe_utils->send_msg("$output", "d", "$::USAGE"); - exit 1; -} #Handle the interrupt signal from STDIN $SIG{TERM} = $SIG{INT} = sub { @@ -1019,6 +1032,7 @@ while ($hierarchy_instance->read_reply(\%reply_cache)) { my $msg = ""; my $logmsg = ""; + #print ">>>$reply_cache{$servers}->[$_]<<<\n"; #For cases like below: #c910f02c04p04: [ok] :All xCAT deamons are running if ($reply_cache{$servers}->[$_] =~ /^(\w+)\s*:\s*(\[\w+\]\s*):\s*(.*)/) { @@ -1027,6 +1041,14 @@ while ($hierarchy_instance->read_reply(\%reply_cache)) { $msg = "$2:[$server]: $3"; } + #For cases like below: + #sn02: ssh: connect to host sn02 port 22: No route to host + } elsif ($reply_cache{$servers}->[$_] =~ /^(\w+)\s*:\s*(ssh:.+)/){ + if("$1" eq "$server") { + $logmsg = "$2"; + $msg = "[failed] :[$server]: $2"; + } + #For cases like below: #c910f02c04p05: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! } elsif ($reply_cache{$servers}->[$_] =~ /^(\w+)\s*:\s*(.*)/) {