Todd, thanks for writing, your ideas are certainly clear, and I will give them some serious thought.
The class/variable issue is more complex than it seems, and the ordering might not always help convergence of classes and variables (something of a chicken/egg problem). I will think about it though to see if there is something that can be made easier. These changes are not going to make it into the next release though - they are pretty big issues with the potential to destabilize and change behaviour. CTO and Founder CFEngine http://www.cfengine.com http://www.markburgess.org Twitter: @markburgess_osl, @CFEngine_news On 03/23/2012 11:39 PM, Oace, Tod R wrote: > On Mar 16, 2012, at 9:46 AM, Nick Anderson wrote: > >> Yep, when I have to do some strict ordering I will also set a negative >> like "not_has_shortname" right after so that I can tell if something has >> really not been done yet. Usually I don't need that kind of strict >> ordering though. > > We're doing a bunch of not_has_shortname style classing here. Usually it's to > use $(other_bundle.variable) if that variable is defined or to use a default > value if it's not. > > > I have two big wishes to make variable definition (and other things) easier. > My first wish is for a new function to avoid having to use positive and > negative classes at all: > > vars: > "my_variable" string => first_defined_value( $(other_bundle.variable), > "default-value" ); > > # or maybe like this: > > "my_variable" string => if_else( isvariable("other_bundle.variable"), > $(other_bundle.variable), "default-value" ); > > I think this is both easier to code and simpler to understand than defining > and using has_shortname and not_has_shortname style classes. And I don't > think it would be that difficult to code one or both of these extra > functions. I might even be able to find some time to take a crack at it > someday. > > > My second big wish is more difficult to implement, but I think it could be > really good for CFEngine. Basically, I think CFEngine should execute the > promises within each bundle in the order that they are coded. > > Today CFEngine collects a list of files: bundles, and a list of commands: > bundles, and a list for each other type of bundle. Then it executes all the > vars promises first, followed by all the classes, followed by each other type > of promise as defined by the internal actionsequence. So, today it executes > like this: > > vars promise1 > vars promise2 > classes promise1 > classes promise2 > files promise1 > commands promise1 > etc. > > Instead, CFEngine could collect a list that contains both the type of promise > as well as the promise itself. So if a bundle were written in the following > order, it would also be executed in this order: > > classes promise1 > vars promise1 > vars promise2 > classes promise2 > commands promise1 > files promise1 > etc. > > It would store the TYPE of promise in the list of promises, and then when it > is executing the promises it would use that promise TYPE value to call the > appropriate internal C function for that type of promise. And then there > would be no needed for the internal actionsequence. > > This style of bundle execution could still make up to three passes to ensure > promises are kept, same as it does today. I think that's still a good idea. > It would just execute them all in the order written. > > This style of execution would solve this classes: v.s. vars: ordering > difficulty. We wouldn't have to define not_has_shortname classes because we > would know that the has_shortname promise would be executed first (like it > was in CFEngine 2). And, this style of execution would also alleviate the > need to use classing in many situation to chain promises together in the > desired order of execution. And I wouldn't need my yellow electronic sticky > note that has the internal actionsequence order anymore. :-) > > > What do you all think? Am I explaining my ideas clearly enough? > _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine