puppet-lint-optional_default-check
A puppet-lint plugin to check that Optional
parameters don't default to something other than undef
.
Table of contents
Installing
From the command line
$ gem install puppet-lint-optional_default-check
In a Gemfile
gem 'puppet-lint-optional_default-check', :require => false
Checks
Optional
parameter defaults to something other than undef
An Optional
parameter in Puppet is one where undef
is an allowed value.
It is normally a mistake to set the default of an Optional
parameter to something other than undef
.
This is because it's not possible to 'pass' undef
as the value to use for a parameter when declaring a class or defined type.
When you try to set a parameter to undef
, Puppet actually uses the class's default value for that parameter, not undef
itself.
(The caveat is that it is possible to use hiera to override a non undef
default back to undef
, but in practice, doing this is quite rare.)
A defined type with an mandatory (no default), Optional
parameter will raise a warning.
The plugin will not raise a warning if a class Optional
parameter doesn't have a default.
Mandatory parameters can have defaults set in hiera, and several modules do use ~
for this.
What you have done
class foo (
Optional[Integer] $port = 8080,
){
}
What you should have done
class foo (
Integer $port = 8080,
){
}
or
class foo (
Optional[Integer] $port = undef,
){
}
Copyright
Copyright 2021 Alexander Fisher
Transfer Notice
This plugin was originally authored by Alexander Fisher. The maintainer preferred that Vox Pupuli take ownership of the module for future improvement and maintenance. Existing pull requests and issues were transferred, please fork and continue to contribute here instead of on Alex's fork.
License
This gem is licensed under the MIT license.
Release information
To make a new release, please do:
- Update the version in the
puppet-lint-optional_default-check.gemspec
file - Install gems with
bundle install --with release --path .vendor
- generate the changelog with
bundle exec rake changelog
- Create a PR with it
- After it got merged, push a tag. A github workflow will do the actual release