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.