On Mon, Oct 19, 2009 at 2:13 PM, Clint Savage <her...@gmail.com> wrote:
> On Mon, Oct 19, 2009 at 2:11 PM, Clint Savage <her...@gmail.com> wrote:
>> Below I have a parser function that I have created which was working,
>> but now is not working.  I have made quite a few changes to this code,
>> but can't seem to find the right combination to make it work again.
>>
>> After extensive conversations with Volcane, joe-mac and andrewcshafer
>> from #puppet, it was suggested that I put this on the list.  I don't
>> know what exactly is going on, but I can say that I think this is a
>> bug now.  However, I can't prove it beyond what I have here without
>> help.
>>
>> I'd like to put this out to the puppeteers here and see if I can get
>> some more help identifying why I get the error at the end of the
>> information below.
>>
>> Thanks in advance for all the help.
>>
>> Cheers,
>>
>> Clint
>>
>> -------------------------
>>
>> ## modules/core/plugins/puppet/parser/functions/get_ad_uids.rb
>>
>> require 'ldap'
>>
>> # this function queries our Active Directory server and pulls users
>> with a uid greater than 50000.
>> # Specifically used for guaranteeing homedirs exist for users in the list
>>
>> module Puppet::Parser::Functions
>>    newfunction(:get_ad_uids, :type => :rvalue) do |args|
>>
>>        host  =  'ad.xyz123.net'
>>        port  =  LDAP::LDAP_PORT
>>
>>        # cn=ldap,ou=System Accounts,ou=Resources,dc=ad,dc=xyz123,dc=net
>>        root = 'cn=ldap,ou=System 
>> Accounts,ou=Resources,dc=ad,dc=xyz123,dc=net'
>>        base = 'ou=Engineering,ou=xyz123,dc=ad,dc=xyz123,dc=net'
>>        password = 'password'
>>
>>        conn = LDAP::Conn.new(host, port)
>>        conn.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )
>>        conn.bind(root, password)
>>
>>        uidnum = args[0]
>>        ad_uids = Array.new
>>        ids = conn.search2(base, LDAP::LDAP_SCOPE_SUBTREE,
>> "(uidNumber>=#{uidnum})", "uid")
>>        uids = ad_uids.map { |i| i[0] }.flatten
>>
>>        uids
>>
>>  end
>> end
>>
>> -- output of above code --
>>
>> [r...@tuatara (puppetmaster) functions]# irb -r puppet -r get_ad_uids.rb
>> irb(main):001:0> Puppet::Parser::Functions::function(:get_ad_uids)
>> => "function_get_ad_uids"
>> irb(main):002:0> s = Puppet::Parser::Scope.new
>> => #<Puppet::Parser::Scope:0x2adf763d7220 @namespaces=[""],
>> @symtable={}, @defaults={}, @tags=[]>
>> irb(main):003:0> s.function_get_ad_uids('50000')
>> => ["user1", "user2", "user3", "user4"]
>>
>> ## manifests/templates.pp
>>
>> node common {
>>    include core
>> .. snip ..
>> }
>>
>> .. snip ..
>>
>> node puppetmaster inherits common {
>>    include puppet::server
>>    include homedir::creator
>>
>>    $uids = get_ad_uids('50000')  # should return an array of homedirs
>> to ensure are created
>>    print { $uids: }
>>    # make sure the home directories exist for all ad users above
>>    # the specified uid
>>
>>    ensure_homedirs { $uids: }
>>
>> .. snip ..
>> }
>>
>> ==> puppet-err.log <==
>> 2009-10-19T14:02:25-06:00 tuatara puppetmasterd[4479]:
>> Puppet::Parser::AST::Resource failed with error ArgumentError:
>> Resources require a type and title at
>> /var/lib/puppet/manifests/templates.pp:34 on node tuatara
>> 2009-10-19T14:02:25-06:00 tuatara puppetmasterd[4479]:
>> Puppet::Parser::AST::Resource failed with error ArgumentError:
>> Resources require a type and title at
>> /var/lib/puppet/manifests/templates.pp:34 on node tuatara
>> 2009-10-19T14:02:25-06:00 tuatara puppetd[4538]: Could not retrieve
>> catalog: Puppet::Parser::AST::Resource failed with error
>> ArgumentError: Resources require a type and title at
>> /var/lib/puppet/manifests/templates.pp:34 on node tuatara
>>
>
> I should mention that line 34 is the print command above.  However, if
> I remove that, it errors at the 'ensure_homedirs function.
>
> Clint
>

Following up the previous two messages.  Thanks to everyone who helped
me.  Here's the resolution (I've removed convos that aren't relevant
to this discussion)

15:46 < herlo> okay, so I know I just posted this on the puppet
mailing list, but I was thinking a bit more about it and had a
question.
15:47 < herlo> http://snipurl.com/slqcz
15:47 < herlo> my question is about how plugins return values to puppet.
15:48 < herlo> because it seems that while my function returns values,
somehow puppet is not getting the values back.
15:48 < herlo> Thoughts?
15:49 < Volcane> herlo: do you have :type => :rvalue ?
15:50 < jrojas_> Volcane: yes
15:50 < jrojas_> newfunction(:get_ad_uids, :type => :rvalue) do |args|
15:50 < jrojas_> sorry i was looking at it when you asked :P
15:50 < Volcane> :)
15:50 < herlo> Volcane: right at the top of that function, or should be
15:51 < herlo> Volcane: it's in the snipurl
15:51 < herlo> I agree it *should* return, but it is not returnning anything
16:02 < herlo> jrojas_: Volcane: any other thoughts?
16:03 < Volcane> herlo: if you rip out all the code and just return an
array of known values, does it work?
16:03 < herlo> dunno.  I do know that from the other direction if I
put $uids = ["user1", "user2"] it works
16:04 < herlo> I'll try that now Volcane thanx
16:06 < herlo> Volcane: hrm, that seemed to work...
16:06 < herlo> but that is really odd...
16:08 < Volcane> add to your function something like: http://pastie.org/661238
16:09 < Volcane> will write a yaml dump of what you're returning
16:09 < Volcane> add it just before returning to puppet
16:09 < Volcane> then u can see what you're returning
16:09 < herlo> kk
16:09 < herlo> this is leading me down a much better path
16:15 < herlo> Volcane: I get a list of users in the YAML file
16:15 < Volcane> show it
16:16 < herlo> but one is missing, wonder if that matters...
16:16 < herlo> k, hang on...
16:16 < herlo> Volcane: http://fpaste.org/EnvS/
16:17 < Volcane> looks just fine
16:17 < herlo> yeah, I knw
16:17 < herlo> so here's a question, one line is blank.  Think that
could cause problems?
16:17 < herlo> http://fpaste.org/ijUE/
16:18 < herlo> Volcane: ^^
16:18 < Volcane> could be
16:18 < herlo> how would you remove blanks from an array?
16:18 < Volcane> yeah i think so
16:18 < Volcane> well i guess its a nil in there?
16:18 < herlo> dunno
16:19 < herlo> it could be just  ''
16:19 < herlo> I see compact and delete_if
16:19 < herlo> I'll dig around on that...
16:19 < herlo> thanks for the help again
16:19 < jrojas_> i[0] unless i[0].is_nil? or whatever
16:19 < herlo> jrojas_: k, I'll check that out too
16:21 < herlo> if nothing else, I am learning alot about the insides of puppet
16:21 < jrojas_> and some ruby as well
16:21 < herlo> w000!!!!!!!!!! it works!!!
16:22 < herlo> uids = ad_uids.compact.flatten <-- that did it
16:22 < herlo> stupid nil
16:22 < jrojas_> heheh
16:22 < Volcane> herlo: :)
16:23 < herlo> I know now that it was the guys who manage the AD
servers that broke it and I am going to yell their heads off
16:23 < herlo> thanks you guys....
16:23  * herlo will update his post...
16:23 < Volcane> herlo: u can also do stuff like array.select{|el| el > 10}
16:23 < Volcane> and that'll make an array of all elements > 10
16:24 < herlo> right, I was looking at the array syntax too.  I still
might need to do one for '' and nil
16:24 < kjetilho> herlo: you want flatten.compact, I think
16:24 < kjetilho> herlo: [[nil],1,2].compact.flatten => [nil, 1, 2]
16:25 < herlo> kjetilho: yeah, but you example is wrong
16:25 < herlo> well, maybe not
16:26 < herlo> I see what you are saying
16:26 < herlo> I'll switch that
16:26 < kjetilho> I use the [userparam].flatten.each idiom a lot,
since it allows the user to pass a single value or an array
16:26 < herlo> I will check that and make sure ...
16:26 < herlo> thanks

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to