On Monday, December 2, 2019 at 1:56:32 PM UTC-6, Abhijeet Rastogi wrote:
>
> Hi Ramin,
>
> Thanks for the details and the link. That was indeed the cause of this 
> issue. 
>
> I wonder what official puppet guidelines are for managing this sort of 
> inter-module dependencies. I couldn't find a guideline on official docs. 
> https://puppet.com/docs/puppet/latest/lang_relationships.html
>
>
Module compatibility and inter-module dependencies have always been tricky 
issues with Puppet.  I am unaware of any guidelines on the topic from 
Puppet, Inc., and I'm not too surprised about that because there are a lot 
of situation-dependent details. To a large extent, however, the onus is on 
module authors to make their modules play well with others.  If you have to 
work with modules that present interoperability problems then you pretty 
much have to figure it out on a case-by-case basis.

As far as writing your own modules to be maximally interoperable, there's a 
bit of art and a bit of science.  You'll find suggestions and discussions 
of that topic in the archives of this group, among other places.  Here are 
some off-the-cuff suggestions:

   - Provide a very small number of module interfaces.  Oftentimes, just 
   one is ideal.  An "interface" in this sense is a front-end class or a 
   defined type that is intended to be declared by code outside the module.
   - Such public classes should exercise proper containment of any private 
   module classes they declare.
   - All module classes should express appropriate ordering of external 
   classes they declare, which typically is one or more "require" or "before" 
   relationships instead of full containment.  Do not over constrain ordering, 
   however, as that can be as bad as or even worse than under-constraining it.
   - Modules should maintain a tight focus, so as to minimize the risk that 
   two modules serving different purposes attempt to manage the same resource.
   - Where there is a potential or actual resource-management collision, 
   the best solution is usually to factor the affected resource out into its 
   own module, but it is sometimes more practical to use class parameters to 
   control which module has responsibility for managing the resource.
   - Overall, module designers and implementers must bear ordering 
   requirements in mind as they work, not only as they affect the module 
   itself, but also as they relate to the module's interactions with others.
   - Write good documentation.  What does the module manage?  What are its 
   public interfaces? What do its class parameters signify, what are their 
   allowed values, what are their defaults (if any)? What other modules does 
   it use, and how?


John

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/1a14a612-226a-4569-be47-8e5180d607fe%40googlegroups.com.

Reply via email to