In puppet 3.2+ you can enable the future parser (--parser=future) which allows iteration like that directly in the puppet language.
On 26 August 2013 03:58, Stefan Schmid <[email protected]> wrote: > > Hi Mike > > Yes, create_resources seems to be just right. > Thanks for the hint. > > - Stefan > > Am Sonntag, 25. August 2013 22:03:47 UTC+2 schrieb Mike Delaney: >> >> Hi Stefan, >> >> I believe for the general case, the best practice is to encapsulate the >> logic that can't >> be expressed directly in the PuppetDSL in custom functions called from >> the DSL. >> Some of the features in the new experimental parser like iteration are >> aimed at >> reducing the need to write trivial, one-off functions. >> >> In this particular case, you can easily re-write your RubyDSL class in >> the PuppetDSL >> using the standard create_resources() function: >> >> class hosts { >> create_resources('host', $::host_entries) >> } >> >> http://docs.puppetlabs.com/**references/3.2.latest/** >> function.html#createresources<http://docs.puppetlabs.com/references/3.2.latest/function.html#createresources> >> >> If you haven't already, I'd definitely recommend adding the stdlib >> module, as it >> includes a ton of useful functions. >> >> https://forge.puppetlabs.com/**puppetlabs/stdlib<https://forge.puppetlabs.com/puppetlabs/stdlib> >> >> -Mike >> >> On Sun, Aug 25, 2013 at 9:39 AM, Stefan Schmid <[email protected]> wrote: >> >>> Hi >>> >>> I am new to puppet and need to manage host entries in file /etc/hosts as >>> follows on node mail.example.com and db.example.com. I do not want to >>> manage the whole file /etc/hosts with puppet, only a few entries. >>> >>> puppet version 3.2.1 >>> >>> node mail.example.com, file /etc/hosts: >>> (..) >>> 172.16.89.96 ldapmaster.example.com ldapmaster ldap >>> 172.16.89.85 sms.example.com sms sms-gateway >>> (..) >>> >>> node db.example.com, file /etc/hosts: >>> (..) >>> 172.16.89.80 abc.example.com abc >>> 172.16.89.81 xyz.example.com xyz bigben >>> (..) >>> >>> In general, a node may have 0 to n host entries. The number of host >>> entries on a node A may differ from the number host entries on a node B. A >>> certain host entry ( IP-Address Full-Qualified-Hostname Short-Hostname) >>> may be in the file /etc/hosts on 0 to n nodes concurrently. >>> >>> To manage the above host entries on node mail.example.com and >>> db.example.com I used Ruby DSL as follows, then I learnt that Ruby DSL >>> is deprecated. What is the alternative to Ruby DSL ? Any hint >>> would be helpful. >>> >>> A puppet module using Ruby DSL: >>> >>> puppetmaster:/etc/puppet/**modules/hosts/manifests # cat init.rb >>> >>> hostclass :hosts do >>> >>> entries = scope.lookupvar("hosts_**entries") >>> >>> raise Puppet::ERROR, >>> "hosts_entries must be a Hash" unless entries.kind_of?(Hash) >>> >>> entries.each do |title, parameters| >>> >>> host( title, >>> :ensure => parameters["ensure"], >>> :target => parameters["target"], >>> :ip => parameters["ip"], >>> :host_aliases => parameters["host_aliases"]) >>> end >>> end >>> >>> puppetmaster:/etc/puppet/**modules/hosts/manifests # >>> >>> >>> Basic ENC script output for the Ruby DSL and node mail.example.com : >>> (..) >>> --- >>> parameters: >>> hosts_entries: >>> sms.example.com: >>> ensure: present >>> target: /etc/hosts >>> ip: 172.16.89.85 >>> host_aliases: >>> - sms >>> - sms-gateway >>> ldapmaster.example.com: >>> ensure: present >>> target: /etc/hosts >>> ip: 172.16.89.96 >>> host_aliases: >>> - ldapmaster >>> - ldap >>> classes: >>> - hosts >>> (..) >>> >>> >>> Basic ENC script output for the Ruby DSL and node db.example.com : >>> (..) >>> --- >>> parameters: >>> hosts_entries: >>> abc.example.com: >>> ensure: present >>> target: /etc/hosts >>> ip: 172.16.89.80 >>> host_aliases: abc >>> xyz.example.com: >>> ensure: present >>> target: /etc/hosts >>> ip: 172.16.89.81 >>> host_aliases: >>> - xyz >>> - bigben >>> classes: >>> - hosts >>> (..) >>> >>> >>> Thanks. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Puppet Users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to puppet-users...@**googlegroups.com. >>> To post to this group, send email to [email protected]. >>> >>> Visit this group at >>> http://groups.google.com/**group/puppet-users<http://groups.google.com/group/puppet-users> >>> . >>> For more options, visit >>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>> . >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/puppet-users. > For more options, visit https://groups.google.com/groups/opt_out. > -- Erik Dalén -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.
