xref: /openbmc/phosphor-mrw-tools/gen_occ_map.pl (revision 65ca8e19c4b89b908efa79d138204e07436a28fc)
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