Skip to content

Commit 130c1af

Browse files
committed
Add Module layout specification
This document describes all files/directories that are allowed or mandatory within a module. The forge can use it as an allowlist and filter other files out. r10k/code-manager can use it as an allowlist as well when modules are pulled from version controll systems like github (similar to the `--exclude-spec` option in r10k).
1 parent 080f474 commit 130c1af

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

language/module.md

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Puppet Module Schema
2+
3+
This document describes allowed (optional) and required files and directories in
4+
a Puppet Module.
5+
6+
## What is a Puppet Module
7+
8+
A module in the sense of this document is a compressed tar archive. It is
9+
usually distributed via [forge.puppet.com](https://forge.puppet.com/). A module
10+
is usually developed in a git repository. Some files in the git repository are
11+
only used for development and testing. They shall not be released. The official
12+
[Puppet documentation](https://www.puppet.com/docs/puppet/latest/modules_fundamentals.html)
13+
already explains what a module is and what it can contain.
14+
15+
| Directories and Files | Purpose |
16+
|-----------------------|---------|
17+
| `/manifests/` | contains Puppet code |
18+
| `hiera.yaml` | Can define a Hiera configuration for Hiera data within this module |
19+
| `/data/` | If the module has a `hiera.yaml`, the related data has to be within `/data/` |
20+
| `/templates/` | Stores [epp](https://www.puppet.com/docs/puppet/latest/lang_template_epp.html) or [erb](https://www.puppet.com/docs/puppet/latest/lang_template_erb.html) templates |
21+
| `/files/` | Static files that Puppet code within the module will distribute |
22+
| `/examples/` | Example Puppet snippets that explain how to use the module. They can be used within acceptance tests |
23+
| `/facts.d/` | [External facts](https://www.puppet.com/docs/puppet/latest/external_facts.html) that are synced via [pluginsync](https://www.puppet.com/docs/puppet/latest/plugins_in_modules.html) |
24+
| `/lib/facter/` | Contains custom facts |
25+
| `/lib/puppet/type/` | Custom types |
26+
| `/lib/puppet/provider/` | Custom provider for one or multiple types |
27+
| `/lib/puppet/functions/` | Modern functions in Ruby for the new API |
28+
| `/lib/puppet/parser/functions/` | Legacy functions in Ruby |
29+
| `/lib/puppet_x/` | Custom Ruby modules to extend types, providers, functions or facts |
30+
| `/lib/augeas/lenses/` | Custom [Augeas](https://augeas.net/) lenses |
31+
| `/functions/` | Can contain functions written in Puppet DSL |
32+
| `/metadata.json` | Metadata file that describes the module based on [a schema](https://www.puppet.com/docs/puppet/latest/modules_metadata.html) |
33+
| `/README` | A README that describes what the module does. It's best practice to add a suffix like `.txt`, `.md`, `.rst` for the used markup language |
34+
| `/LICENSE` | `/metadata.json` specifies a license. The license text needs to be distributed in a LICENSE file. It can have a suffix if a markup language is used |
35+
| `/CHANGELOG` | A Changelog that's updated for every release. A new release should not alter existing changelog entries. It can have a suffix if a markup language is used |
36+
| `/HISTORY` | The history file can contain old changelogs. Useful when the tool used to generate changelogs is changed or a module is migrated to a new namespace |
37+
| `/docs/` | Directory for additional documentation |
38+
| `/REFERENCE.md` | [puppet-strings](https://www.puppet.com/docs/puppet/latest/puppet_strings.html) based documentation in markdown, updated on each release |
39+
| `/locales/` | Used for i18n support, can contain translated strings |
40+
| `/scripts/` | Distribute a script for bolt?? |
41+
| `/tasks/` | Contains [Tasks for Bolt](https://www.puppet.com/docs/bolt/latest/tasks.html) |
42+
| `/plans/` | Contains [Plans for Bolt](https://www.puppet.com/docs/bolt/latest/plans) |
43+
| `/types/` | Contains [type aliases](https://www.puppet.com/docs/puppet/latest/lang_type_aliases.html) |
44+
45+
Mandatory are:
46+
* `/metadata.json`
47+
* `/README`
48+
* `/LICENSE`
49+
* `/CHANGELOG`
50+
* `/REFERENCE.md`

0 commit comments

Comments
 (0)