My pleasure. If you like, you can checkout easy 
type<https://github.com/hajee/easy_type>. 
Easy type is an add-on library that aims to take the intricacies for 
writing custom types away. It might help you.

Regards,

Bert

Op woensdag 12 februari 2014 19:18:02 UTC+1 schreef Leonard Smith:
>
> Bert,
>
> Thank you for the response. I ended up having a class level method that 
> creates the connection, where I pass the server name, password, etc. And 
> then another class level method to access the ldap connection, which the 
> instance level methods call. So in pre-fetch I create the connection, and I 
> can directly access the ldap connection in self.instances. But create and 
> destroy makes a call to the 'accessor' method. 
>
> Thanks
> Len
>
>
>    
>
> On Wednesday, February 12, 2014 9:29:07 AM UTC-5, bert hajee wrote:
>>
>> Len,
>>
>> You can call a class method from an instance just like any other method 
>> with a parameter. So if you might want to consider calling it with the ldap 
>> server as a parameter.
>>
>> def self.ldap_connection(ldap_host)
>>     Puppet.debug("Creating new LDAP connection")
>>     unless @ldap_connection
>>       @ldap_conection = Net::LDAP.new(
>>         :host => ldap_host,
>>         .......
>>      @ldap_connection
>>    end
>>
>> and call it from an instance method:
>>
>>  def create   ## Instance level method
>>     self.class.ldap_connection(my_ldapserver).add(:dn => mydn, 
>> :attributes => myattr)
>>   end
>>
>> Hope this helps.
>>
>> Bert
>> Op woensdag 12 februari 2014 04:04:14 UTC+1 schreef Leonard Smith:
>>>
>>> To all,
>>>
>>> My ruby is failing me as I try to create a custom provider. I have a 
>>> custom provider I am writing that uses the net-ldap gem that will, based on 
>>> the custom type create, destroy and modify LDAP entries. What I am 
>>> struggling with is the difference between the class level methods: 
>>> self.instance and self.prefetch and instance level methods: create, 
>>> destroy, etc.
>>>
>>> As things currently stand I have in my custom provider code
>>>
>>>   def self.ldap_connection  ## Class level method
>>>     Puppet.debug("Creating new LDAP connection")
>>>     unless @ldap_connection
>>>       @ldap_conection = Net::LDAP.new(
>>>         :host => '127.0.01',
>>>         .......
>>>      @ldap_connection
>>>    end
>>>
>>>    def self.prefetch           ## Class level method
>>>       ldap_connection.search(:base => Services_Base, :filter => 
>>> searchFilter ) do |entry|
>>>        .... <code to parse output>
>>>        results << new ( .... )
>>>        results
>>>    end
>>>
>>>   def create   ## Instance level method
>>>     self.class.ldap_connection.add(:dn => mydn, :attributes => myattr)
>>>   end
>>>
>>>
>>> The above all works fine, I can create and destory LDAP entries and 
>>> modify attributes based on my custom type without a problem. But if you 
>>> look at the self.ldap_connection I hard-coded the host. What I want to do, 
>>> is create a parameter in the type, called ldapserver, which I then can use 
>>> in self.ldap_connect. 
>>>
>>> I tried 
>>>
>>> @ldap_conection = Net::LDAP.new(
>>>         :host => @resource[:ldapserver],
>>>
>>> But when I debug @resource[:ldapserver] it is nil so I'm obviously not 
>>> access it correctly. I also tried @@resource[:ldapserver] thinking resource 
>>> is a class level variable, but still no luck. 
>>>
>>> I've also tried to make def ldap_connection, so it is an instance level 
>>> method,but the I run into issues in self.instances where I need to open a 
>>> LDAP connection to prefetch, and the method is instance level, so not 
>>> available at the class level, self.instances.
>>>
>>> Thanks
>>> Len
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" 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-dev/68a1a2cb-89e4-46dc-909a-fd9aa89f8c42%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to