Ben Ford wrote:
> > I want to resolve a hostname via a custom fact:
> > require "resolv"
> > Facter.add("puppet_master_ip") do
> > setcode do
> > Resolv::DNS.open(:nameserver => ['8.8.8.8']) do |dns|
> > ip = dns.getaddresses("www.puppet.org")
> > end
> > end
> > end
> > How do I get the output? I just want to get the first IP.
>
> Ruby has a habit that it picked up from its Perl ancestor of
> implicitly returning the last expression from a block or function.
> That's a neat shortcut, but that's also why you see so much Ruby code
> that just seems to stop and doesn't show returning of data. Because
> it's the last expression evaluated, your fact is simply returning an
> array of Resolv objects, which Facter doesn't know what to do with.
>
> To make your code work, you just need to do two things:
>
> require "resolv"
> Facter.add("puppet_master_ip") do
> setcode do
>
> * ip = nil # Declare your variable outside the block to
> keep its scope available* Resolv::DNS.open(:nameserver =>
> ['8.8.8.8']) do |dns| ip = dns.getaddresses("www.puppet.org")
> end
>
> * ip.first.to_s # implicitly return the string value of the
> first item* end
> end
>
> You should also put your fact in a module and let Puppet pluginsync it
> automatically. You'll need to run facter with the -p flag.
>
https://puppet.com/docs/puppet/latest/plugins_in_modules.html#adding-plug-ins-to-a-module
>
> Cheers!
Thanks a lot and happy holidays!
helmut@h2786452:~$ facter puppet_master_ip
52.24.136.51
helmut@h2786452:~$
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/xn0lj2uk09pf8j7001%40news.gmane.org.
For more options, visit https://groups.google.com/d/optout.