I cannot reproduce your error, but your function does conflict with some internals I guess. I have some other modules failing when I use your function. If I simplify your function (https://gist.github.com/superseb/fdb443e86a8470a276a5) it works just fine. What other modules and/or custom functions are in your module path? Could you try using only the module with this custom function and see how that goes? Don't forget to restart the Puppetmaster if you are changing functions.
On 09 Oct 2014, at 22:10, Mark Rosedale <mrosed...@vivox.com> wrote: > Puppet 3.5.1 > ruby 1.8.7 > > Output is: > > Error: Could not retrieve catalog from remote server: Error 400 on SERVER: > undefined local variable or method `dns' for > #<Puppet::Parser::Scope:0x7f5055562988> at > /etc/puppet/modules/vivox/manifests/init.pp:69 on node xxx > Warning: Not using cache on failed catalog > Error: Could not retrieve catalog; skipping run > > On Monday, October 6, 2014 1:47:06 PM UTC-4, Sebastiaan van Steenis wrote: > What version are you running? And what is the output if you try to call the > function as you have it now? > > On 06 Oct 2014, at 19:07, José Luis Ledesma <joseluis...@gmail.com> wrote: > >> Credits go to Nan Liu: >> >> If you are developing facts, it's much easier to just drop into IRB and get >> everything working there rather than doing round trip debugging between >> puppet and facter: >> >> irb(main):001:0> require 'facter' >> >> => true >> >> irb(main):002:0> Facter.value("hostname") >> >> => "demo-1" >> >> irb(main):003:0> Facter.value("hostname").split('-') >> >> => ["demo", "1"] >> >> irb(main):006:0> Facter.add('network_geo') do >> >> irb(main):007:1* setcode do >> >> irb(main):008:2* hostname_array = Facter.value(:hostname).split('-') >> >> irb(main):009:2> >> >> irb(main):010:2* # debug info >> >> irb(main):011:2* puts "My network is #{hostname_array}" >> >> irb(main):012:2> hostname_array.first >> >> irb(main):013:2> end >> >> irb(main):014:1> end >> >> irb(main):015:0> Facter.value(:network_geo) >> >> My network is ["demo", "1"] >> >> => "demo" >> >> If you run your existing fact in irb, you'll see the output is nil instead: >> >> Facter.value(:network_geo) >> >> My network is ["demo", "1"] >> >> => nil >> >> Hth, >> >> El 06/10/2014 18:07, "Mark Rosedale" <mros...@vivox.com> escribió: >> Still haven't been able to hunt down the cause of this issue. Is there a way >> to test the code with the puppet wrapping on the cli? >> >> On Friday, October 3, 2014 3:41:57 PM UTC-4, Mark Rosedale wrote: >> Wil, >> >> Thanks for the reply. I will look up the module functions you reference. >> Though, part of this was writing the custom function as a learning >> exercise. >> >> So if I have a file with the following in it and run it through ruby it >> works. >> >> require 'resolv' >> Resolv::DNS.open do |dns| >> ress = dns.getresources "google.com", Resolv::DNS::Resource::IN::A >> if ress.any? >> puts dns.getaddress("google.com") >> end >> end >> >> To reference Mike's question. What I found was that 'if ress.any?' works and >> that is what allows me to protect against malformed host names or a failure >> to find an A record. >> >> So I've already chopped out the puppet stuff, and this code works. So I'm >> thinking that it must be something with the require statement, where it >> isn't finding the library I need. But I'm not sure what I can do from here. >> >> On Friday, October 3, 2014 2:00:27 AM UTC-4, Wil Cooley wrote: >> >> On Oct 2, 2014 10:23 AM, "Mark Rosedale" <mros...@vivox.com> wrote: >> > >> > I have the following custom function that I'm trying to write. >> > >> >> Sorry this isn't an answer to your question, but I recently published a >> module of functions wrapping the standard system get*by* functions (well, >> wrapping Ruby's interfaces to the standard system functions): >> https://forge.puppetlabs.com/wcooley/name_service_lookups >> >> This includes `gethostbyname` and `gethostbyaddr`; the main benefit over >> querying DNS directly is that it understands nsswitch, so /etc/hosts works >> and any other host database you might want to use. >> >> But assuming you want to implement this anyway an exercise in learning Ruby >> & Puppet extensions, you might start by removing all the Puppet stuff and >> just get the lookups working as a simple standalone Ruby script. >> >> Wil >> >> require 'resolv' >> > >> > module Puppet::Parser::Functions >> > newfunction(:getIpAddr, :type => :rvalue) do |arguments| >> > Resolv::DNS.open do |dns| >> > ress = dns.getresources(arguments[0], Resolv::DNS::Resource::IN::A) >> > if ress.any? >> > dns.getaddress(arguments[0]) >> > #break >> > else >> > raise(Puppet::ParseError, "No valid A Record found for host >> > #{aguments[0]}") >> > end >> > end >> > #return value >> > end >> > end >> > >> > I'm getting the following error when I run this function. >> > >> > Error: Could not retrieve catalog from remote server: Error 400 on SERVER: >> > undefined local variable or method `dns' for >> > #<Puppet::Parser::Scope:0x7f5054f07110> at >> > >> > >> > -- >> > 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 view this discussion on the web visit >> > https://groups.google.com/d/msgid/puppet-users/02de838d-6cb2-495a-883d-98fb15782df9%40googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> 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 view this discussion on the web visit >> https://groups.google.com/d/msgid/puppet-users/e2857e58-e52f-44ef-a30b-368fb6e4b9ae%40googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> >> -- >> 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 view this discussion on the web visit >> https://groups.google.com/d/msgid/puppet-users/CAF_B3dfyfjunB5UYZF2q577S-bL6QQPqCg2_TVL5p4ZekZf%3D9w%40mail.gmail.com. >> For more options, visit https://groups.google.com/d/optout. > -- 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/C2B7F2AE-CC89-4155-8165-3FD8304AB749%40superseb.nl. For more options, visit https://groups.google.com/d/optout.