Skip to content
A collection of different sample Puppet modules layouts.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
minimal42 @ f96a387
package42 @ 55687ae
standard @ 5d50b19
standard42 @ 30725f2

Deprecation notice

This repo is no longer maintained.

Check example42 control-repo for an updated Puppet 4 module skeleton.

Puppet Modules Templates Experiments

This repository contains various experiments on Puppet modules design.

Alternative solutions are researched and published to provide basic sample modules that can be used as blueprint for the (quick) generation of new basic modules of different nature, upon which the relevant customizations can be done.

A set of common parameters (and possibly community standard) greatly enhances modules usability and interoperability. Some of the modules here (the ones named stdmod) implement an early proposal for a Standard Module Interface: a set of common and standard parameters that provide standard and predictable functionalities.

I personally think that something like this would be of great benefit for the Puppet Modules ecosystem.

All these modules feature some common principles:

  • True reusability: you can completely manage the behaviour of the module via the parameters it exposes.

  • Easy Multi OS support implementation: all internal references to paths and names are concentrated into a single params class.

  • Configuration freedom: you can provide configuration files, parameters and whole dirs in the way you want.

  • Behaviour management: you can define how the module's resources behave.

  • Decommissioning support: All the resources can be installed and removed.


The template modules in this repository:

  • stdmod - An implementation of a Standard Module Interface, which uses PuppetLabs' stdlib. It manages the typical Package/Service/File pattern.

  • stdmodalt - An alternative Standard Module Interface implementation with a layout based on separation of package/service/config resources into dedicated classes.

  • standard - Another Package/Service/File pattern implementation, with different parameters and no dependencies.

  • standard42 - The current Example42 implementation of Package/Service/File module, with the Example42 additions for automatic monitoring, firewalling and puppi integration.

  • minimal42 - The current Example42 implementation of Package/File only modules.

  • package42 - The current Example42 implementation of a single Package module, without services or configurations.


You can quickly create new modules from these templates.

First of all you need this repo with all its submodules:

git clone --recursive

Once you have the respository you can use the script to generate a new module from an existing temmplate. For example, to create a basic openssh module from the stdmod template:

./clone -m stdmod -n openssh

A new openssh module directory is created and you can start to customize it:

  • Edit manifests/params.pp to fix paths and names for different operating systems

  • Change email address and author in Modulefile and .travis.yml

  • Fix Travis icon url with your GitHub/Travis account in

  • Eventually add resources to manage in manifests/init.pp or in other subclasses

  • Eventually add modules' parameters in manifests/init.pp and where used (note that the options parameter can be used to populate a custom template with any possibile configuration item, without the need to add it as module's parameter)

  • Note that where you need to add other files managed by the module you can copy and paste the existing file resurce for the main configuration and change only the relevant parts (title, path, source or template…) keeping the other options to preserve the module's behaviour also on this new file (for example the audit or noop parameters)

You can’t perform that action at this time.