commit | e96f2aa70b93bbfee8db2a1b4fcea65d7c3e57ca | [log] [tgz] |
---|---|---|
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | Sun Dec 06 19:09:09 2020 -0500 |
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | Mon Dec 07 15:52:27 2020 -0500 |
tree | 4161fbec760eabe2feb04c4f8d4c4436c673e393 | |
parent | 104ccba944324c523ae1cdee564e3171329e43bd [diff] |
manager: explicitly pass deferSignal Explicitly pass the deferSignal parameter to the dbus bindings to enable creating objects without emitting signals. The patch does not introduce any functional change - only future capability; the dbus binding argument is defaulted to emit a signal (deferSignal = false) and that logic is preserved - moved from the binding call site to higher up the call stack (updateInterfaces). A careful observer may notice this patch highlights that interfaces are constructed with the map-of-properties constructor with signals enabled. This is arguably a bug in the bindings - it would never make sense to construct an interface in this fashion and send PropertiesChanged signals while the interface is in the process of being constructed. This patch retains the current broken behavior, with a fix to be provided in a later patch. Change-Id: I0d9ef93651595b751e96cae07d9f1095770c05a6 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.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, run-time calls to the Notify method of the Manager interface, and association definition JSON files 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:
PIM can create associations between inventory items and other D-Bus objects.
This functionality is optional and is controlled with the --enable-associations
configure option. It defaults to disabled.
To use this, the associations to create should be defined in a JSON file which is specified by the ASSOCIATIONS_FILE_PATH
configure variable, which defaults to /usr/share/phosphor-inventory-manager/associations.json
. This file is processed at runtime.
An example of this JSON is:
[ { "path": "system/chassis/motherboard/cpu0/core1", "endpoints": [ { "types": { "fType": "sensors", "rType": "inventory" }, "paths": [ "/xyz/openbmc_project/sensors/temperature/p0_core0_temp" ] } ] } ]
Then, when/if PIM creates the xyz/openbmc_project/system/chassis/motherboard/cpu0/core1
inventory object, it will add an xyz.openbmc_project.Association.Definitions
interface on it such that the object mapper creates the 2 association objects:
/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core1/sensors endpoints property: ['/xyz/openbmc_project/sensors/temperature/p0_core0_temp'] /xyz/openbmc_project/sensors/temperature/p0_core0_temp/inventory endpoints property: ['/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core1']
The JSON description is:
[ { "path": "The relative path of the inventory object to create the xyz.openbmc_project.Association.Definitions interface on." "endpoints": [ { "types": { "fType": "The forward association type." "rType": "The reverse association type." }, "paths": [ "The list of association endpoints for this inventory path and association type." ] } ] } ]
After running pimgen.py, build PIM using the following steps:
./bootstrap.sh ./configure ${CONFIGURE_FLAGS} make
To clean the repository run:
./bootstrap.sh clean