On Fri, Sep 16, 2011 at 09:04:31PM -0400, Gabriel Filion wrote:
> hello,
> 
> functions in puppet are always executed on the puppet master. So in your
> case, every node gets the same value since you're always basing your
> calculation on the puppet master's fqdn.

I certainly appreciate the tip, but I'm fairly sure that the fqdn used is the 
client's. Every time I kick a client host /tmp/t1 on the puppetmaster changes 
to the fqdn of that host. As well using my puppetmaster's fqdn as the seed in a 
separate ruby script gives me a series of random values that doesn't start with 
1,1. The "Using Facts and Variables" section of 
http://docs.puppetlabs.com/guides/custom_functions.html shows how to use 
lookupvar() to obtain client facts.
 
> You might want to look into transforming your function (master-side)
> into a fact (client-side)
> 
> 
> or, you could also use the builtin function fqdn_rand, which gives you a
> random number with the machine's fqdn as a seed for the pseudo-random
> number generator. It might save you some work:
> 
> http://docs.puppetlabs.com/references/2.6.8/function.html#fqdnrand

I might if I wanted simple random values, but I'm hoping to branch out 
eventually. Things like "random + 60" or "seed on the fqdn if it contains a 
certain string, otherwise seed on the hostname only".

> On 11-09-16 02:21 PM, Christopher Wood wrote:
> > This is using puppet 2.6.2 on Debian Squeeze.
> > 
> > I am attempting to use a custom function in a module to return random 
> > numbers with the hostname (translated to a number) as the random seed. 
> > These random numbers can be random values for hour/minute cron, to avoid 
> > the herd-of-elephants effect when they all run apt-get update daily.
> > 
> > While I'm not experienced with ruby, I've tested the function in a plain 
> > ruby script and it seems to work. My /tmp/t1 and /tmp/t2 files on the 
> > puppetmaster (see below) have the expected values in them. I have restarted 
> > puppetmaster after putting in the function.
> > 
> > How do I get the return value out of my function?
> > 
> > Am I missing anything else obvious?
> > 
> > I am reading from this guide:
> > 
> > http://docs.puppetlabs.com/guides/custom_functions.html
> > 
> > My cheap-as-heck custom function:
> > 
> > $ cat /etc/puppet/modules/yum_apt/lib/puppet/parser/functions/hsrand.rb
> > module Puppet::Parser::Functions
> > 
> >   newfunction(:hsrand, :type => :rvalue) do |args|
> > 
> >     values = Hash[
> >                   "a" => 1,
> >                   "b" => 2,
> >                   "c" => 3,
> >                   "d" => 4,
> >                   "e" => 5,
> >                   "f" => 6,
> >                   "g" => 7,
> >                   "h" => 8,
> >                   "i" => 9,
> >                   "j" => 10,
> >                   "k" => 11,
> >                   "l" => 12,
> >                   "m" => 13,
> >                   "n" => 14,
> >                   "o" => 15,
> >                   "p" => 16,
> >                   "q" => 17,
> >                   "r" => 18,
> >                   "s" => 19,
> >                   "t" => 20,
> >                   "u" => 21,
> >                   "v" => 22,
> >                   "w" => 23,
> >                   "x" => 24,
> >                   "y" => 25,
> >                   "z" => 26,
> >                   1 => 1,
> >                   2 => 2,
> >                   3 => 3,
> >                   4 => 4,
> >                   5 => 5,
> >                   6 => 6,
> >                   7 => 7,
> >                   8 => 8,
> >                   9 => 9,
> >                   "." => 1,
> >                   "_" => 2,
> >                   "-" => 3,
> >                  ]
> > 
> >     string = lookupvar('fqdn')
> > 
> >     File.open('/tmp/t1', 'w') {|f| f.write(string) }
> > 
> >     stringarray = string.split(//)
> > 
> >     File.open('/tmp/t2', 'w') {|f| f.write(stringarray[0]) }
> > 
> >     count = 0
> > 
> >     for i in (stringarray)
> >       if values[i]
> >         count = count + values[i]
> >       end
> >     end
> > 
> >     srand(count)
> > 
> >     rand = rand(args[0])
> > 
> >     return(rand)
> > 
> >   end
> > 
> > end
> > 
> > 
> > 
> > In the module's init.pp I attempt to use this in a cron type:
> > 
> >       $aptupdater = '/usr/bin/apt-get update'
> > 
> >       # some files and stuff in between
> > 
> >       cron { 'apt-get-update':
> >         command => $aptupdater,
> >         user => 'root',
> >         hour => hsrand(24),
> >         minute => hsrand(60),
> >         ensure => present,
> >       }
> > 
> > However, the cron job on every lab server ends up as:
> > 
> > # Puppet Name: apt-get-update
> > 1 1 * * * /usr/bin/apt-get update
> > 
> > 
> > I greatly appreciate any assistance. I'm stumped.
> > 
> 
> -- 
> Gabriel Filion
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to