From d1108776cdee296b6d3ba2b943b2507e7b81d2f2 Mon Sep 17 00:00:00 2001 From: Mark Gurevich Date: Thu, 25 Mar 2021 16:02:51 -0400 Subject: [PATCH] xcatprobe fixes --- xCAT-probe/subcmds/xcatmn | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/xCAT-probe/subcmds/xcatmn b/xCAT-probe/subcmds/xcatmn index f2f6ed1da..1a4ce1dac 100755 --- a/xCAT-probe/subcmds/xcatmn +++ b/xCAT-probe/subcmds/xcatmn @@ -110,8 +110,9 @@ sub do_main_job { $rc |= $rst; #check DNS service - $rst = check_dns_service(\%sitetable, $installnicip, \$checkpoint, \@error); - print_check_result($checkpoint, "f", $rst, \@error); + ($rst, $flag) = check_dns_service(\%sitetable, $installnicip, \$checkpoint, \@error); + print_check_result($checkpoint, $flag, $rst, \@error); + $rst = 0 if ($flag == "w"); $rc |= $rst; #check DHCP service @@ -173,7 +174,8 @@ sub do_main_job { $rst = check_dhcp_leases(\$checkpoint, \@error); print_check_result($checkpoint, "w", $rst, \@error); $rc |= $rst; - } else { + + #check if database packages are installed $rst = check_db_pkgs(\$checkpoint, \@error); print_check_result($checkpoint, "f", $rst, \@error); $rc |= $rst; @@ -893,7 +895,7 @@ sub check_log_record { my @grep_logs = `grep "$log_msg on SN" $log_file | grep -v "Allowing" | grep -v "dispatch"`; foreach my $grep_log (@grep_logs) { - if ($grep_log =~ /.+ \d+:\d+:\d+ (\w+) xcat: $log_msg on SN/) { + if ($grep_log =~ /.+ \d+:\d+:\d+ (\w+) xcat.*: .* $log_msg on SN/) { push @checked_nodes, $1; } } @@ -901,7 +903,7 @@ sub check_log_record { my %hash_pass = map{$_=>1} @checked_nodes; my @error_nodes = grep {!$hash_pass{$_}} @valid_nodes; if (@error_nodes) { - push @$error_ref, "Failed to store logs come from " . join(",", @error_nodes) . " to $log_file on MN"; + push @$error_ref, "Failed to store logs sent from SN " . join(",", @error_nodes) . " to $log_file on MN"; $rst = 1; } if (@invld_nodes) { @@ -1005,13 +1007,30 @@ sub check_dns_service { } } else { - # if there is no sn, nslookup mnip + # if there is no sn, "nslookup mnip mnip" my $nslkp = `nslookup -type=A $serverip $serverip 2>&1`; chomp($nslkp); my $tmp = grep { $_ =~ "Server:[\t\s]*$serverip" } split(/\n/, $nslkp); if (!$tmp) { $rc = 1; } + # now check if nameserver in /etc/resolv.conf can resolve server name + my $nslkp = `nslookup -type=A $serverip 2>&1`; + chomp($nslkp); + my $nameserverip = "n/a"; + if ($nslkp =~ /Server:[\t\s]*(\d+).(\d+).(\d+).(\d+)/) { + $nameserverip = "$1.$2.$3.$4"; + } + if ($nslkp =~ /server can't find/) { + push @$error_ref, "DNS nameserver $nameserverip can not resolve $serverip"; + # Just a warning + return (1, 'w'); + } + if ($nslkp =~ /no servers could be reached/) { + push @$error_ref, "DNS nameserver can not be reached"; + # Just a warning + return (1, 'w'); + } } if ($rc) { push @$error_ref, "DNS service isn't ready on $serverip"; @@ -1023,7 +1042,7 @@ sub check_dns_service { $rst = 2; } - return $rst; + return ($rst, 'f'); } @@ -1284,7 +1303,7 @@ sub check_db_pkgs { my $error_ref = shift; my $rst = 0; - $$checkpoint_ref = "Checking DB packages installatio..."; + $$checkpoint_ref = "Checking DB packages installation..."; @$error_ref = (); my $cfgloc_file = "/etc/xcat/cfgloc"; @@ -1298,7 +1317,7 @@ sub check_db_pkgs { my $db_name; if ($db_type eq "mysql") { $db_name = "perl-DBD-MySQL or perl-DBD-mysql"; - $db_pkg = `rpm qa | grep -e perl-DBD-MySQL -e perl-DBD-mysql`; + $db_pkg = `rpm -qa | grep -e perl-DBD-MySQL -e perl-DBD-mysql`; } elsif ($db_type eq "Pg") { $db_name = "perl-DBD-Pg"; $db_pkg = `rpm -qa | grep $db_name`;