splayclass
Prototype: splayclass(input, policy)
Return type: class
Description: Returns whether input
's time-slot has arrived,
according to a policy
.
The function returns true if the system clock lies within a scheduled
time-interval that maps to a hash of input
(which may be any arbitrary
string). Different strings will hash to different time intervals, and thus one
can map different tasks to time-intervals.
This function may be used to distribute a task, typically on multiple hosts, in time over a day or an hourly period, depending on the policy
(that must be either daily
or hourly
). This is useful for copying resources to multiple hosts from a single server, (e.g. large software updates), when simultaneous scheduling would lead to a bottleneck and/or server overload.
The function is similar to the splaytime
feature in cf-execd
, except that it allows you to base the decision on any string-criterion on a given host.
Arguments:
input
: Input string for classification, in the range.*
The variation in input
determines how effectively CFEngine will be able to
distribute tasks. CFEngine instances with the same input
will yield a true
result at the same time, and different input
will yield a true result at
different times. Thus tasks could be scheduled according to group names for
predictability, or according to IP addresses for distribution across the
policy interval.
policy
: Splay time policy, in the rangedaily
,hourly
The times at which the splayclass
will be defined depends on the policy
.
If it is hourly
then the class will be defined for a 5-minute interval every
hour. If the policy daily
, then the class will be defined for one 5-minute
interval every day. This means that splayclass
assumes that you are running
CFEngine with the default schedule of "every 5 minutes". If you change the
executor schedule
control variable, you may prevent the splayclass
from
ever being defined (that is, if the hashed 5-minute interval that is selected
by the splayclass
is a time when you have told CFEngine not to run).
Example:
bundle agent example
{
classes:
"my_turn" expression => splayclass("$(sys.host)$(sys.ipv4)","daily");
reports:
my_turn::
"Load balanced class activated";
}