created PluginResolution class

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: I68560934b487f12b6b95dc73a93bb049f7777656
diff --git a/analyzer/ras-data/data/ras-data-p10-10.json b/analyzer/ras-data/data/ras-data-p10-10.json
index 0957846..d31ddc5 100644
--- a/analyzer/ras-data/data/ras-data-p10-10.json
+++ b/analyzer/ras-data/data/ras-data-p10-10.json
@@ -936,11 +936,11 @@
             { "type": "action", "name": "self_L" }
         ],
         "pll_unlock_0": [
-            { "type": "plugin", "name": "pll_unlock_0" },
+            { "type": "plugin", "name": "pll_unlock", "instance": 0 },
             { "type": "callout_self", "priority": "MED", "guard": false }
         ],
         "pll_unlock_1": [
-            { "type": "plugin", "name": "pll_unlock_1" },
+            { "type": "plugin", "name": "pll_unlock", "instance": 1 },
             { "type": "callout_self", "priority": "MED", "guard": false }
         ],
         "pcb_slave_parity": [
diff --git a/analyzer/ras-data/data/ras-data-p10-20.json b/analyzer/ras-data/data/ras-data-p10-20.json
index 957ec43..8ed5f00 100644
--- a/analyzer/ras-data/data/ras-data-p10-20.json
+++ b/analyzer/ras-data/data/ras-data-p10-20.json
@@ -936,11 +936,11 @@
             { "type": "action", "name": "self_L" }
         ],
         "pll_unlock_0": [
-            { "type": "plugin", "name": "pll_unlock_0" },
+            { "type": "plugin", "name": "pll_unlock", "instance": 0 },
             { "type": "callout_self", "priority": "MED", "guard": false }
         ],
         "pll_unlock_1": [
-            { "type": "plugin", "name": "pll_unlock_1" },
+            { "type": "plugin", "name": "pll_unlock", "instance": 1 },
             { "type": "callout_self", "priority": "MED", "guard": false }
         ],
         "pcb_slave_parity": [
diff --git a/analyzer/ras-data/ras-data-definition.md b/analyzer/ras-data/ras-data-definition.md
index d27b3ab..1ad92d1 100644
--- a/analyzer/ras-data/ras-data-definition.md
+++ b/analyzer/ras-data/ras-data-definition.md
@@ -225,6 +225,7 @@
 |----------|-------------------------------------------------------------------|
 | type     | value (string): `plugin`                                          |
 | name     | A string representing the plugin name.                            |
+| instance | Some plugins may be defined for multiple register/unit instances. |
 
 ### 5.2) `actions` example
 
diff --git a/analyzer/ras-data/ras-data-parser.cpp b/analyzer/ras-data/ras-data-parser.cpp
index 6ec8b6c..c6d228e 100644
--- a/analyzer/ras-data/ras-data-parser.cpp
+++ b/analyzer/ras-data/ras-data-parser.cpp
@@ -257,9 +257,9 @@
         else if ("plugin" == type)
         {
             auto name = a.at("name").get<std::string>();
+            auto inst = a.at("instance").get<unsigned int>();
 
-            // TODO
-            trace::inf("plugin: name=%s", name.c_str());
+            o_list->push(std::make_shared<PluginResolution>(name, inst));
         }
         else
         {
diff --git a/analyzer/ras-data/schema/ras-data-schema-v01.json b/analyzer/ras-data/schema/ras-data-schema-v01.json
index e18b933..4923ba4 100644
--- a/analyzer/ras-data/schema/ras-data-schema-v01.json
+++ b/analyzer/ras-data/schema/ras-data-schema-v01.json
@@ -205,8 +205,13 @@
                                     }
                                 },
                                 "then": {
-                                    "required": [ "name" ],
-                                    "not": { "required": [ "priority", "guard" ] }
+                                    "required": [ "name", "instance" ],
+                                    "not": { "required": [ "priority", "guard" ] },
+                                    "properties": {
+                                        "instance": {
+                                            "type": "integer"
+                                        }
+                                    }
                                 }
                             }
                         ]