Convergence and Forced Operations

Cfengine is about convergence to a stable state. The state of the system should normally be at a fixed point, or else it should be returned to a fixed point. Occasionally changes in dependencies lead us to force changes, e.g. kill and restart a daemon.
commands:

    "Stop command";
    "Start command";
or
processes:

    "myprocess" signal => "term";

commands:

    "start command";
The problem with these commands is that they are not "guarded" (in the sense of Dijkstra's guarded commands). Such a command is not a convergent change unless it is qualified by a guarding class. e.g.
processes:

  change_in_dependency::

    "myprocess" signal => "term";


commands:

  change_in_dependency::

    "start command"
or
execution:

 change_in_dependency::

    "Stop command";
    "Start command";
or even
processes:

  change_in_dependency::

    "myprocess" 
        signal => "term"
        # define newclass ;


commands:

  new_class::

    "start command"

Mark Burgess
Last modified: Sat Aug 2 09:58:12 CEST 2008