Add generation of propertiesMatch condition

Update the mako template to generate conditions within the FanDefinition
sections when a condition is defined for a fan. Each supported condition
function's parameters are generated within a `getCondParams` mako
method, allowing easy support of additional conditions with differing
parameters.

Tested:
    A given condition's function and parameters generate correctly
    No condition function is generated on a fan where not defined

Resolves: openbmc/openbmc#2976

Change-Id: I3f0b30702fdcef6749929d85543270863eb26381
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py
index 83dcbc0..a5f225b 100755
--- a/monitor/gen-fan-monitor-defs.py
+++ b/monitor/gen-fan-monitor-defs.py
@@ -16,10 +16,32 @@
 """
 
 
-tmpl = '''/* This is a generated file. */
+tmpl = '''\
+<%!
+def indent(str, depth):
+    return ''.join(4*' '*depth+line for line in str.splitlines(True))
+%>\
+<%def name="getCondParams(cond)" buffered="True">
+%if (cond['name'] == 'propertiesMatch'):
+std::vector<PropertyState>{
+    %for i in cond['properties']:
+    PropertyState{
+        {
+            "${i['object']}",
+            "${i['interface']}",
+            "${i['property']['name']}"
+        },
+        static_cast<${i['property']['type']}>(${str(i['property']['value']).lower()})
+    },
+    %endfor
+}
+%endif
+</%def>\
+/* This is a generated file. */
 #include "fan_defs.hpp"
 #include "types.hpp"
 #include "groups.hpp"
+#include "conditions.hpp"
 
 using namespace phosphor::fan::monitor;
 using namespace phosphor::fan::trust;
@@ -50,6 +72,14 @@
                                        ${offset}},
                   %endfor
                   },
+                  %if ('condition' in fan_data) and \
+                  (fan_data['condition'] is not None):
+                  make_condition(condition::${fan_data['condition']['name']}(\
+                      ${indent(getCondParams(cond=fan_data['condition']), 5)}\
+                  ))
+                  %else:
+                  {}
+                  %endif
     },
 %endfor
 };