|
| 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