17b93a162SVishwanatha Subbanna#!/usr/bin/env perl 2*65ca8e19SAndrew Geissler 37b93a162SVishwanatha Subbannause strict; 47b93a162SVishwanatha Subbannause warnings; 57b93a162SVishwanatha Subbanna 67b93a162SVishwanatha Subbannause mrw::Targets; # Set of APIs allowing access to parsed ServerWiz2 XML output 77b93a162SVishwanatha Subbannause mrw::Inventory; # To get list of Inventory targets 87b93a162SVishwanatha Subbannause Getopt::Long; # For parsing command line arguments 97b93a162SVishwanatha Subbanna 107b93a162SVishwanatha Subbanna# Globals 117b93a162SVishwanatha Subbannamy $force = 0; 127b93a162SVishwanatha Subbannamy $serverwizFile = ""; 137b93a162SVishwanatha Subbannamy $debug = 0; 147b93a162SVishwanatha Subbannamy $outputFile = ""; 157b93a162SVishwanatha Subbannamy $verbose = 0; 167b93a162SVishwanatha Subbanna 177b93a162SVishwanatha Subbanna# Command line argument parsing 187b93a162SVishwanatha SubbannaGetOptions( 197b93a162SVishwanatha Subbanna"f" => \$force, # numeric 207b93a162SVishwanatha Subbanna"i=s" => \$serverwizFile, # string 217b93a162SVishwanatha Subbanna"o=s" => \$outputFile, # string 227b93a162SVishwanatha Subbanna"d" => \$debug, 237b93a162SVishwanatha Subbanna"v" => \$verbose, 247b93a162SVishwanatha Subbanna) 257b93a162SVishwanatha Subbannaor printUsage(); 267b93a162SVishwanatha Subbanna 277b93a162SVishwanatha Subbannaif (($serverwizFile eq "") or ($outputFile eq "")) 287b93a162SVishwanatha Subbanna{ 297b93a162SVishwanatha Subbanna printUsage(); 307b93a162SVishwanatha Subbanna} 317b93a162SVishwanatha Subbanna 327b93a162SVishwanatha Subbanna# Hashmap of all the OCCs and their sensor IDs 337b93a162SVishwanatha Subbannamy %occHash; 347b93a162SVishwanatha Subbanna 357b93a162SVishwanatha Subbanna# API used to access parsed XML data 367b93a162SVishwanatha Subbannamy $targetObj = Targets->new; 377b93a162SVishwanatha Subbannaif($verbose == 1) 387b93a162SVishwanatha Subbanna{ 397b93a162SVishwanatha Subbanna $targetObj->{debug} = 1; 407b93a162SVishwanatha Subbanna} 417b93a162SVishwanatha Subbanna 427b93a162SVishwanatha Subbannaif($force == 1) 437b93a162SVishwanatha Subbanna{ 447b93a162SVishwanatha Subbanna $targetObj->{force} = 1; 457b93a162SVishwanatha Subbanna} 467b93a162SVishwanatha Subbanna 477b93a162SVishwanatha Subbanna$targetObj->loadXML($serverwizFile); 487b93a162SVishwanatha Subbannaprint "Loaded MRW XML: $serverwizFile \n"; 497b93a162SVishwanatha Subbanna 507b93a162SVishwanatha Subbanna# Process all the targets in the XML 517b93a162SVishwanatha Subbannaforeach my $target (sort keys %{$targetObj->getAllTargets()}) 527b93a162SVishwanatha Subbanna{ 537b93a162SVishwanatha Subbanna # Only take the instances having 'OCC" as TYPE 547b93a162SVishwanatha Subbanna if ("OCC" ne $targetObj->getAttribute($target, "TYPE")) 557b93a162SVishwanatha Subbanna { 567b93a162SVishwanatha Subbanna next; 577b93a162SVishwanatha Subbanna } 587b93a162SVishwanatha Subbanna 597b93a162SVishwanatha Subbanna # OCC instance and sensor ID to insert into output file 607b93a162SVishwanatha Subbanna my $instance = ""; 617b93a162SVishwanatha Subbanna my $sensor = ""; 627b93a162SVishwanatha Subbanna 637b93a162SVishwanatha Subbanna # Now that we are in OCC target instance, get the instance number 647b93a162SVishwanatha Subbanna $instance = $targetObj->getAttribute($target, "IPMI_INSTANCE"); 657b93a162SVishwanatha Subbanna 667b93a162SVishwanatha Subbanna # Each OCC would have occ_active_sensor child that would have 677b93a162SVishwanatha Subbanna # more information, such as Sensor ID. 687b93a162SVishwanatha Subbanna # This would be an array of children targets 697b93a162SVishwanatha Subbanna my $children = $targetObj->getTargetChildren($target); 707b93a162SVishwanatha Subbanna 717b93a162SVishwanatha Subbanna for my $child (@{$children}) 727b93a162SVishwanatha Subbanna { 737b93a162SVishwanatha Subbanna $sensor = $targetObj->getAttribute($child, "IPMI_SENSOR_ID"); 747b93a162SVishwanatha Subbanna } 757b93a162SVishwanatha Subbanna 767b93a162SVishwanatha Subbanna # Populate a hashmap with OCC and its sensor ID 777b93a162SVishwanatha Subbanna $occHash{$instance} = $sensor; 787b93a162SVishwanatha Subbanna 797b93a162SVishwanatha Subbanna} # All the targets 807b93a162SVishwanatha Subbanna 817b93a162SVishwanatha Subbanna# Generate the yaml file 827b93a162SVishwanatha SubbannagenerateYamlFile(); 837b93a162SVishwanatha Subbanna##------------------------------------END OF MAIN----------------------- 847b93a162SVishwanatha Subbanna 857b93a162SVishwanatha Subbannasub generateYamlFile 867b93a162SVishwanatha Subbanna{ 877b93a162SVishwanatha Subbanna my $fileName = $outputFile; 887b93a162SVishwanatha Subbanna open(my $fh, '>', $fileName) or die "Could not open file '$fileName' $!"; 897b93a162SVishwanatha Subbanna 907b93a162SVishwanatha Subbanna foreach my $instance (sort keys %occHash) 917b93a162SVishwanatha Subbanna { 927b93a162SVishwanatha Subbanna # YAML with list of {Instance:SensorID} dictionary 937b93a162SVishwanatha Subbanna print $fh "- Instance: "; 947b93a162SVishwanatha Subbanna print $fh "$instance\n"; 957b93a162SVishwanatha Subbanna print $fh " SensorID: "; 967b93a162SVishwanatha Subbanna print $fh "$occHash{$instance}\n"; 977b93a162SVishwanatha Subbanna } 987b93a162SVishwanatha Subbanna close $fh; 997b93a162SVishwanatha Subbanna} 1007b93a162SVishwanatha Subbanna 1017b93a162SVishwanatha Subbanna# Helper function to put debug statements. 1027b93a162SVishwanatha Subbannasub printDebug 1037b93a162SVishwanatha Subbanna{ 1047b93a162SVishwanatha Subbanna my $str = shift; 1057b93a162SVishwanatha Subbanna print "DEBUG: ", $str, "\n" if $debug; 1067b93a162SVishwanatha Subbanna} 1077b93a162SVishwanatha Subbanna 1087b93a162SVishwanatha Subbanna# Usage 1097b93a162SVishwanatha Subbannasub printUsage 1107b93a162SVishwanatha Subbanna{ 1117b93a162SVishwanatha Subbanna print " 1127b93a162SVishwanatha Subbanna $0 -i [XML filename] -o [Output filename] [OPTIONS] 1137b93a162SVishwanatha SubbannaOptions: 1147b93a162SVishwanatha Subbanna -f = force output file creation even when errors 1157b93a162SVishwanatha Subbanna -d = debug mode 1167b93a162SVishwanatha Subbanna -v = verbose mode - for verbose o/p from Targets.pm 1177b93a162SVishwanatha Subbanna 1187b93a162SVishwanatha SubbannaPS: mrw::Targets can be found in https://github.com/open-power/serverwiz/ 1197b93a162SVishwanatha Subbanna mrw::Inventory can be found in https://github.com/openbmc/phosphor-mrw-tools/ 1207b93a162SVishwanatha Subbanna \n"; 1217b93a162SVishwanatha Subbanna exit(1); 1227b93a162SVishwanatha Subbanna} 1237b93a162SVishwanatha Subbanna#------------------------------------END OF SUB----------------------- 124