diff --git a/xCAT-probe/subcmds/image b/xCAT-probe/subcmds/image index a345866a3..f3784e090 100755 --- a/xCAT-probe/subcmds/image +++ b/xCAT-probe/subcmds/image @@ -41,10 +41,10 @@ Options: #------------------------------------- if ( !GetOptions("--help|h" => \$help, - "t" => \$test, - "V" => \$VERBOSE, - "c" => \$CONSISTENCY_CHECK, - "d" => \$DEFINITION_CHECK)) + "t" => \$test, + "V" => \$VERBOSE, + "c" => \$CONSISTENCY_CHECK, + "d" => \$DEFINITION_CHECK)) { probe_utils->send_msg("$output", "f", "Invalid parameter for $program_name"); probe_utils->send_msg("$output", "d", "$::USAGE"); @@ -65,10 +65,10 @@ if ($test) { exit 0; } -unless(defined($CONSISTENCY_CHECK) || defined($DEFINITION_CHECK)) { - probe_utils->send_msg("$output", "f", "At least one of -c or -d flags is required"); - probe_utils->send_msg("$output", "d", "$::USAGE"); - exit 1; +unless (defined($CONSISTENCY_CHECK) || defined($DEFINITION_CHECK)) { + probe_utils->send_msg("$output", "f", "At least one of -c or -d flags is required"); + probe_utils->send_msg("$output", "d", "$::USAGE"); + exit 1; } my @nodes = `nodels`; @@ -80,23 +80,24 @@ my $na = "N/A"; # First, extract diskless nodes foreach (@nodes) { - my $lsdef_provmethod = `lsdef $_ -i provmethod -c`; - if ($lsdef_provmethod =~ /netboot/) { - push(@diskless_nodes, $_); - probe_utils->send_msg("$output", "d", "$_ is diskless"); - } + my $lsdef_provmethod = `lsdef $_ -i provmethod -c`; + if ($lsdef_provmethod =~ /netboot/) { + push(@diskless_nodes, $_); + probe_utils->send_msg("$output", "d", "$_ is diskless"); + } } + # Next, check if all diskless nodes are pingable my $p = Net::Ping->new(); foreach (@diskless_nodes) { - if ($p->ping($_, 2)) { - probe_utils->send_msg("$output", "o", "Pinging $_"); - push(@pingable_nodes, $_); - } - else { - probe_utils->send_msg("$output", "f", "Pinging $_"); - } - sleep(1); + if ($p->ping($_, 2)) { + probe_utils->send_msg("$output", "o", "Pinging $_"); + push(@pingable_nodes, $_); + } + else { + probe_utils->send_msg("$output", "f", "Pinging $_"); + } + sleep(1); } $p->close(); @@ -107,114 +108,115 @@ my %node_running_image_name_hash; my %node_defined_image_name_hash; foreach (@pingable_nodes) { - probe_utils->send_msg("$output", "d", "---- Gathering information from node $_ ----"); - # Next, from all pingable nodes get the IMAGENAME and IMAGEUUID entries from xcatinfo file - my $output = `xdsh $_ "cat /opt/xcat/xcatinfo"`; - my $xcatinfo_image_UUID = ` echo "$output" | awk -F"=" '/IMAGEUUID/ {gsub(/'"'"'/,"",\$2); print \$2}'`; - my $xcatinfo_image_name = ` echo "$output" | awk -F"=" '/IMAGENAME/ {gsub(/'"'"'/,"",\$2); print \$2}'`; - chomp($xcatinfo_image_UUID); - chomp($xcatinfo_image_name); - if (length($xcatinfo_image_UUID) <= 0) { - $xcatinfo_image_UUID = $na; - } - if (length($xcatinfo_image_name) <= 0) { - $xcatinfo_image_name = $na; - } - $node_running_image_uuid_hash{$_} = $xcatinfo_image_UUID; - $node_running_image_name_hash{$_} = $xcatinfo_image_name; - print "Node $_ is running image $node_running_image_name_hash{$_} with UUID $node_running_image_uuid_hash{$_} \n" if ($VERBOSE); + probe_utils->send_msg("$output", "d", "---- Gathering information from node $_ ----"); - # Next, get UUID from rootimg directory xcatinfo file of the provmethod osimage - my $lsdef_provmethod = `lsdef $_ -i provmethod -c | cut -d "=" -f 2`; - chomp($lsdef_provmethod); - my $rootimagedir = $na; - if (length($lsdef_provmethod) > 0) { - $rootimagedir = `lsdef -t osimage $lsdef_provmethod -i rootimgdir -c | cut -d "=" -f 2`; - chomp($rootimagedir); - if (length($rootimagedir) > 0) { - $defined_UUID = `awk -F"'" '/IMAGEUUID/ {print \$2}' $rootimagedir/rootimg/opt/xcat/xcatinfo`; - chomp($defined_UUID); - if (length($defined_UUID) < 1) { - $defined_UUID = $na; - } - } - } - else { - $lsdef_provmethod = $na; - } - $node_defined_image_uuid_hash{$_} = $defined_UUID; - $node_defined_image_name_hash{$_} = $lsdef_provmethod; - print "Node $_ has defined image $lsdef_provmethod at $rootimagedir with UUID $defined_UUID\n" if ($VERBOSE); + # Next, from all pingable nodes get the IMAGENAME and IMAGEUUID entries from xcatinfo file + my $output = `xdsh $_ "cat /opt/xcat/xcatinfo"`; + my $xcatinfo_image_UUID = ` echo "$output" | awk -F"=" '/IMAGEUUID/ {gsub(/'"'"'/,"",\$2); print \$2}'`; + my $xcatinfo_image_name = ` echo "$output" | awk -F"=" '/IMAGENAME/ {gsub(/'"'"'/,"",\$2); print \$2}'`; + chomp($xcatinfo_image_UUID); + chomp($xcatinfo_image_name); + if (length($xcatinfo_image_UUID) <= 0) { + $xcatinfo_image_UUID = $na; + } + if (length($xcatinfo_image_name) <= 0) { + $xcatinfo_image_name = $na; + } + $node_running_image_uuid_hash{$_} = $xcatinfo_image_UUID; + $node_running_image_name_hash{$_} = $xcatinfo_image_name; + print "Node $_ is running image $node_running_image_name_hash{$_} with UUID $node_running_image_uuid_hash{$_} \n" if ($VERBOSE); + + # Next, get UUID from rootimg directory xcatinfo file of the provmethod osimage + my $lsdef_provmethod = `lsdef $_ -i provmethod -c | cut -d "=" -f 2`; + chomp($lsdef_provmethod); + my $rootimagedir = $na; + if (length($lsdef_provmethod) > 0) { + $rootimagedir = `lsdef -t osimage $lsdef_provmethod -i rootimgdir -c | cut -d "=" -f 2`; + chomp($rootimagedir); + if (length($rootimagedir) > 0) { + $defined_UUID = `awk -F"'" '/IMAGEUUID/ {print \$2}' $rootimagedir/rootimg/opt/xcat/xcatinfo`; + chomp($defined_UUID); + if (length($defined_UUID) < 1) { + $defined_UUID = $na; + } + } + } + else { + $lsdef_provmethod = $na; + } + $node_defined_image_uuid_hash{$_} = $defined_UUID; + $node_defined_image_name_hash{$_} = $lsdef_provmethod; + print "Node $_ has defined image $lsdef_provmethod at $rootimagedir with UUID $defined_UUID\n" if ($VERBOSE); } # Information gathering is done. Now do veification checking. # Probe verification step 1 - make sure all nodes are running the osimage name and imageUUID as defined on MN if ($DEFINITION_CHECK) { - foreach (@pingable_nodes) { - my $msg; - my $status; - if (($node_running_image_name_hash{$_} eq $node_defined_image_name_hash{$_}) && - ($node_running_image_uuid_hash{$_} eq $node_defined_image_uuid_hash{$_})) { - if ($node_running_image_uuid_hash{$_} eq $na) { - $msg = "$_: Not able to determing running image name or uuid"; - $status = "f"; - } - else { - $msg = "$_: Matches running and defined image name and UUID"; - $status = "o"; - } - } - else { - $msg = "$_: Unmatched image name or image UUID.\n Defined: name = $node_defined_image_name_hash{$_}" . - " uuid = $node_defined_image_uuid_hash{$_}\n Running: name = $node_running_image_name_hash{$_}" . - " uuid = $node_running_image_uuid_hash{$_}"; - $status = "f"; - } - probe_utils->send_msg("$output", "$status", "$msg"); - } + foreach (@pingable_nodes) { + my $msg; + my $status; + if (($node_running_image_name_hash{$_} eq $node_defined_image_name_hash{$_}) && + ($node_running_image_uuid_hash{$_} eq $node_defined_image_uuid_hash{$_})) { + if ($node_running_image_uuid_hash{$_} eq $na) { + $msg = "$_: Not able to determing running image name or uuid"; + $status = "f"; + } + else { + $msg = "$_: Matches running and defined image name and UUID"; + $status = "o"; + } + } + else { + $msg = "$_: Unmatched image name or image UUID.\n Defined: name = $node_defined_image_name_hash{$_}" . +" uuid = $node_defined_image_uuid_hash{$_}\n Running: name = $node_running_image_name_hash{$_}" . + " uuid = $node_running_image_uuid_hash{$_}"; + $status = "f"; + } + probe_utils->send_msg("$output", "$status", "$msg"); + } } # Probe verification step 2 - make sure all nodes are running the same osimage name and imageUUID if ($CONSISTENCY_CHECK) { - my $msg = "Undefined"; - my $status = "f"; - my $image_name_and_uuid; - my $image_uuid; - my %unique_image_hash; + my $msg = "Undefined"; + my $status = "f"; + my $image_name_and_uuid; + my $image_uuid; + my %unique_image_hash; - # Go throug the nodes and build a hash of key=image_name+image_uuid and value of nodename - foreach (@pingable_nodes) { - $image_name_and_uuid = $node_running_image_name_hash{$_} . ":" . $node_running_image_uuid_hash{$_}; - unless (exists $unique_image_hash{$image_name_and_uuid}) { - $unique_image_hash{$image_name_and_uuid} = $_; - } - } + # Go throug the nodes and build a hash of key=image_name+image_uuid and value of nodename + foreach (@pingable_nodes) { + $image_name_and_uuid = $node_running_image_name_hash{$_} . ":" . $node_running_image_uuid_hash{$_}; + unless (exists $unique_image_hash{$image_name_and_uuid}) { + $unique_image_hash{$image_name_and_uuid} = $_; + } + } - # print Dumper(\%unique_image_hash); - # If there is more then one key in the hash, nodes have multiple images. - my $number_of_keys = keys %unique_image_hash; - if ($number_of_keys == 1) { - my @image_names = keys %unique_image_hash; - if ($image_names[0] =~ /$na/) { - $msg = "Not able to determine image name or uuid of the image installed on any compute node."; - $status = "f"; - } - else { - $msg = "All compute nodes have the same image installed: @image_names."; - $status = "o"; - } - } - else { - my $node_image_table; - foreach $compute_node (keys %node_running_image_name_hash) { - $node_image_table .= sprintf("%-15s %-30s : %-20s\n", $compute_node, $node_running_image_name_hash{$compute_node}, $node_running_image_uuid_hash{$compute_node}); - } - $msg = "Not all compute nodes are running the same os image.\n" . $node_image_table; - $status = "f"; - } + # print Dumper(\%unique_image_hash); + # If there is more then one key in the hash, nodes have multiple images. + my $number_of_keys = keys %unique_image_hash; + if ($number_of_keys == 1) { + my @image_names = keys %unique_image_hash; + if ($image_names[0] =~ /$na/) { + $msg = "Not able to determine image name or uuid of the image installed on any compute node."; + $status = "f"; + } + else { + $msg = "All compute nodes have the same image installed: @image_names."; + $status = "o"; + } + } + else { + my $node_image_table; + foreach $compute_node (keys %node_running_image_name_hash) { + $node_image_table .= sprintf("%-15s %-30s : %-20s\n", $compute_node, $node_running_image_name_hash{$compute_node}, $node_running_image_uuid_hash{$compute_node}); + } + $msg = "Not all compute nodes are running the same os image.\n" . $node_image_table; + $status = "f"; + } - probe_utils->send_msg("$output", "$status", "$msg"); + probe_utils->send_msg("$output", "$status", "$msg"); } exit 0;