regulators: Add check_set_device_value_exists function.

Add check_set_device_value_exists function to the config file validation
tool.
It checks if a set_device action specifies a device ID that does not
exist.

Signed-off-by: Bob King <Bob_King@wistron.com>
Change-Id: I95e6f9b51cb2c75c3d95b3ca1c4377f4b6e0171c
diff --git a/phosphor-regulators/tools/validate-regulators-config.py b/phosphor-regulators/tools/validate-regulators-config.py
index 081ff8b..77313e7 100644
--- a/phosphor-regulators/tools/validate-regulators-config.py
+++ b/phosphor-regulators/tools/validate-regulators-config.py
@@ -47,6 +47,32 @@
         rule_ids.append(rule['id'])
     return rule_ids
 
+def get_device_ids(config_json):
+    r"""
+    Get all device IDs in the configuration file.
+    config_json: Configuration file JSON
+    """
+    device_ids = []
+    for chassis in config_json.get('chassis', {}):
+        for device in chassis.get('devices', {}):
+            device_ids.append(device['id'])
+    return device_ids
+
+def check_set_device_value_exists(config_json):
+    r"""
+    Check if a set_device action specifies a device ID that does not exist.
+    config_json: Configuration file JSON
+    """
+
+    device_ids = get_values(config_json, 'set_device')
+    valid_device_ids = get_device_ids(config_json)
+    for device_id in device_ids:
+        if device_id not in valid_device_ids:
+            sys.stderr.write("Error: Device ID does not exist.\n"+\
+            "Found set_device action that specifies invalid device ID "+\
+            device_id+'\n')
+            handle_validation_error()
+
 def check_run_rule_value_exists(config_json):
     r"""
     Check if any run_rule actions specify a rule ID that does not exist.
@@ -241,3 +267,5 @@
     check_infinite_loops(config_json)
 
     check_run_rule_value_exists(config_json)
+
+    check_set_device_value_exists(config_json)