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.