----- "Luke Kanies" <[email protected]> wrote:

> On Oct 14, 2009, at 3:48 PM, R.I.Pienaar wrote:
> 
> >
> > hello,
> >
> > ----- "Luke Kanies" <[email protected]> wrote:
> >
> >> The solution Arri recommends is what I would also recommend -
> >> something akin to his extlookup function, or the datalookup  
> >> function I
> >>
> >
> > there are two domains of problem here.
> >
> > - Configuring the behavior of a module
> > - Extending the behavior of an existing module.
> >
> > For the first, use extlookup without question.
> >
> > The second is more complex, here's a use case.
> >
> > I found a openvpn module on the net - perhaps from the puppet common
>  
> > modules project - and its a good fit, its configurable using  
> > extlookup so i can adjust the outcome of the stuff it already knows 
> 
> > how to configure.
> >
> > Now I build 10 machines but I have new needs, I really need  
> > openvpn::config to do more, it needs to put new files down - perhaps
>  
> > the existing module doesn't support per client configs (called ccd 
> 
> > in openvpn).
> >
> > now there might be a relationship between openvpn::install, ::config
>  
> > and ::service and my new code really should *plug into* ::config.
> >
> > I really would want to put my new config files in openvpn::config  
> > without changing the relationships or the existing elegant and  
> > configurable structure.  Perhaps the openvpn::config class already 
> 
> > retrieves some variables from extlookup and most certainly when I  
> > extend it I want access to this info.
> >
> > Today what are my options for possible patterns to achieve this?   
> > There's none that ticks all the boxes:
> >
> > - I can make myopenvpn and include ::service, ::config, ::install  
> > and just add some extra stuff in there myopenvpn perhaps with a few 
> 
> > before => Class["openvpn::service"].  This doesnt give me access to 
> 
> > the extlookup data in the class I'd need to go look and do the same 
> 
> > lookups, etc.  It also does rather brutal things to the nice  
> > relationship models since other cases that require =>  
> > Class["openvpn::config"] wont have requires on my new extra stuff.
> >
> > there are more, but you can see the kind of reservations I have to 
> 
> > them.
> >
> > How does ruby aproach this problem?  Simple.
> >
> > class String
> >  def to_whatever
> >    # new code
> >  end
> > end
> >
> > Now all my strings have this new ability, sweet and this doesnt  
> > break anything, no other classes or strings needs to change,  
> > everything can just use this new "foo".to_whatever method.
> >
> > What if I could do the same with puppet, open up the class  
> > openvpn::config, put new "stuff" into it?
> >
> > class openvpn::config {
> >  file{"newfile":
> >     content => template("newfile.erb")
> >  }
> > }
> >
> > This template would have access to variables set in the super class 
> 
> > via extlookup I'd simply be extending it.
> >
> > How to trigger it on a node?
> >
> > node foo {
> >   load openvpn::extendedconfig
> >
> >   include openvpn::config
> >    .
> >    .
> > }
> >
> > now, openvpn::config would have both the content from common modules
>  
> > and my newfile.
> >
> > Obviously perhaps my suggested syntax is cludgy, I'm more concerned 
> 
> > about the concept right now than the how.
> >
> > I think this captures more what the initial poster had in mind.
> 
> One of the many undocumented "features" in Puppet:
> 
> class foo {
>      notify { "foo": }
> }
> 
> class foo {
>      notify { "bar": }
> }
> 
> include foo
> 
> Works fine.  The only caveat is that if you evaluate 'foo' between the
>  
> reopening, the added code won't get evaluated.
> 
> Does this provide the behaviour you're asking for?  Obviously there  
> are still limitations - your code has to be loaded manually, can't be 
> in a module with the same name, etc.
> 


See http://pastie.org/655384

howly crap :)


-- 
R.I.Pienaar

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to