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?
--
Tod Oace, Intel Corporation <[email protected]>
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine