Alex L. Demidov
2011-Aug-14 17:18 UTC
[Puppet Users] using host resource with hiera data source
I''m trying to implement /etc/hosts handling using hiera as data source, but my current implementation requires data duplication because I could pass only array of strings as $name to host resource. Is there any way to avoid such data duplication? Or maybe it is possible to use templates but keep ability to have local modifications to /etc/hosts file? class hosts ($hosts = hiera("hosts"), $hostsdefs hiera("hostsdefs")) { define hostentry( ) { host{ $name: ip => $hostsdefs[$name][ipaddress], host_aliases => $hostsdefs[$name][host_aliases] } } hostentry{ $hosts: } } common.yaml ---- hosts: - host1.example.com - host2.example.com hostsdefs: host1.example.com: ipaddress: 10.0.0.1 host_aliases: host1 host2.example.com: ipaddress: 10.0.0.2 host_aliases: host2 -- 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+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Nan Liu
2011-Aug-15 17:47 UTC
Re: [Puppet Users] using host resource with hiera data source
On Sun, Aug 14, 2011 at 10:18 AM, Alex L. Demidov <alexeydemidov@gmail.com> wrote:> I''m trying to implement /etc/hosts handling using hiera as data > source, but my current implementation requires data duplication > because I could pass only array of strings as $name to host resource. > Is there any way to avoid such data duplication? Or maybe it is > possible to use templates but keep ability to have local modifications > to /etc/hosts file? > > class hosts ($hosts = hiera("hosts"), $hostsdefs > hiera("hostsdefs")) { > > define hostentry( ) { > host{ $name: ip => $hostsdefs[$name][ipaddress], > host_aliases => $hostsdefs[$name][host_aliases] } > } > > hostentry{ $hosts: } > } > > common.yaml > ---- > hosts: > - host1.example.com > - host2.example.com > hostsdefs: > host1.example.com: > ipaddress: 10.0.0.1 > host_aliases: host1 > host2.example.com: > ipaddress: 10.0.0.2 > host_aliases: host2 >Write a puppet function that returns hash key as an array and you can avoid this data duplication. Thanks, Nan -- 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+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Alex L. Demidov
2011-Aug-16 08:05 UTC
Re: [Puppet Users] using host resource with hiera data source
On Mon, Aug 15, 2011 at 10:47:05AM -0700, Nan Liu wrote:> On Sun, Aug 14, 2011 at 10:18 AM, Alex L. Demidov > <alexeydemidov@gmail.com> wrote: > > I''m trying to implement /etc/hosts handling using hiera as data > > source, but my current implementation requires data duplication > > because I could pass only array of strings as $name to host resource. > > Is there any way to avoid such data duplication? Or maybe it is > > possible to use templates but keep ability to have local modifications > > to /etc/hosts file? > > > > class hosts ($hosts = hiera("hosts"), $hostsdefs > > hiera("hostsdefs")) { > > > > define hostentry( ) { > > host{ $name: ip => $hostsdefs[$name][ipaddress], > > host_aliases => $hostsdefs[$name][host_aliases] } > > } > > > > hostentry{ $hosts: } > > } > > > > common.yaml > > ---- > > hosts: > > - host1.example.com > > - host2.example.com > > hostsdefs: > > host1.example.com: > > ipaddress: 10.0.0.1 > > host_aliases: host1 > > host2.example.com: > > ipaddress: 10.0.0.2 > > host_aliases: host2 > > > > Write a puppet function that returns hash key as an array and you can > avoid this data duplication.Thanks for suggestion. While looking for documentation about how to create custom function I''ve spotted that there is already exists `create_resources` function and using this function I was able to replace my code above with following: class hosts ($hosts = hiera_hash("hosts")) { create_resources( ''host'', $hosts ) } # using hiera_hash allows merging data from different yaml files but # requires hiera 0.2.1 common.yaml ---- hosts: host1.example.com: ip: 10.0.0.1 host_aliases: host1 host2.example.com: ip: 10.0.0.2 host_aliases: host2 There is only one drawback with this solution - it is impossible to have multiple lines in /etc/hosts with same hostname like this: 127.0.0.1 localhost ::1 localhost -- Alex L. Demidov (ALD9-RIPE). http://alexeydemidov.com/ Freelance Consulting. -- 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+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.