1*b4edc27aSAndrew Geissler#!/usr/bin/env perl 265ca8e19SAndrew Geissler 39f3e1c1eSDeepak Kodihalliuse strict; 49f3e1c1eSDeepak Kodihalliuse warnings; 59f3e1c1eSDeepak Kodihalli 69f3e1c1eSDeepak Kodihalli 79f3e1c1eSDeepak Kodihalliuse mrw::Targets; 89f3e1c1eSDeepak Kodihalliuse mrw::Inventory; 99f3e1c1eSDeepak Kodihalliuse mrw::Util; 109f3e1c1eSDeepak Kodihalliuse Getopt::Long; 119f3e1c1eSDeepak Kodihalliuse YAML::Tiny qw(LoadFile); 129f3e1c1eSDeepak Kodihalli 139f3e1c1eSDeepak Kodihalli 149f3e1c1eSDeepak Kodihallimy $mrwFile = ""; 159f3e1c1eSDeepak Kodihallimy $outFile = ""; 169f3e1c1eSDeepak Kodihallimy $configFile = ""; 1751041fc8SSantosh Puranikmy $skipBrokenMrw = 0; 189f3e1c1eSDeepak Kodihalli 199f3e1c1eSDeepak Kodihalli 209f3e1c1eSDeepak KodihalliGetOptions( 219f3e1c1eSDeepak Kodihalli"m=s" => \$mrwFile, 229f3e1c1eSDeepak Kodihalli"c=s" => \$configFile, 239f3e1c1eSDeepak Kodihalli"o=s" => \$outFile, 2451041fc8SSantosh Puranik"skip-broken-mrw" => \$skipBrokenMrw 259f3e1c1eSDeepak Kodihalli) 269f3e1c1eSDeepak Kodihallior printUsage(); 279f3e1c1eSDeepak Kodihalli 289f3e1c1eSDeepak Kodihalli 299f3e1c1eSDeepak Kodihalliif (($mrwFile eq "") or ($configFile eq "") or ($outFile eq "")) 309f3e1c1eSDeepak Kodihalli{ 319f3e1c1eSDeepak Kodihalli printUsage(); 329f3e1c1eSDeepak Kodihalli} 339f3e1c1eSDeepak Kodihalli 349f3e1c1eSDeepak Kodihalli 359f3e1c1eSDeepak Kodihalli# Load system MRW 369f3e1c1eSDeepak Kodihallimy $targets = Targets->new; 379f3e1c1eSDeepak Kodihalli$targets->loadXML($mrwFile); 389f3e1c1eSDeepak Kodihallimy @inventory = Inventory::getInventory($targets); 399f3e1c1eSDeepak Kodihalli 409f3e1c1eSDeepak Kodihalli 419f3e1c1eSDeepak Kodihalli# Parse config YAML 429f3e1c1eSDeepak Kodihallimy $targetItems = LoadFile($configFile); 439f3e1c1eSDeepak Kodihalli 449f3e1c1eSDeepak Kodihalli 459f3e1c1eSDeepak Kodihalli# Targets we're interested in, from the config YAML 469f3e1c1eSDeepak Kodihallimy @targetNames = keys %{$targetItems}; 479f3e1c1eSDeepak Kodihallimy %targetHash; 489f3e1c1eSDeepak Kodihalli@targetHash{@targetNames} = (); 499f3e1c1eSDeepak Kodihalli 509f3e1c1eSDeepak Kodihalli 519f3e1c1eSDeepak Kodihalli# Target Type : Target inventory path 529f3e1c1eSDeepak Kodihallimy %defaultPaths = ( 539f3e1c1eSDeepak Kodihalli "ETHERNET", 549f3e1c1eSDeepak Kodihalli Util::getObmcName( 559f3e1c1eSDeepak Kodihalli \@inventory, 569f3e1c1eSDeepak Kodihalli Util::getBMCTarget($targets))."/ethernet" 579f3e1c1eSDeepak Kodihalli); 589f3e1c1eSDeepak Kodihalli 599f3e1c1eSDeepak Kodihalli 609f3e1c1eSDeepak Kodihalliopen(my $fh, '>', $outFile) or die "Could not open file '$outFile' $!"; 619f3e1c1eSDeepak Kodihalli# Retrieve OBMC path of targets we're interested in 629f3e1c1eSDeepak Kodihallifor my $item (@inventory) { 639f3e1c1eSDeepak Kodihalli my $targetType = ""; 649f3e1c1eSDeepak Kodihalli my $path = ""; 659f3e1c1eSDeepak Kodihalli 669f3e1c1eSDeepak Kodihalli if (!$targets->isBadAttribute($item->{TARGET}, "TYPE")) { 679f3e1c1eSDeepak Kodihalli $targetType = $targets->getAttribute($item->{TARGET}, "TYPE"); 689f3e1c1eSDeepak Kodihalli } 699f3e1c1eSDeepak Kodihalli next if (not exists $targetItems->{$targetType}); 709f3e1c1eSDeepak Kodihalli 719f3e1c1eSDeepak Kodihalli writeOutput($targetType, 729f3e1c1eSDeepak Kodihalli $item, 739f3e1c1eSDeepak Kodihalli $targetItems); 749f3e1c1eSDeepak Kodihalli delete($targetHash{$targetType}); 759f3e1c1eSDeepak Kodihalli} 769f3e1c1eSDeepak KodihalliwriteRemaining($targetItems); 779f3e1c1eSDeepak Kodihalliclose $fh; 789f3e1c1eSDeepak Kodihalli 799f3e1c1eSDeepak Kodihalli 809f3e1c1eSDeepak Kodihallisub writeRemaining 819f3e1c1eSDeepak Kodihalli{ 829f3e1c1eSDeepak Kodihalli my ($yamlDict) = @_; 839f3e1c1eSDeepak Kodihalli for my $type (keys %targetHash) 849f3e1c1eSDeepak Kodihalli { 8551041fc8SSantosh Puranik if($skipBrokenMrw and !exists $defaultPaths{$type}) 8651041fc8SSantosh Puranik { 8751041fc8SSantosh Puranik next; 8851041fc8SSantosh Puranik } 899f3e1c1eSDeepak Kodihalli print $fh $defaultPaths{$type}.":"; 909f3e1c1eSDeepak Kodihalli print $fh "\n"; 919f3e1c1eSDeepak Kodihalli while (my ($interface,$propertyMap) = each %{$yamlDict->{$type}}) 929f3e1c1eSDeepak Kodihalli { 939f3e1c1eSDeepak Kodihalli print $fh " ".$interface.":"; 949f3e1c1eSDeepak Kodihalli print $fh "\n"; 959f3e1c1eSDeepak Kodihalli while (my ($property,$value) = each %{$propertyMap}) 969f3e1c1eSDeepak Kodihalli { 979f3e1c1eSDeepak Kodihalli $value = "'".$value."'"; 989f3e1c1eSDeepak Kodihalli print $fh " ".$property.": ".$value; 999f3e1c1eSDeepak Kodihalli print $fh "\n"; 1009f3e1c1eSDeepak Kodihalli } 1019f3e1c1eSDeepak Kodihalli } 1029f3e1c1eSDeepak Kodihalli } 1039f3e1c1eSDeepak Kodihalli} 1049f3e1c1eSDeepak Kodihalli 1059f3e1c1eSDeepak Kodihalli 1069f3e1c1eSDeepak Kodihallisub writeOutput 1079f3e1c1eSDeepak Kodihalli{ 1089f3e1c1eSDeepak Kodihalli my ($type, $item, $yamlDict) = @_; 1099f3e1c1eSDeepak Kodihalli print $fh $item->{OBMC_NAME}.":"; 1109f3e1c1eSDeepak Kodihalli print $fh "\n"; 1119f3e1c1eSDeepak Kodihalli while (my ($interface,$propertyMap) = each %{$yamlDict->{$type}}) 1129f3e1c1eSDeepak Kodihalli { 1139f3e1c1eSDeepak Kodihalli print $fh " ".$interface.":"; 1149f3e1c1eSDeepak Kodihalli print $fh "\n"; 1159f3e1c1eSDeepak Kodihalli while (my ($property,$value) = each %{$propertyMap}) 1169f3e1c1eSDeepak Kodihalli { 1179f3e1c1eSDeepak Kodihalli $value = getValue($item, $property, $value); 1189f3e1c1eSDeepak Kodihalli print $fh " ".$property.": ".$value; 1199f3e1c1eSDeepak Kodihalli print $fh "\n"; 1209f3e1c1eSDeepak Kodihalli } 1219f3e1c1eSDeepak Kodihalli } 1229f3e1c1eSDeepak Kodihalli} 1239f3e1c1eSDeepak Kodihalli 1249f3e1c1eSDeepak Kodihalli 1259f3e1c1eSDeepak Kodihallisub getValue 1269f3e1c1eSDeepak Kodihalli{ 1279f3e1c1eSDeepak Kodihalli my ($item, $property, $value) = @_; 1289f3e1c1eSDeepak Kodihalli $value = "'".$value."'"; 1299f3e1c1eSDeepak Kodihalli 1309f3e1c1eSDeepak Kodihalli if ($property eq "FieldReplaceable") 1319f3e1c1eSDeepak Kodihalli { 1329f3e1c1eSDeepak Kodihalli $value = "'false'"; 1339f3e1c1eSDeepak Kodihalli if (!$targets->isBadAttribute($item->{TARGET}, "RU_TYPE")) 1349f3e1c1eSDeepak Kodihalli { 1359f3e1c1eSDeepak Kodihalli my $ruType = $targets->getAttribute($item->{TARGET}, "RU_TYPE"); 1369f3e1c1eSDeepak Kodihalli if (($ruType eq "FRU") || ($ruType eq "CRU")) 1379f3e1c1eSDeepak Kodihalli { 1389f3e1c1eSDeepak Kodihalli $value = "'true'"; 1399f3e1c1eSDeepak Kodihalli } 1409f3e1c1eSDeepak Kodihalli } 1419f3e1c1eSDeepak Kodihalli } 1429f3e1c1eSDeepak Kodihalli 1439f3e1c1eSDeepak Kodihalli return $value; 1449f3e1c1eSDeepak Kodihalli} 1459f3e1c1eSDeepak Kodihalli 1469f3e1c1eSDeepak Kodihalli 1479f3e1c1eSDeepak Kodihallisub printUsage 1489f3e1c1eSDeepak Kodihalli{ 1499f3e1c1eSDeepak Kodihalli print " 15051041fc8SSantosh Puranik $0 -m [MRW file] -c [Config yaml] -o [Output filename] [OPTIONS] 15151041fc8SSantosh PuranikOptions: 15251041fc8SSantosh Puranik --skip-broken-mrw = Skip broken MRW targets 15351041fc8SSantosh Puranik \n"; 1549f3e1c1eSDeepak Kodihalli exit(1); 1559f3e1c1eSDeepak Kodihalli} 156