Second thought, could you show the init.pp file in vivox/manifests ? Or just the relevant parts around line 69?
On 10 Oct 2014, at 08:10, Sebastiaan van Steenis <[email protected]> wrote: > 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 <[email protected]> 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 <[email protected]> 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" <[email protected]> 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" <[email protected]> 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 [email protected]. >>> > 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 [email protected]. >>> 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 [email protected]. >>> 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 [email protected]. > 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. -- 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/C890A991-EA76-4146-8C84-0ABAE4E9D2AF%40superseb.nl. For more options, visit https://groups.google.com/d/optout.
