Architecture #4585

Updated by Fran├žois ARMAND over 10 years ago

 We have a mostly unknown and unused feature in the parameter expansion allowing to refer a rule ID and then some of its property as a parameter.  

 That feature was only used for the common system technique, to allow to use technique section and variable to be used to build the list of children node id of a policy server. But we didn't had all the needed information to be able to implement relay server, and so we chose to use a system variable.  

 Moreover, the feature is quite complex: 

 - from an user point of view, because it breaks the natural ordering of Rudder configuration object between rules, groups and directives. In particular, when using it, it's quite easy to introduce cycle leading to unsoundness or to completly unwanted side-effects when modifying something that seems complettly independant, but has an hidden dependency 
 - from a code point of wiew, because it makes impossible to build static dependency graph between directives and rules, and so forbid a whole class of optimization in the promise generation process (and of course, the code to support that feature is quite hairy and impose in itself both a maintenance penalty for dev and a processing time penalty for users).  
 - from an evolution point of view, it makes any kind of autorization scheme almost impossible to build efficiently (or at all).  

 So, now that #4573 is merged and no technique use that feature anymore, we should also remove that "feature".  

 Remain the question of the removing timeframe. We should deprecate it for one revision before removing it, and so only mark it "deprecated" in 2.10, even if I'm pretty sure that nobody use that feature (even the available documentation at is not correct about it...)