Difference between revisions of "Puppet/Coding style"
(→Consistency) |
|||
Line 22: | Line 22: | ||
=== Commit message === | === Commit message === | ||
Please read [[GitCommitMessages]]. | Please read [[GitCommitMessages]]. | ||
− | |||
=== Consistency === | === Consistency === | ||
We have a lot of modules to maintain, please keep our code consistent. | We have a lot of modules to maintain, please keep our code consistent. | ||
Line 28: | Line 27: | ||
See also our common librarie [http://git.openstack.org/cgit/openstack/puppet-openstacklib/ OpenStackLib] | See also our common librarie [http://git.openstack.org/cgit/openstack/puppet-openstacklib/ OpenStackLib] | ||
− | === Empty | + | === Config file defaults and parameters === |
+ | We want users that don't override a value to get the default for the service being configured. Many of the parameters passed in to classes and defined types translate directly into a config file setting. When a parameter translates directly to a config file value, and the value is optional, it should be set to <code>$::os_service_default</code>. This is a special value that will ensure that the service default is used by removing any existing value from the config file. | ||
+ | |||
+ | === Empty parameters === | ||
When you need to specify a empty (nil) parameter, using [https://docs.puppetlabs.com/puppet/latest/reference/lang_data_undef.html undef] is the best choice. | When you need to specify a empty (nil) parameter, using [https://docs.puppetlabs.com/puppet/latest/reference/lang_data_undef.html undef] is the best choice. | ||
Do not useː " (not Puppetish) or false (undef is false if tested as a boolean). | Do not useː " (not Puppetish) or false (undef is false if tested as a boolean). |
Revision as of 15:55, 17 November 2015
Contents
Before coding
Noteː this document is work in progress and the content with evolve. Any contribution is welcome though ;-)
- Read this page
- Make sure that what you're going to code is not already work in progress
- Make sure you're familiar with Puppet Syntax, Lint, Rspec, and Beaker
- If you want to create a new module, read Puppet/New_module
Best practices
Deprecation
Any patch must be backward compatible.
It meansː
- do not break the interface (deprecate parameters for at least one cycle, and add a warning for our users)
- do not change default parameters (except if you have a good reason but your commit message must explain it)
Commit message
Please read GitCommitMessages.
Consistency
We have a lot of modules to maintain, please keep our code consistent. Before adding new parameters or new classes, see if other modules already implement them and keep consistent. See also our common librarie OpenStackLib
Config file defaults and parameters
We want users that don't override a value to get the default for the service being configured. Many of the parameters passed in to classes and defined types translate directly into a config file setting. When a parameter translates directly to a config file value, and the value is optional, it should be set to $::os_service_default
. This is a special value that will ensure that the service default is used by removing any existing value from the config file.
Empty parameters
When you need to specify a empty (nil) parameter, using undef is the best choice. Do not useː " (not Puppetish) or false (undef is false if tested as a boolean).
Testing
Your code needs to be tested. Puppet OpenStack CI will verify for you, but if you want to save time, you better to run tests locally before sending a patchː
Documentation
- Validate all parameters are documented. They are required and lint will check it.
- If possible, keep examples/*.pp updated, they are very useful for our users.
- Comment your code when needed (temporary workarounds, TODO, etc).
Asking for review
Different ways to get reviewsː
- Go on IRC
#puppet-openstack
(freenode) and gently ask for reviews. If you need to discuss about already reviewed code, you can ping the reviewers. - Add your patch on the Puppet OpenStack meeting Agenda (in Open Discussion section).
- Use Mailing list.