lstree implementation.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11301 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -344,4 +344,98 @@ sub getmulcon { | ||||
|     $callback->($rsp2);   | ||||
| } | ||||
|  | ||||
| ########################################################################## | ||||
| # generate hardware tree, called from lstree. | ||||
| ########################################################################## | ||||
| sub genhwtree | ||||
| { | ||||
|     my $nodelist = shift;  # array ref | ||||
| 	my $callback = shift; | ||||
| 	my %hwtree; | ||||
|  | ||||
|     # read ppc table | ||||
|     my $ppctab = xCAT::Table->new('ppc'); | ||||
|     unless ($ppctab) | ||||
|     { | ||||
|         my $rsp = {}; | ||||
|         $rsp->{data}->[0] = "Can not open ppc table.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback, 1); | ||||
|     } | ||||
|  | ||||
|     my @entries = $ppctab->getAllNodeAttribs(['node','parent','hcp']); | ||||
|  | ||||
| ################################################################## | ||||
| ####################refine the loop after getnodetype updated!!!!! | ||||
| ################################################################## | ||||
|  | ||||
|     # only handle physical hardware objects here. | ||||
|     foreach my $node (@$nodelist) | ||||
|     { | ||||
|         # will build a hash like sfp->frame->cec | ||||
|         my $ntype = xCAT::DBobjUtils->getnodetype($node); | ||||
|         if ($ntype =~ /^frame$/) | ||||
|         { | ||||
|             # assume frame always available in DFM. | ||||
|             # try to see if sfp available. | ||||
|             my $frment = $ppctab->getNodeAttribs($node, ['sfp']); | ||||
|  | ||||
|             foreach my $ent (@entries) | ||||
|             { | ||||
|                 # get all cecs by this frame | ||||
|                 if ($ent->{parent} =~ /$node/) | ||||
|                 { | ||||
|                     if ($frment->{sfp}) | ||||
|                     { | ||||
|                         unless (grep(/$ent->{node}/, @{$hwtree{$frment->{sfp}}{$node}})) | ||||
|                         { | ||||
|                             push @{$hwtree{$frment->{sfp}}{$node}}, $ent->{node}; | ||||
|                         } | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         unless (grep(/$ent->{node}/, @{$hwtree{0}{$node}})) | ||||
|                         { | ||||
|                             push @{$hwtree{0}{$node}}, $ent->{node}; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         elsif ($ntype =~ /^cec$/) | ||||
|         { | ||||
|             # get cec's parent | ||||
|             my $cent = $ppctab->getNodeAttribs($node, ['parent']); | ||||
|             if ($cent->{parent}) # assume frame always available for DFM | ||||
|             { | ||||
|                 # try to see if sfp available. | ||||
|                 my $frment = $ppctab->getNodeAttribs($cent->{parent}, ['sfp']); | ||||
|                 if ($frment->{sfp}) | ||||
|                 { | ||||
|                     unless (grep(/$node/, @{$hwtree{$frment->{sfp}}{$cent->{parent}}})) | ||||
|                     { | ||||
|                         push @{$hwtree{$frment->{sfp}}{$cent->{parent}}}, $node; | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     unless (grep(/$node/, @{$hwtree{0}{$cent->{parent}}})) | ||||
|                     { | ||||
|                         push @{$hwtree{0}{$cent->{parent}}}, $node; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             # may add new support later? | ||||
|             next; | ||||
|         }     | ||||
|     } | ||||
|  | ||||
|     return \%hwtree; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user