(Felix - my apologies, i'm just going to start a new thread :)

As requested, a new thread to discuss the possibility of having a module 
masquerading feature. 

Have a look at PUP-2811 -- I'm going to try to keep that updated with the 
output of this discussion.

What I am after is something akin to the debian package "provides" 
property. When a Debian system needs an MTA, most packages shouldn't care 
what MTA is installed, just that "MTA" as a feature is installed. I can 
install any of exim, postfix, sendmail, qmail. The package name is still 
"exim" or "postfix" or whatever, but they all provide a "mta" package 
(which doesn't really exists, it's just so that it can be used as a 
dependency). So when logwatch needs to make sure a MTA is installed to send 
mails about the logs, it doesn't care which one, as long as *something* 
provides a mail feature. 

In the context of puppet modules, we could have competing modules offering 
similar features, and a module that needs that feature, but doesn't care 
which one is being used, as long as one *is*. 

The example I have is around this:
Sssd and nslcd are both systems to get user information out of ldap/active 
directory. They can't be installed together, and some other modules needs 
to make sure some sort of auth has been setup prior doing the changes...

One module for sssd:
class sssd as auth {
  # setup sssd
}

One module for nslcd:
class nslcd as auth {
  # setup nslcd
}

And one module that needs one of them:
class ssh_authz {
   require auth
   # setup some ssh authz that require one of the auth module to be applied
}

Then we have some nodes:

node nodeSSSD {
  # do the right thing here... even if this is coming from ENC in whatever 
order
  include sssd
  include ssh_authz
}

node nodeNSLCD {
  # still should be able to apply in the right sequence based on the 
require in ssh_authz
  include ssh_authz
  include nslcd
}

node broken-missing {
  # fails because nothing provides "auth" that's required...
  include ssh_authz
}

node broken-dups {
  # duplicate resources, as both sssd and nslcd show up as "auth"
  include sssd
  include ssh_authz
  include nslcd
}

I hope this could be useful especially around modules that potentially 
provide similar features. If i provide a module for installing a piece of 
software that requires a DB, we could simply say that we need some DB 
module (and maybe some default, if none exists for the "puppet module 
install". Maybe I have a "mysql" module that's pretty simple, and maybe 
there is another one with much more control, and just need one of them for 
that purpose...

hoping for a lively discussion around this...
Thanks,
Jok

-- 
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 puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/6eab86cf-b9b3-4ab8-8110-a2e016733fd0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to