Brendan Strejcek wrote: > Moore, Joe wrote: > > > The trouble comes in that state is not preserved across cfengine > > invokations. The restart_inetd class that's defined when you editfiles > > /etc/inetd.conf won't be defined the next time cfengine runs. > > > > So one option for cfengine3 could be to preserve more state, and have > > actions explicitly clear that state... idea: classes that are defined > > by an action (using the new "set" keyword) are kept until they are > > cleared. (this might be implemented by a state DB or by giving them to > > cfenvd) > > An interesting idea. One could think about this as exceptions that can > be raised during one cfagent run and handled in a subsequent run. > > We might be able to do this now with: > > SetState("preserved_class",10,Preserve) > SetState(non_preserved_class,60,Reset) > UnsetState(myclass) > > (See http://www.cfengine.org/docs/cfengine-Reference.html#alerts ) > > All those are used in the "alerts" sections, which would just be weird > to use for what you discuss above, not in the least because "alerts" is > one of those magic non-actionsequence actions.
Here are some code examples: $ cat preserve #!/usr/sbin/cfagent -qKf control: actionsequence = ( shellcommands ) shellcommands: any:: "/bin/echo setting a class" define=create_preserved preserved:: "/bin/echo preserved set" define=remove_preserved alerts: create_preserved:: SetState("preserved",999,Preserve) remove_preserved:: UnsetState(preserved) $ ./preserve cfengine::/bin/echo setti: setting a class $ ./preserve cfengine::/bin/echo setti: setting a class cfengine::/bin/echo prese: preserved set $ ./preserve cfengine::/bin/echo setti: setting a class $ One could use this like: editfiles: { /some/file # SomeEdits DefineClasses "restart_daemon:doublecheck_restart" } shellcommands: restart_daemon:: "/etc/init.d/daemon restart" define=clear_restart restart_again:: "/etc/init.d/daemon restart" define=clear_restart alerts: doublecheck_restart:: SetState("restart_again",999,Preserve) clear_restart:: UnsetState(restart_again) The idea that I tried to encode above was: "if we were not able to restart the daemon this time, try next time, and so on until we are successful." I'm not sure exactly what the utility of this is, since I think that alerts happen after everything else, so if the run is interrupted, the "restart_again" class won't be set anyways. It would also be nice if we could use "inf" as a duration as well, to force a set class to be manually cleared. _______________________________________________ Help-cfengine mailing list Help-cfengine@gnu.org http://lists.gnu.org/mailman/listinfo/help-cfengine