On Mon, Apr 25, 2011 at 08:21:21PM -0400, Michael Stevens wrote: >Is there a preferred method for getting variables using randomint() to stop >getting defined once they're set, eg, avoid this; > > !! Redefinition of a constant scalar "rnd" (was 2786 now 195) > !! Redefinition of a constant scalar "rnd" (was 195 now 2749) > !! Redefinition of a constant scalar "rnd" (was 2749 now 1852) > > >I'm trying to set a randomized 0/60 minute delay on a command that runs once >a day so that all the machines don't fire right at the same time and overload >a file server the command tells them to grab a bunch of files from. If there's >a better way to do this than embedding an "at" or "sleep" in my command, let >me know ...
This isn't a direct answer to your question, but I had to do something similar. I wanted the clients to consistantly choose a host from a list (it happens to be a list of two hosts, but the idea should scale). I used something like this (untested, use at own risk, formatting adjusted for clarity in email): bundle agent foo { vars: hostname_hash string => hash(getenv("HOSTNAME","40"),'md5'); servername string => execresult( "/bin/echo ${hostname_hash} | /bin/cut -c -16 | perl -e perl statement could'll=qw(hostA hostB);' -e '$L=scalar @l;' -e 'print $l[hex(<>)%$L];' "useshell"); } I actually think this a bit better than a purely random number that changes each time. This should give you a "random", but consistant value for each hostname. In your case, you just want a number 0-60, so the execresult command could be replaced with something like: /bin/echo ${hostname_hash} | /bin/cut -c -16 | perl -e 'print <>%61;'" Note that I've clipped only 16 characters, instead of the full 32 that come from md5sum, in order to avoid integer overflows in Perl. -- Jesse Becker NHGRI Linux support (Digicon Contractor) _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine