commit | f094d4428ecad7c2c349287fb811e5d6568644a9 | [log] [tgz] |
---|---|---|
author | Matthew Barth <msbarth@us.ibm.com> | Wed Sep 26 15:06:15 2018 -0500 |
committer | Matthew Barth <msbarth@us.ibm.com> | Tue Oct 23 09:22:59 2018 -0500 |
tree | 5e24de8f54aa36d935b354a599551548b6239e20 | |
parent | 3bb98f2901d4c5c473755a4cf1d211662bf707a0 [diff] |
Get an inventory property's value Adds support for inventory manager to retrieve a property's value that it hosts as input to condition tests. Utilizing a provided sdbusplus server binding member function to get a property from the inventory hosted interface, a property can be read from that interface within inventory manager. After the property is read, the condition test is performed and the resulting action(s) occur. The only currently supported condition test for using a property from within inventory manager is the `propertyIs` condition. This is an example of the expected generated source to get a property from within inventory manager: make_filter(functor::propertyIs( "/system/chassis", "xyz.openbmc_project.Inventory.Decorator.CoolingType", "WaterCooled", true, "xyz.openbmc_project.Inventory.Manager", make_get_property<sdbusplus::xyz::openbmc_project::Inventory:: Decorator::server::CoolingType::PropertiesVariant> ( functor::getProperty<sdbusplus::xyz::openbmc_project:: Inventory::Decorator::server::CoolingType> ( "/system/chassis", "xyz.openbmc_project.Inventory.Decorator.CoolingType", &sdbusplus::xyz::openbmc_project::Inventory:: Decorator::server::CoolingType::getPropertyByName, "WaterCooled" ) ) )) Tested: Manually edited generated code to use property within inventory and actions occurred when condition passed Manually edited generated code to use property within inventory and actions did not run when condition failed Actions not run when get property function omitted Change-Id: I094bbacbcdeb239d33cac343b2daeb5f86e0a58a Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Phosphor Inventory Manager (PIM) is an implementation of the xyz.openbmc_project.Inventory.Manager DBus interface, and supporting tools. PIM uses a combination of build-time YAML files and run-time calls to the Notify method of the Manager interface to provide a generalized inventory state management solution.
PIM includes a YAML parser (pimgen.py). For PIM to do anything useful, a set of YAML files must be provided externally that tell it what to do. Examples can be found in the examples directory.
The following top level YAML tags are supported:
events
Supported event tags are:
Subsequent tags are defined by the event type.
match
Supported match tags are:
startup
Supported startup tags are:
filters
Supported filter tags are:
Subsequent tags are defined by the filter type.
The available filters provided by PIM are:
propertyChangedTo
The property under test is obtained from an sdbus message generated from an org.freedesktop.DBus.Properties.PropertiesChanged signal payload.
Supported arguments for the propertyChangedTo filter are:
propertyIs
The property under test is obtained by invoking org.freedesktop.Properties.Get on the specified interface.
Supported arguments for the propertyIs filter are:
The service argument is optional. If provided that service will be called explicitly. If omitted, the service will be obtained with an xyz.openbmc_project.ObjectMapper lookup.
propertyIs can be used in an action condition context when the action operates on a dbus object path.
actions
Supported action tags are:
Subsequent tags are defined by the action type.
The available actions provided by PIM are:
destroyObject
Supported arguments for the destroyObject action are:
Conditions are tested and logically ANDed. If the conditions do not pass, the object is not destroyed. Any condition that accepts a path parameter is supported.
setProperty
Supported arguments for the setProperty action are:
Conditions are tested and logically ANDed. If the conditions do not pass, the property is not set. Any condition that accepts a path parameter is supported.
createObjects
Supported arguments for the createObjects action are:
After running pimgen.py, build PIM using the following steps:
./bootstrap.sh ./configure ${CONFIGURE_FLAGS} make
To clean the repository run:
./bootstrap.sh clean