Architecture #14931
closedAlways versionned all configuration objects in Git
Description
We want to add auto versionning of ALL rudder objects which have a role in the configuration applied to node.
We have two "level" of objects related to configuration (and some objects are in the middle): "managed objects", which are totally under Rudder control (they are pure rudder concepts - typically, "directives"), and "extrinsic resources", which have an impact on final applied configuration, but are not configuration per se (typically: ncf library version ; node inventories).
The managed objects are:
- Rules
- Global Parameters
- Directives
- Techniques from Rudder Lib
- Techniques created with techniques editor (We need to add a “resource” part in them for config files, templates, etc whose version is linked to technique one.
- Groups (the group definition, but the group node list is extrinsic)
- Rudder top-level (ie rudder git minus other objects)
- Node parameters and some properties
"Extrinsic" dependencies are:
- Ncf library version,
- Rudder version,
- Server on which Rudder is installed flavor, version, or parameters,
- Rudder settings,
- Files in unsupervised directories,
- Some nodes properties,
- List of nodes in groups.
Some of these objects are already saved in git (directives, groups, ncf, parameters, ruleCategories, rules, techniques).
We need add the other ones, included some way to track changes in the extrinsic resources.
An other axe of change is to make everything-git-related behave in the same way. Today, techniques from the technique library have a "technique library version". This does make any sense in that new way of doing thing: HEAD is always current version appart if you specifilically say otherwise.
That means that we will also need to have a new "ID" for these objects with the commitid (defaulting to "master:HEAD")
The first step will be to make the git part of Rudder mandatory. This comes with a caveat: we still need to have a way to synchronize several git between rudder master / replica. The problematic things are "extrinsic resources", which need to be updatable but not put in git.
A first step (bis) will be to remove the "technique version" logic and always use last one. Becarefull: that need to keep the "observation" part where we can trigger a policy generation on change.
After that, we will be able to clean much of the rudder properties about Git in /opt/rudder/etc/rudder-web.properties
.
The second step is to add missing serialisation of things.
The third step will be to normalize generation trigger so that any change in git trigger a policy generation. At that point, we will be able to always log what commitid is used for the generation.