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/62e0c93b-3393-45ee-b76f-d11840325518%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.