Many thanks to you John and Nan. Using the hiera_hash function provides the desired behavior and it effectively replaced the need for resource capitalization for my use case.
One last thing Im puzzled with if I may: A more complex use case where a parameter has to be set based on 2 criterias together on the same hiera level, lets say 'os' and 'role' (like a sysctl for an app server under rhel4 vs rhel5 ), how would you solve this ? --- :hierarchy: - %{fqdn} - %{environnement} - %{datacenter} - %{os} - %{role} - common best regards, Jeff On Saturday, April 7, 2012 10:18:55 AM UTC-4, Jeff wrote: > > Hi puppeteers, > > I’m starting from scratch with Puppet 2.7 and I’m trying to avoid some > pitfalls from the past using another configuration management tool. I > think most of the issues I had could be solved by Puppet and Hiera but > being new to the tool and the approach, Im seeking for advice. > > I have a common use case with the configuration of sysctl settings I > believe will help me understand if Hiera is the right tool or approach to > the problem. Now the requirements are : > > 1) All nodes get a set of default settings > > 2) Based on facts such as function/application, settings are added > incrementally > > 3) A default setting might be overridden for a specific use. > > > > The ‘old’ way I used to solve this was through templating and lots if/else > statements… but that’s exactly what Im trying to avoid as the knowledge > about the infrastructure gets spread everywhere. > > When I found about the Puppet and Augeas combination I thought that was > the solution. I also wanted an ENC and using hiera sound great also. > > So here’s the hiera config : > > --- > > :hierarchy: > > - %{fqdn} > > - %{os} > > - %{role} > > - %{datacenter} > > - common > > :backends: > > - yaml > > :yaml: > > :datadir: '/etc/puppet/hieradata' > > > > The common sysctl are in common.yaml: > > classes: > > - sysctl > > sysctl_settings: > > net.ipv4.ip_forward: > > value: 0 > > kernel.randomize_va_space: > > value: 1 > > net.ipv4.conf.all.send_redirects: > > value: 0 > > > > The more specific and possibly overriding parameters are in role-ap.yaml: > > classes: > > - sysctl > > > > sysctl_settings: > > vm.swapiness: > > value: 0 > > net.ipv4.ip_forward: > > value: 1 > > > The sysctl wrapper module : > > > class sysctl { > > create_resources( sysctl::config, hiera('sysctl_settings') ) > > } > > define sysctl::config ($value) { > > augeas { "sysctl_${name}": > > context => "/files/etc/sysctl.conf", > > lens => "sysctl.lns", > > incl => "/etc/sysctl.conf", > > changes => [ "set ${name} ${value}" ], > > } > > } > > Now the issue is that only the settings found in role-ap.yaml are > applied. It looks like hiera stops at the first array matching in the > hierarchy. Did I got this all wrong? > > The other issue with this approach is I can’t define a ‘’sysctl_${name}’ > resource twice so overriding a parameter doesn’t work either. How can I > get the same result as with capitalization of a File resource for example? > > Thanks to all, > -- 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/-/zBMOv05wLjMJ. 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.