In many of my cfagent script I have constructs like this:
editfiles:
{ /etc/postfix/main.cf
BeginGroupIfNoSuchLine "mydestination = $(host), $(fqhost),
localhost"
DeleteLinesMatching "^mydestination.*"
Append "mydestination = $(host), $(fqhost), localhost"
EndGroup
BeginGroupIfNoSuchLine "mydomain = $(domain)"
DeleteLinesMatching "^mydomain.*"
Append "mydomain = $(domain)"
EndGroup
DefineClasses "restart_postfix"
}
The bit that bugs me the most about this construct is the repetition
of the text I am searching for and the text to replace it with.
What would be nifty would be something like this:
editfiles:
{ /etc/postfix/main.cf
UncommentAndSetValue "mydestination =" "$(host), $(fqhost),
localhost"
UncommentAndSetValue "mydomain =" "$(domain)"
DefineClasses "restart_postfix"
}
The first argument would be the variable that get its value changed,
and the second argument would be what it gets set to.
If the value was already set then nothing would happen. If a variable was
changed then the DefineClass would happen. If the variable was commented out
then it would be uncommented and set to the given value.
It seems like this kind of setting of variables in config files to some
value is half of what I use cfengine for and this would be a whole lot
easier to set up and then maintain.
Perhaps there is already a better way to do it that I have not found in
the manual yet?
Thanks,
Scott