On Tue, Nov 29, 2011 at 03:23:22PM +1100, Gonzalo Servat wrote: > We use a package called "Torque Scheduler" which is based on a > configuration file that defines nodes, the queues they handle, how many > slots, etc. The config file format is similar to: > > unlimited <node1> <node2> ... <nodeN> > > node <node1> <load> <slots> <queue1>:<priority> <queue2>:<priority> ... > <queueN:priority> > node <node2> <load> <slots> <queue1>:<priority> <queue2>:<priority> ... > <queueN:priority> > ... > node <nodeN> <load> <slots> <queue1>:<priority> <queue2>:<priority> ... > <queueN:priority> > > (a node may or may not be listed as "unlimited") > > We would normally store this file as-is in Puppet and push it out using > file {}, but I'd like to "Puppetize" it. Ideally, I'd like to be able to do > the following: > > node { "node1": > unlimited => true, > load => XX, > slots => XX, > queues => { > "queue1" => 80, > "queue2" => 20, > "queueN" => XX > } > } > > So basically to build the config file, I'd have to process all the nodes > and where unlimited is true, add to the "unlimited" line. > > I know what I want the config file to look like, but I'm not sure how to > achieve this in Puppet. Does this sound like a job for a custom Puppet > provider? I can't figure out how I would build the "unlimited" line over > time. > > Can anyone suggest a module that does something similar to this so I can > get some ideas flowing?
I did something similar by creating a template for a single line of a config file, then merging the individual lines. This is from puppet ~0.18.0 so the syntax might not be exactly right for current versions, but you should get the idea. define lbservice($virtual_ips, $real_ips, $ports = [80], $primary_server = lb1) { $service = $name file { "/etc/ha.d/ldirectord.cf.d/$service": content => template("ldirectord.cf.snippet.rb"), notify => Mergesnippets["/etc/ha.d/ldirectord.cf"], backup => false; } } define mergesnippets($mode = 644, $owner = root, $group = root, $refreshonly = true) { exec { "build_snippet_file-$name": command => "/bin/cat $name.d/* > $name", refreshonly => $refreshonly, } file { $name: mode => $mode, owner => $owner, group => $group } } node lb1,lb2 { lbservice { 1: virtual_ips => ["192.168.1.129"], real_ips => ["10.0.0.185", "10.0.0.186"], ports => [25, 80, 443]; 2: virtual_ips => ["192.168.1.130"], real_ips => ["10.0.0.188"], ports => [25, 80, 443]; } } The contents of ldirectord.cf.snippet.rb: virtual=<%= Integer(service)|0x1000 %><% real_ips.each do |real_server| %> real=<%= real_server %> gate<% end %> service=http request="ldirector.html" receive="Test Page" scheduler=rr checktype=negotiate Your torquenode resource type would pretty similar to the lbservice one. Hope that helps, Christian -- 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.