From 50e4c46d4f6ae58979e8fb5290e740eff545d638 Mon Sep 17 00:00:00 2001 From: zhaoertao Date: Fri, 6 Apr 2012 02:16:42 +0000 Subject: [PATCH] fix bug 3513522: provide more detailed information for 'conn' command git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.7@12140 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- perl-xCAT/xCAT/FSPconn.pm | 58 +++++++++++++++++++++++++++++---------- perl-xCAT/xCAT/PPCconn.pm | 36 ++++++++++++++++++------ 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/perl-xCAT/xCAT/FSPconn.pm b/perl-xCAT/xCAT/FSPconn.pm index 194046ac5..6c4fced62 100644 --- a/perl-xCAT/xCAT/FSPconn.pm +++ b/perl-xCAT/xCAT/FSPconn.pm @@ -92,6 +92,7 @@ sub mkhwconn_parse_args my $vpdtab = xCAT::Table->new( 'vpd'); my @bpa_ctrled_nodes = (); my @no_type_nodes = (); + my @error_type_nodes = (); my @frame_members = (); ########################################### @@ -159,7 +160,8 @@ sub mkhwconn_parse_args { unless ( $nodetype =~ /^(fsp|bpa|frame|cec|hmc|blade)$/) { - return ( usage("Node type is incorrect. \n")); + push @error_type_nodes, $node; + next; } } @@ -188,9 +190,12 @@ sub mkhwconn_parse_args if (scalar(@no_type_nodes)) { my $tmp_nodelist = join ',', @no_type_nodes; - return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist")); + return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist. Please define first and try again.\n")); + } + if (scalar(@error_type_nodes)) { + my $tmp_nodelist = join ',', @error_type_nodes; + return ( usage("Incorrect nodetype for nodes(s): $tmp_nodelist. Please modify first and try again.\n")); } - #if (scalar(@bpa_ctrled_nodes)) #{ # my $tmp_nodelist = join ',', @bpa_ctrled_nodes; @@ -354,24 +359,30 @@ sub lshwconn_parse_args } my $nodetype; + my @no_typenodes = (); + my @no_mgt_nodes = (); + my @error_type_nodes = (); my $typehash = xCAT::DBobjUtils->getnodetype(\@{$request->{node}}, "ppc"); for my $node ( @{$request->{node}}) { #my $ent = $nodetypetab->getNodeAttribs( $node, [qw(nodetype)]); my $nodehm = $nodehmtab->getNodeAttribs( $node, [qw(mgt)]); - #if ( ! $ent) - #{ - # return( ["Failed to get node type for node $node.\n"]); - #} - my $ttype = $$typehash{$node}; - if ( ! $ttype) + if ( ! $nodehm) { - return( ["Failed to get nodehm.mgt value for node $node.\n"]); + push @no_mgt_nodes, $node; + next; + } + my $ttype = $$typehash{$node}; + if ( !$ttype) + { + push @no_typenodes, $node; + next; } if ( $ttype ne 'fsp' and $ttype ne 'cec' and $ttype ne 'bpa' and $ttype ne 'frame' and $ttype ne 'blade') { - return( ["Node type $ttype is not supported for this command in FSPAPI\n"]); + push @error_type_nodes, $node; + next; } if ( ! $nodetype) { @@ -385,7 +396,19 @@ sub lshwconn_parse_args } } } - + if (scalar(@no_typenodes)) { + my $tmp_nodelist = join ',', @no_typenodes; + return ( ["Attribute nodetype.nodetype cannot be found for node(s): $tmp_nodelist. Please define first and try again.\n"]); + } + if (scalar(@no_mgt_nodes)) { + my $tmp_nodelist = join ',', @no_mgt_nodes; + return( ["Failed to get nodehm.mgt value for node(s) $tmp_nodelist. Please define first and try again.\n"]); + } + if (scalar(@error_type_nodes)) { + my $tmp_nodelist = join ',', @error_type_nodes; + my $link = (scalar(@error_type_nodes) == '1')? 'is':'are'; + return( ["Node type of node(s) $tmp_nodelist $link not supported for this command in FSPAPI.\n"]); + } #$nodetypetab->close(); $nodehmtab->close(); @@ -461,6 +484,7 @@ sub rmhwconn_parse_args return( ["Failed to open table 'nodehm'.\n"]) if (! $nodehmtab); my @bpa_ctrled_nodes = (); my @no_type_nodes = (); + my @no_mgt_nodes = (); my @frame_members = (); my $nodetype_hash = xCAT::DBobjUtils->getnodetype($nodes, "ppc"); for my $node ( @$nodes) @@ -468,7 +492,8 @@ sub rmhwconn_parse_args my $nodehm = $nodehmtab->getNodeAttribs( $node, [qw(mgt)]); if ( ! $nodehm) { - return( ["Failed to get nodehm.mgt value for node $node.\n"]); + push @no_mgt_nodes, $node; + next; } my $node_parent = undef; @@ -505,9 +530,12 @@ sub rmhwconn_parse_args if (scalar(@no_type_nodes)) { my $tmp_nodelist = join ',', @no_type_nodes; - return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist")); + return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist. Please define first and try again.\n")); + } + if (scalar(@no_mgt_nodes)) { + my $tmp_nodelist = join ',', @no_mgt_nodes; + return( ["Failed to get nodehm.mgt value for node(s) $tmp_nodelist. Please define first and try again.\n"]); } - $ppctab->close(); #$nodetypetab->close(); $vpdtab->close(); diff --git a/perl-xCAT/xCAT/PPCconn.pm b/perl-xCAT/xCAT/PPCconn.pm index 79311c1cc..2567ad292 100644 --- a/perl-xCAT/xCAT/PPCconn.pm +++ b/perl-xCAT/xCAT/PPCconn.pm @@ -90,13 +90,14 @@ sub mkhwconn_parse_args my @frame_members = (); if ( $ppctab) { - my $typehash = xCAT::DBobjUtils->getnodetype($nodes, "ppc"); for my $node ( @$nodes) { my $node_parent = undef; my $nodetype = undef; + #my $nodetype_hash = $nodetypetab->getNodeAttribs( $node,[qw(nodetype)]); my $node_parent_hash = $ppctab->getNodeAttribs( $node,[qw(parent)]); - $nodetype = $$typehash{$node}; + #$nodetype = $nodetype_hash->{nodetype}; + $nodetype = xCAT::DBobjUtils->getnodetype($node); $node_parent = $node_parent_hash->{parent}; if ( !$nodetype ) { @@ -159,7 +160,7 @@ sub mkhwconn_parse_args if (scalar(@no_type_nodes)) { my $tmp_nodelist = join ',', @no_type_nodes; - return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist")); + return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist. Please define first and try again.")); } if (scalar(@bpa_ctrled_nodes)) @@ -285,6 +286,9 @@ sub lshwconn_parse_args } my $nodetype; + my @no_type_nodes = (); + my @no_mgt_nodes = (); + my @error_type_nodes = (); for my $node ( @{$request->{node}}) { #my $ent = $nodetypetab->getNodeAttribs( $node, [qw(nodetype)]); @@ -292,11 +296,13 @@ sub lshwconn_parse_args my $nodehm = $nodehmtab->getNodeAttribs( $node, [qw(mgt)]); if ( ! $ttype) { - return( ["Failed to get node type for node $node.\n"]); + push @no_type_nodes, $node; + next; } if ( ! $nodehm) { - return( ["Failed to get nodehm.mgt value for node $node.\n"]); + push @no_mgt_nodes, $node; + next; } elsif ( $nodehm->{mgt} ne 'hmc') { @@ -306,7 +312,8 @@ sub lshwconn_parse_args and $ttype ne 'fsp' and $ttype ne 'cec' and $ttype ne 'bpa' and $ttype ne 'frame') { - return( ["Node type $ttype is not supported for this command.\n"]); + push @error_type_nodes, $node; + next; } if ( ! $nodetype) { @@ -320,7 +327,19 @@ sub lshwconn_parse_args } } } - + if (scalar(@no_type_nodes)) { + my $tmp_nodelist = join ',', @no_type_nodes; + return( ["Failed to get node type for node(s) $tmp_nodelist. Please define first and try again\n"]); + } + if (scalar(@no_mgt_nodes)) { + my $tmp_nodelist = join ',', @no_mgt_nodes; + return( ["Failed to get nodehm.mgt value for node(s) $tmp_nodelist. Please define first and try again.\n"]); + } + if (scalar(@error_type_nodes)) { + my $tmp_nodelist = join ',', @error_type_nodes; + my $link = (scalar(@error_type_nodes) == '1')? 'is':'are'; + return( ["Node type of node(s) $tmp_nodelist $link not supported for this command.\n"]); + } $request->{nodetype} = $nodetype; $request->{method} = 'lshwconn'; @@ -379,6 +398,7 @@ sub rmhwconn_parse_args my $newtype = xCAT::DBobjUtils::getnodetype($node); unless ($newtype) { push @no_type_nodes, $node; + next; } if ($newtype =~ /^(fsp|bpa)$/ ) @@ -422,7 +442,7 @@ sub rmhwconn_parse_args if (scalar(@no_type_nodes)) { my $tmp_nodelist = join ',', @no_type_nodes; - return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist")); + return ( usage("Attribute nodetype.nodetype cannot be found for node(s) $tmp_nodelist. Please define first and try again.\n")); } if (scalar(@bpa_ctrled_nodes))