Method across providers for the same type

64 views
Skip to first unread message

ZJE

unread,
Jul 17, 2012, 11:34:11 AM7/17/12
to puppet...@googlegroups.com
I'd like to reuse the same ruby code in a type across all the providers. For the type I'm writing, a certain portion of the "exists?" method would be repeated across all providers. From looking at the documentation, http://docs.puppetlabs.com/guides/custom_types.html, it's not quite clear how I can accomplish this.  I've looked at writing a function, but that seems to be for a larger scope than I'd like (only the providers in that module would need this code) and requires a restart of the puppet master.

Thanks!

Nan Liu

unread,
Jul 17, 2012, 12:49:37 PM7/17/12
to puppet...@googlegroups.com
Look at puppetlabs registry provider[1] for an example where
modules/registry is shared between registry_key and registry_value.

Nan

1. https://github.com/puppetlabs/puppetlabs-registry/tree/master/lib/puppet

Jeff McCune

unread,
Jul 17, 2012, 1:29:52 PM7/17/12
to Nan Liu, puppet...@googlegroups.com
On Tue, Jul 17, 2012 at 9:49 AM, Nan Liu <n...@puppetlabs.com> wrote:
On Tue, Jul 17, 2012 at 8:34 AM, ZJE <count...@gmail.com> wrote:
> I'd like to reuse the same ruby code in a type across all the providers. For
> the type I'm writing, a certain portion of the "exists?" method would be
> repeated across all providers. From looking at the documentation,
> http://docs.puppetlabs.com/guides/custom_types.html, it's not quite clear
> how I can accomplish this.  I've looked at writing a function, but that
> seems to be for a larger scope than I'd like (only the providers in that
> module would need this code) and requires a restart of the puppet master.

Look at puppetlabs registry provider[1] for an example where
modules/registry is shared between registry_key and registry_value.

We've actually got this wrong in the registry module currently.  Shared utility code should not go into the Puppet namespace at all.

The convention we've "standardized" [1] on is:

"Start with PuppetX, put the CamelCase of your author name (from the Modulefile), then put the actual CamelCase of your module name"

So the registry module should be PuppetX::PuppetLabs::Registry living in '<modulepath>/registry/lib/puppet_x/puppet_labs/registry.rb'

Puppet::Modules::Registry is a bad example and should not be followed.


-Jeff

ZJE

unread,
Jul 17, 2012, 3:02:10 PM7/17/12
to puppet...@googlegroups.com, Nan Liu

On Tuesday, July 17, 2012 12:29:52 PM UTC-5, Jeff McCune wrote:
On Tue, Jul 17, 2012 at 9:49 AM, Nan Liu <> wrote:

Thanks Nan and Jeff for the replies! I'm new to both puppet and ruby, so let me sketch out what I'm thinking I should do based on the replies.

Let's say I'm creating a type FOO in module MODULE. I should then create a file in $confdir/modules/MODULE/lib/puppet/shared.rb
Inside this shared.rb, I would then implement my shared methods in the PuppetX::ZJE::FOO module

For some additional info, I'm using puppet 3.0.0rc3
Thanks again for all the help!

ZJE

unread,
Jul 17, 2012, 3:29:55 PM7/17/12
to puppet...@googlegroups.com, Nan Liu

Sorry, don't know how I missed the path in your earlier code - so it should be:
<modulepath>/MODULE/lib/puppet_x/ZJE/shared.rb?

Thanks!
 

ZJE

unread,
Jul 24, 2012, 12:54:02 PM7/24/12
to puppet...@googlegroups.com, Nan Liu

I'm still a little confused - is there an example of a type/provider where this is done correctly?
Thanks!

Jeff McCune

unread,
Jul 25, 2012, 10:57:20 AM7/25/12
to puppet...@googlegroups.com
On Tue, Jul 24, 2012 at 9:54 AM, ZJE <count...@gmail.com> wrote:
I'm still a little confused - is there an example of a type/provider where this is done correctly?
Thanks!

Not that I know of.  You could be the first!  =)

What's confusing you?

As a basic example, here is the initial change set that migrates the registry module to the convention we recommend of PuppetX::Puppetlabs::Registry


As you can see, we also have to work around the $LOAD_PATH issue in #14073.  This won't be the case in Puppet 3.x as we'll have made modules work when distributed as Rubygems in #7788.

-Jeff

ZJE

unread,
Jul 25, 2012, 3:01:32 PM7/25/12
to puppet...@googlegroups.com
On Wednesday, July 25, 2012 9:57:20 AM UTC-5, Jeff McCune wrote:

I was trying to figure out the right way to work around the $LOAD_PATH issues, the example helps. I was also wondering if in PuppetX, the "X" was supposed to be the version number, but it doesn't look like it. I've got it working now, many thanks :-)
Reply all
Reply to author
Forward
0 new messages