help-cfengine
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]