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.

Reply via email to