[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Ordering and cfengine 3 (was RE: Is this quirky for a simple copy, e
From: |
Brendan Strejcek |
Subject: |
Re: Ordering and cfengine 3 (was RE: Is this quirky for a simple copy, editfiles operation?) |
Date: |
Fri, 13 May 2005 14:58:32 -0500 |
User-agent: |
Mutt/1.5.6+20040907i |
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.