Group all node related access into one NodeFactRepository
We want to have all node access (ie: inventory, rudder settings, properties, etc) managed by only one repository.
This will allow to more easely advance on the path for #22672, but also to let us implements global security check on nodes (ACL) without fear that user-facing code does not consistently does cheks.
That will also define a defacto Internal API for node management, and so it must be done in a way that can be easely done with forward/backward compatibility in head.
Moreover, a central repository for both update and select will grantly simplify our cache management invalidation.
We will also take care in that refactoring to simplify to number of different node classes (by adding two more, à la XKCD protocol):
- a NodeFact will group all information, both inventory and rudder setting related, into only one normalized structure. It will be the sum of FullInventory and Node,
- a CoreNodeFact will group all cached information about a node. It will be like NodeInfo today, but with a simpler layout consistent with NodeFact.
Appart the massive internal code change, the observable external storage won't be changed: node will still be saved in LDAP.
Performance must be similar or better than before the change.
Code logic must be simpler.
User facing service and UI should not be modified, so we must be able to build a compatibility layer on top of that new infrastructure.