I'm using stdlib to help with this $listeners = hiera('haproxy_listeners', 
undef)$listener_keys = keys($listeners) then pass $listener_keys to a define to 
create all the instances
The entre hash is in memory ($listeners) and the define will have the key it is 
working on ($name)So you can access anything in the data structure to build 
your resources.
Steven
 Date: Fri, 4 Jan 2013 09:05:15 -0800
From: andytaylo...@gmail.com
To: puppet-users@googlegroups.com
Subject: [Puppet Users] Re: Hiera hashes and arrays in ERB templates

Thanks for your suggestions guys. I did consider using create_resource, but 
don't see how I can when I'm trying to apply this Hiera data to a single file. 
To expand on my initial post, what I need to do is create multiple config 
blocks within one file resource. So this Hiera data:
haproxy_listeners : "cluster1" :  ip : '192.168.0.2'  port : '80'  servers :    
"server1" :    ip : '192.168.0.3'    port : '8080'   "server2" :    ip : 
'192.168.0.4'    port : '8080' "cluster2" :  ip : '192.168.0.5'  port : '80'  
servers :   "server3"     ip : '192.168.0.6'     port : '8080'   "server4"     
ip : '192.168.0.7'     port : '8080'
will result in this being generated in the haproxy config file:
listen cluster1 192.168.0.2:80       server server1 192.168.0.3:8080       
server server2 192.168.0.4:8080
listen cluster2 192.168.0.5:80       server server3 192.168.0.6:8080       
server server4 192.168.0.7:8080
So I don't see how create_resources can handle this, as that's for creating 
multiple Puppet resources, as opposed to multiple blocks within a single file. 
The only alternative I can think of at the moment is using create_resources 
with a define which utilizes Augeas, but I don't know how well that will work.
Thanks,
Andy
On Friday, 4 January 2013 16:47:13 UTC, Gavin Williams  wrote:I'm with Andy on 
this one... I'm doing something very similar with my NetApp volume provider 
(https://github.com/fatmcgav/fatmcgav-netapp/). 

I've created a define with the following contents:
define util::netapp::volume (
        $ensure = present,
        $size,
        $aggr = 'aggr1',
        $snapresv = 0,
        $autoincrement = true,
        $snapschedule = {"minutes" => 0, "hours" => 0, "days" => 0, "weeks" => 
0}
        ) {

        netapp_notify {"volume_define_${name}":
                message => "Processing Volume ${name}",
        }
        ->
        netapp_volume { "v_${name}":
                ensure => $ensure,
                initsize => $size,
                aggregate => $aggr,
                spaceres => "none",
                snapreserve => $snapresv,
                autoincrement => $autoincrement,
                options => {'convert_ucode' => 'on', 'no_atime_update' => 'on', 
'try_first' => 'volume_grow'},
                snapschedule => $snapschedule
        }
        ->
        netapp_qtree { "q_${name}":
                ensure => $ensure,
                volume => "v_${name}"
        }
        ->
        netapp_export { "/vol/v_${name}/q_${name}":
                ensure => $ensure,
                persistent => true
        }

}

I've added a default hash to 'snapschedule' in the options list, but that can 
be over-ridden from the Hiera data. 

Then use the following to pull the data from hiera and call the define:
create_resources( util::netapp::volume, hiera('volumes') )

'Volumes' in hiera yaml looks like:
volumes:
 vol1:
  ensure: present
  size: '500m'
 vol2:
  ensure: present
  size: '20g'
  snapschedule:
   minutes: 0
   hours: 36
   days: 0
   weeks: 0

You can also use the 'hiera' command to test your yaml structure:
$ hiera -c hiera.yaml volumes clientcert=act-star-nactl01
{"vol1"=>{"ensure"=>"present", "size"=>"500m"}, "vol2"=>{"ensure"=>"present", 
"size"=>"20g", "snapschedule"=>{"days"=>0, "weeks"=>0, "hours"=>36, 
"minutes"=>0}}}

As you can see from the above output, snapschedule for vol2 is a nested hash. 
This assumes that your resource provider can support hashes on the relevant 
param/property ;)

HTH

Gav

On Friday, 4 January 2013 15:37:25 UTC, llowder  wrote:

On Friday, January 4, 2013 9:11:28 AM UTC-6, Andy Taylor wrote:Hi,
I'm trying to build a module for haproxy which fetches all the configuration 
data from Hiera to populate the haproxy config file. I've run into a number of 
issues though when I try to use hashes. Ideally, I want to use something like 
this:
haproxy_listeners : "cluster1" :  ip : '192.168.0.2'  port : '80'  servers :    
"server1" :    ip : '192.168.0.3'    port : '8080'
So a hash of clusters with each cluster containing a nested hash of servers. Is 
this possible with Hiera/ERB? It's easy enough to iterate over the first hash, 
but I can't work out how to extract the contents of the nested hash. Or I might 
just be approaching this in entirely the wrong way... Any help would be much 
appreciated.

I haven't used the function myself, but this looks like it would be a good case 
for a define + create_resources(), which I think is part of stdlib. You might 
need to restructure the hashes slightly, but I think that will be the best 
approach.
 Thanks,
Andy



-- 

You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.

To view this discussion on the web visit 
https://groups.google.com/d/msg/puppet-users/-/W3UBJBXuT24J.
 
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.
                                          

-- 
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