blob: 511bd257c6851fd2b953cb720feab0711e4bde74 [file] [log] [blame]
Vishwanatha Subbanna7b93a162017-07-21 17:03:18 +05301#!/usr/bin/env perl
Andrew Geissler65ca8e12022-07-16 11:36:14 -04002
Vishwanatha Subbanna7b93a162017-07-21 17:03:18 +05303use strict;
4use warnings;
5
6use mrw::Targets; # Set of APIs allowing access to parsed ServerWiz2 XML output
7use mrw::Inventory; # To get list of Inventory targets
8use Getopt::Long; # For parsing command line arguments
Vishwanatha Subbanna7b93a162017-07-21 17:03:18 +05309
10# Globals
11my $force = 0;
12my $serverwizFile = "";
13my $debug = 0;
14my $outputFile = "";
15my $verbose = 0;
16
17# Command line argument parsing
18GetOptions(
19"f" => \$force, # numeric
20"i=s" => \$serverwizFile, # string
21"o=s" => \$outputFile, # string
22"d" => \$debug,
23"v" => \$verbose,
24)
25or printUsage();
26
27if (($serverwizFile eq "") or ($outputFile eq ""))
28{
29 printUsage();
30}
31
32# Hashmap of all the OCCs and their sensor IDs
33my %occHash;
34
35# API used to access parsed XML data
36my $targetObj = Targets->new;
37if($verbose == 1)
38{
39 $targetObj->{debug} = 1;
40}
41
42if($force == 1)
43{
44 $targetObj->{force} = 1;
45}
46
47$targetObj->loadXML($serverwizFile);
48print "Loaded MRW XML: $serverwizFile \n";
49
50# Process all the targets in the XML
51foreach my $target (sort keys %{$targetObj->getAllTargets()})
52{
53 # Only take the instances having 'OCC" as TYPE
54 if ("OCC" ne $targetObj->getAttribute($target, "TYPE"))
55 {
56 next;
57 }
58
59 # OCC instance and sensor ID to insert into output file
60 my $instance = "";
61 my $sensor = "";
62
63 # Now that we are in OCC target instance, get the instance number
64 $instance = $targetObj->getAttribute($target, "IPMI_INSTANCE");
65
66 # Each OCC would have occ_active_sensor child that would have
67 # more information, such as Sensor ID.
68 # This would be an array of children targets
69 my $children = $targetObj->getTargetChildren($target);
70
71 for my $child (@{$children})
72 {
73 $sensor = $targetObj->getAttribute($child, "IPMI_SENSOR_ID");
74 }
75
76 # Populate a hashmap with OCC and its sensor ID
77 $occHash{$instance} = $sensor;
78
79} # All the targets
80
81# Generate the yaml file
82generateYamlFile();
83##------------------------------------END OF MAIN-----------------------
84
85sub generateYamlFile
86{
87 my $fileName = $outputFile;
88 open(my $fh, '>', $fileName) or die "Could not open file '$fileName' $!";
89
90 foreach my $instance (sort keys %occHash)
91 {
Vishwanatha Subbanna7b93a162017-07-21 17:03:18 +053092 # YAML with list of {Instance:SensorID} dictionary
93 print $fh "- Instance: ";
94 print $fh "$instance\n";
95 print $fh " SensorID: ";
96 print $fh "$occHash{$instance}\n";
97 }
98 close $fh;
99}
100
101# Helper function to put debug statements.
102sub printDebug
103{
104 my $str = shift;
105 print "DEBUG: ", $str, "\n" if $debug;
106}
107
108# Usage
109sub printUsage
110{
111 print "
112 $0 -i [XML filename] -o [Output filename] [OPTIONS]
113Options:
114 -f = force output file creation even when errors
115 -d = debug mode
116 -v = verbose mode - for verbose o/p from Targets.pm
117
118PS: mrw::Targets can be found in https://github.com/open-power/serverwiz/
119 mrw::Inventory can be found in https://github.com/openbmc/phosphor-mrw-tools/
120 \n";
121 exit(1);
122}
123#------------------------------------END OF SUB-----------------------