#! /usr/bin/perl use strict; use warnings; use mrw::Targets; use mrw::Inventory; use mrw::Util; use Getopt::Long; use YAML::Tiny qw(LoadFile); my $mrwFile = ""; my $outFile = ""; my $configFile = ""; GetOptions( "m=s" => \$mrwFile, "c=s" => \$configFile, "o=s" => \$outFile, ) or printUsage(); if (($mrwFile eq "") or ($configFile eq "") or ($outFile eq "")) { printUsage(); } # Load system MRW my $targets = Targets->new; $targets->loadXML($mrwFile); my @inventory = Inventory::getInventory($targets); # Parse config YAML my $targetItems = LoadFile($configFile); # Targets we're interested in, from the config YAML my @targetNames = keys %{$targetItems}; my %targetHash; @targetHash{@targetNames} = (); # Target Type : Target inventory path my %defaultPaths = ( "ETHERNET", Util::getObmcName( \@inventory, Util::getBMCTarget($targets))."/ethernet" ); open(my $fh, '>', $outFile) or die "Could not open file '$outFile' $!"; # Retrieve OBMC path of targets we're interested in for my $item (@inventory) { my $targetType = ""; my $path = ""; if (!$targets->isBadAttribute($item->{TARGET}, "TYPE")) { $targetType = $targets->getAttribute($item->{TARGET}, "TYPE"); } next if (not exists $targetItems->{$targetType}); writeOutput($targetType, $item, $targetItems); delete($targetHash{$targetType}); } writeRemaining($targetItems); close $fh; sub writeRemaining { my ($yamlDict) = @_; for my $type (keys %targetHash) { print $fh $defaultPaths{$type}.":"; print $fh "\n"; while (my ($interface,$propertyMap) = each %{$yamlDict->{$type}}) { print $fh " ".$interface.":"; print $fh "\n"; while (my ($property,$value) = each %{$propertyMap}) { $value = "'".$value."'"; print $fh " ".$property.": ".$value; print $fh "\n"; } } } } sub writeOutput { my ($type, $item, $yamlDict) = @_; print $fh $item->{OBMC_NAME}.":"; print $fh "\n"; while (my ($interface,$propertyMap) = each %{$yamlDict->{$type}}) { print $fh " ".$interface.":"; print $fh "\n"; while (my ($property,$value) = each %{$propertyMap}) { $value = getValue($item, $property, $value); print $fh " ".$property.": ".$value; print $fh "\n"; } } } sub getValue { my ($item, $property, $value) = @_; $value = "'".$value."'"; if ($property eq "FieldReplaceable") { $value = "'false'"; if (!$targets->isBadAttribute($item->{TARGET}, "RU_TYPE")) { my $ruType = $targets->getAttribute($item->{TARGET}, "RU_TYPE"); if (($ruType eq "FRU") || ($ruType eq "CRU")) { $value = "'true'"; } } } return $value; } sub printUsage { print " $0 -m [MRW file] -c [Config yaml] -o [Output filename]\n"; exit(1); }