<<Don’t forget to restart the Puppetmaster if you are changing functions >>

This turned out to be the issue.  I don't typically restart the puppet 
master when I'm doing other fast fire development so it slipped my mind, 
but in this case it is absolutely required. I did some testing, and if you 
change code, even remove all the code, but don't restart the puppetmaster 
it will continue to spit out the same error as if nothing has changed. But 
yes the function works as written above. So thanks for that...figures it 
would be something so simple. 

<<but your function does conflict with some internals I guess. I have some 
other modules failing when I use your function.>>

Interesting. Do you have any idea why? At the moment I'm just happy to know 
that it works. I looked at your version and it is simpler, which I like, 
but I would be curious how this could be causing issues elsewhere. 

Thanks for the help. 

On Friday, October 10, 2014 2:10:52 AM UTC-4, Sebastiaan van Steenis 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 <mros...@vivox.com <javascript:>> 
> 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
>>>  
>>> <https://groups.google.com/d/msgid/puppet-users/e2857e58-e52f-44ef-a30b-368fb6e4b9ae%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> 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
>>  
>> <https://groups.google.com/d/msgid/puppet-users/CAF_B3dfyfjunB5UYZF2q577S-bL6QQPqCg2_TVL5p4ZekZf%3D9w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> 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/4a07fc16-57c5-4759-bd15-df2fb5e401a7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to