system: implement firmware status in czechlight-system

This patch implements filling the data in the
czechlight-system:firmware/firmware-slot list. The list is supposed to
hold the basic information about the current firmware slot OS version
and boot status. All the data are provided by RAUC.

Because RAUC provides the slot data vis D-Bus only when explicitly asked
by GetSlotStatus function over and there are no signals (or signals about
property changes), we have to actually call the function to retrieve the
data.

However, there is one catch. RAUC will not provide us with the data when
there is another operation in progress (i.e., when somebody invoked
installation). Therefore, we cache the data and we provide the caller
with the cached data whenever we can't fetch fresh data.

There is, however, another catch. The data can change any time, not only
after installation of new bundle. They can also change whenever somebody
marks a slot bad/good. We can't capture that change unless we are
querying the RAUC periodically, which we do not want to.

Let's say, somebody marks the slot bad and then run an installation.
During the installation he/she asks for the slot data. However, RAUC
won't let us fetch the data (because it is fully devoted to the
installation process), so we would return the old data, where the slot
is still good.

So, at least, we update the cache also before and after any installation,
because that is the only long-running operation in RAUC.

Change-Id: I890bf6813f15f9629a0c6acd516216e88d6cd986
3 files changed
tree: f1acfc3980aff05cbed5e9dc2e23d4a412d8296c
  1. .clang-format
  2. .gitmodules
  3. .zuul.CzechLight-internal.yaml
  4. .zuul.public.yaml
  5. CMakeLists.txt
  6. Doxyfile.in
  7. LICENSE
  8. LICENSE.md
  9. README.md
  10. ci/
  11. cmake/
  12. docs/
  13. src/
  14. tests/
  15. yang/
README.md

YANG System management for embedded devices running Linux

Together with sysrepo, this software provides "general system management" of embedded devices. The target platform is anything that runs Linux with systemd. This runs in production on CzechLight SDN DWDM devices.

Health tracking

This component tracks the overal health state of the system, including various sensors, or the state of systemd units. As an operator-friendly LED at the front panel of the appliance shows the aggregated health state.

System management

Firmware can be updated via RAUC, and various aspects of the system's configuration can be adjusted. This includes a firewall, basic network settings, and authentication management.

Supported YANG models

For a full list, consult the yang/ directory in this repository.