<commit_before>Contributing to Fuel Library
============================

This chapter will explain how to add new module or project into Fuel Library, 
how to integrate with other components
and how to avoid different problems and potential mistakes. Fuel Library is a 
very big project and even experienced Puppet user will have problems 
understanding its structure and internal workings.

The Puppet modules structure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

First let's start with Puppet modules structure. If you want to contribute you 
code into the Fuel Library it should be organized into a Puppet module. Modules
are self-contained sets of Puppet code that usually are made to perform specific 
function. For example you could have a module for every service you are going 
to configure or for every part of your project. Usually it's a good idea to <commit_msg>Address new rules for bringing in external puppet modules<commit_after>Contributing to Fuel Library
============================

This chapter will explain how to add new module or project into Fuel Library, 
how to integrate with other components
and how to avoid different problems and potential mistakes. Fuel Library is a 
very big project and even experienced Puppet user will have problems 
understanding its structure and internal workings.

Adding new modules to fuel-library
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*Case A. Pulling in an existing module*

If you are adding a module that is the work of another project and is already
tracked in separate repo then:

1. Create a review request with a unmodified copy of the upstream module from
whichever point you are working from and *no* other related modifications.

* This review should also contain the commit hash from the upstream repo
  in the commit message.
* The review should be evaluated to determine its suitability and either rejected
  (for licensing, code quality, outdated version requested) or accepted
  without requiring modifications.
* The review should not include code that calls this new module.

2.  Any changes necessary to make it work with Fuel should then be proposed
as a dependent change(s).

*Case B. Adding a new module*

If you are adding a new module that is a work purely for Fuel and will not be
tracked in a separate repo then submit incremental reviews that consist of
working implementation of features for your module.

If you have features that are necessary, but do not work fully yet, then prevent
them from running during the deployment. Once your feature is complete, submit
a review to activate the module during deployment.

The Puppet modules structure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

First let's start with Puppet modules structure. If you want to contribute you 
code into the Fuel Library it should be organized into a Puppet module. Modules
are self-contained sets of Puppet code that usually are made to perform specific 
function. For example you could have a module for every service you are going 
to configure or for every part of your project. Usually it's a good idea to 
{'fraction_non_alphanumeric': 0.06695109944207417, 'fraction_numerical': 0.0006563833278634722, 'mean_word_length': 4.675977653631285, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6519093', 'n_tokens_mistral': 698, 'n_tokens_neox': 666, 'n_words': 467}