summaryrefslogtreecommitdiffstats
path: root/monitor/main.cpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2018-05-02 16:03:48 -0500
committerMatthew Barth <msbarth@us.ibm.com>2018-05-03 16:56:37 -0500
commit81748b1425e453b6a815a7b8ed2fa861d3068ac7 (patch)
treead4094ee41e9623f9d0433be246d601e92c837f1 /monitor/main.cpp
parent7311c39440a88c6dcf3e64e5ee05900488721fbc (diff)
downloadphosphor-fan-presence-81748b1425e453b6a815a7b8ed2fa861d3068ac7.tar.gz
phosphor-fan-presence-81748b1425e453b6a815a7b8ed2fa861d3068ac7.zip
Support optional conditions on creating fans
This adds the functional infrastructure to optionally attach a condition function to a fan definition. When a condition is defined on a fan, it must be true for a fan's associated functional properties to be created. When the given condition fails, that fan's functional properties will not be created by fan monitor. A fan without a defined condition will have all of its associated functional properties created. Example of generated condition (generation commit to follow): make_condition(condition::propertiesMatch( std::vector<PropertyState>{ PropertyState{ PropertyIdentity{ "/xyz/openbmc_project/inventory/system/chassis", "xyz.openbmc_project.Inventory.Decorator.CoolingType", "WaterCooled" }, static_cast<bool>(false) } } )), Tested: Fan functional properties are not created when a condition fails Fan functional properties are created when condition passes Fan functional properties are created when no condition exists Change-Id: I9ced2e520d2f97e6655c9417970b3e976d78fef4 Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'monitor/main.cpp')
-rw-r--r--monitor/main.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/monitor/main.cpp b/monitor/main.cpp
index 060f27a..84dd7d1 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -72,6 +72,16 @@ int main(int argc, char* argv[])
for (const auto& fanDef : fanDefinitions)
{
+ // Check if a condition exists on the fan
+ auto condition = std::get<conditionField>(fanDef);
+ if (condition)
+ {
+ // Condition exists, skip adding fan if it fails
+ if (!(*condition)(bus))
+ {
+ continue;
+ }
+ }
fans.emplace_back(std::make_unique<Fan>(
mode, bus, eventPtr, trust, fanDef));
}
OpenPOWER on IntegriCloud