diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 4a51969..2240a97 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,184 +1,281 @@
+# Contribution guidelines
+
+## Table of contents
+
+* [Contributing](#contributing)
+* [Writing proper commits - short version](#writing-proper-commits-short-version)
+* [Writing proper commits - long version](#writing-proper-commits-long-version)
+* [Dependencies](#dependencies)
+ * [Note for OS X users](#note-for-os-x-users)
+* [The test matrix](#the-test-matrix)
+* [Syntax and style](#syntax-and-style)
+* [Running the unit tests](#running-the-unit-tests)
+* [Unit tests in docker](#unit-tests-in-docker)
+* [Integration tests](#integration-tests)
+
This module has grown over time based on a range of contributions from
people using it. If you follow these contributing guidelines your patch
will likely make it into a release a little more quickly.
## Contributing
Please note that this project is released with a Contributor Code of Conduct.
By participating in this project you agree to abide by its terms.
[Contributor Code of Conduct](https://voxpupuli.org/coc/).
-1. Fork the repo.
-
-1. Create a separate branch for your change.
-
-1. We only take pull requests with passing tests, and documentation. [travis-ci](http://travis-ci.org)
- runs the tests for us. You can also execute them locally. This is explained
- in a later section.
-
-1. Checkout [our docs](https://voxpupuli.org/docs/#reviewing-a-module-pr) we
- use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html).
- They provide some guidance for new code that might help you before you submit a pull request.
-
-1. Add a test for your change. Only refactoring and documentation
- changes require no new tests. If you are adding functionality
- or fixing a bug, please add a test.
-
-1. Squash your commits down into logical components. Make sure to rebase
- against our current master.
-
-1. Push the branch to your fork and submit a pull request.
-
-Please be prepared to repeat some of these steps as our contributors review
-your code.
+* Fork the repo.
+* Create a separate branch for your change.
+* We only take pull requests with passing tests, and documentation. [travis-ci](http://travis-ci.org) runs the tests for us. You can also execute them locally. This is explained [in a later section](#the-test-matrix).
+* Checkout [our docs](https://voxpupuli.org/docs/reviewing_pr/) we use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html). They provide some guidance for new code that might help you before you submit a pull request.
+* Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, please add a test.
+* Squash your commits down into logical components. Make sure to rebase against our current master.
+* Push the branch to your fork and submit a pull request.
+
+Please be prepared to repeat some of these steps as our contributors review your code.
+
+## Writing proper commits - short version
+
+* Make commits of logical units.
+* Check for unnecessary whitespace with "git diff --check" before committing.
+* Commit using Unix line endings (check the settings around "crlf" in git-config(1)).
+* Do not check in commented out code or unneeded files.
+* The first line of the commit message should be a short description (50 characters is the soft limit, excluding ticket number(s)), and should skip the full stop.
+* Associate the issue in the message. The first line should include the issue number in the form "(#XXXX) Rest of message".
+* The body should provide a meaningful commit message, which:
+ *uses the imperative, present tense: `change`, not `changed` or `changes`.
+ * includes motivation for the change, and contrasts its implementation with the previous behavior.
+ * Make sure that you have tests for the bug you are fixing, or feature you are adding.
+ * Make sure the test suites passes after your commit:
+ * When introducing a new feature, make sure it is properly documented in the README.md
+
+## Writing proper commits - long version
+
+ 1. Make separate commits for logically separate changes.
+
+ Please break your commits down into logically consistent units
+ which include new or changed tests relevant to the rest of the
+ change. The goal of doing this is to make the diff easier to
+ read for whoever is reviewing your code. In general, the easier
+ your diff is to read, the more likely someone will be happy to
+ review it and get it into the code base.
+
+ If you are going to refactor a piece of code, please do so as a
+ separate commit from your feature or bug fix changes.
+
+ We also really appreciate changes that include tests to make
+ sure the bug is not re-introduced, and that the feature is not
+ accidentally broken.
+
+ Describe the technical detail of the change(s). If your
+ description starts to get too long, that is a good sign that you
+ probably need to split up your commit into more finely grained
+ pieces.
+
+ Commits which plainly describe the things which help
+ reviewers check the patch and future developers understand the
+ code are much more likely to be merged in with a minimum of
+ bike-shedding or requested changes. Ideally, the commit message
+ would include information, and be in a form suitable for
+ inclusion in the release notes for the version of Puppet that
+ includes them.
+
+ Please also check that you are not introducing any trailing
+ whitespace or other "whitespace errors". You can do this by
+ running "git diff --check" on your changes before you commit.
+
+ 2. Sending your patches
+
+ To submit your changes via a GitHub pull request, we _highly_
+ recommend that you have them on a topic branch, instead of
+ directly on `master`.
+ It makes things much easier to keep track of, especially if
+ you decide to work on another thing before your first change
+ is merged in.
+
+ GitHub has some pretty good
+ [general documentation](http://help.github.com/) on using
+ their site. They also have documentation on
+ [creating pull requests](http://help.github.com/send-pull-requests/).
+
+ In general, after pushing your topic branch up to your
+ repository on GitHub, you can switch to the branch in the
+ GitHub UI and click "Pull Request" towards the top of the page
+ in order to open a pull request.
+
+
+ 3. Update the related GitHub issue.
+
+ If there is a GitHub issue associated with the change you
+ submitted, then you should update the ticket to include the
+ location of your branch, along with any other commentary you
+ may wish to make.
## Dependencies
The testing and development tools have a bunch of dependencies,
all managed by [bundler](http://bundler.io/) according to the
[Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions).
By default the tests use a baseline version of Puppet.
If you have Ruby 2.x or want a specific version of Puppet,
you must set an environment variable such as:
```sh
export PUPPET_VERSION="~> 5.5.6"
```
You can install all needed gems for spec tests into the modules directory by
running:
```sh
-bundle install --path .vendor/ --without development --without system_tests --without release
+bundle install --path .vendor/ --without development system_tests release --jobs "$(nproc)"
```
If you also want to run acceptance tests:
```sh
-bundle install --path .vendor/ --without development --with system_tests --without release
+bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"
```
Our all in one solution if you don't know if you need to install or update gems:
```sh
-bundle install --path .vendor/ --without development --with system_tests --without release; bundle update; bundle clean
+bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"; bundle update; bundle clean
+```
+
+As an alternative to the `--jobs "$(nproc)` parameter, you can set an
+environment variable:
+
+```sh
+BUNDLE_JOBS="$(nproc)"
```
-## Syntax and style
+### Note for OS X users
+
+`nproc` isn't a valid command under OS x. As an alternative, you can do:
+
+```sh
+--jobs "$(sysctl -n hw.ncpu)"
+```
+
+## The test matrix
+
+### Syntax and style
The test suite will run [Puppet Lint](http://puppet-lint.com/) and
[Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to
check various syntax and style things. You can run these locally with:
```sh
bundle exec rake lint
bundle exec rake validate
```
It will also run some [Rubocop](http://batsov.com/rubocop/) tests
against it. You can run those locally ahead of time with:
```sh
bundle exec rake rubocop
```
-## Running the unit tests
+### Running the unit tests
The unit test suite covers most of the code, as mentioned above please
add tests if you're adding new functionality. If you've not used
[rspec-puppet](http://rspec-puppet.com/) before then feel free to ask
about how best to test your new feature.
To run the linter, the syntax checker and the unit tests:
```sh
bundle exec rake test
```
To run your all the unit tests
```sh
bundle exec rake spec
```
To run a specific spec test set the `SPEC` variable:
```sh
bundle exec rake spec SPEC=spec/foo_spec.rb
```
-### Unit tests in docker
+#### Unit tests in docker
Some people don't want to run the dependencies locally or don't want to install
ruby. We ship a Dockerfile that enables you to run all unit tests and linting.
You only need to run:
```sh
docker build .
```
Please ensure that a docker daemon is running and that your user has the
permission to talk to it. You can specify a remote docker host by setting the
`DOCKER_HOST` environment variable. it will copy the content of the module into
the docker image. So it will not work if a Gemfile.lock exists.
-## Integration tests
+### Integration tests
The unit tests just check the code runs, not that it does exactly what
we want on a real machine. For that we're using
[beaker](https://github.com/puppetlabs/beaker).
This fires up a new virtual machine (using vagrant) and runs a series of
simple tests against it after applying the module. You can run this
with:
```sh
bundle exec rake acceptance
```
This will run the tests on the module's default nodeset. You can override the
nodeset used, e.g.,
```sh
BEAKER_set=centos-7-x64 bundle exec rake acceptance
```
There are default rake tasks for the various acceptance test modules, e.g.,
```sh
bundle exec rake beaker:centos-7-x64
bundle exec rake beaker:ssh:centos-7-x64
```
If you don't want to have to recreate the virtual machine every time you can
use `BEAKER_destroy=no` and `BEAKER_provision=no`. On the first run you will at
least need `BEAKER_provision` set to yes (the default). The Vagrantfile for the
created virtual machines will be in `.vagrant/beaker_vagrant_files`.
Beaker also supports docker containers. We also use that in our automated CI
pipeline at [travis-ci](http://travis-ci.org). To use that instead of Vagrant:
-```
-PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian9-64{hypervisor=docker} BEAKER_destroy=yes bundle exec rake beaker
+```sh
+PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=debian10-64{hypervisor=docker} BEAKER_destroy=yes bundle exec rake beaker
```
-You can replace the string `debian9` with any common operating system.
+You can replace the string `debian10` with any common operating system.
The following strings are known to work:
* ubuntu1604
* ubuntu1804
* debian8
* debian9
+* debian10
* centos6
* centos7
+* centos8
The easiest way to debug in a docker container is to open a shell:
```sh
docker exec -it -u root ${container_id_or_name} bash
```
The source of this file is in our [modulesync_config](https://github.com/voxpupuli/modulesync_config/blob/master/moduleroot/.github/CONTRIBUTING.md.erb)
repository.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ef25cdb..342807b 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,20 +1,20 @@
#### Pull Request (PR) description
#### This Pull Request (PR) fixes the following issues
diff --git a/.msync.yml b/.msync.yml
index fa528f5..e8e8703 100644
--- a/.msync.yml
+++ b/.msync.yml
@@ -1 +1 @@
-modulesync_config_version: '2.4.0'
+modulesync_config_version: '2.10.1'
diff --git a/.rubocop.yml b/.rubocop.yml
index 099a11c..5984ccc 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,545 +1,545 @@
require: rubocop-rspec
AllCops:
- TargetRubyVersion: 1.9
+ TargetRubyVersion: 2.1
Include:
- ./**/*.rb
Exclude:
- files/**/*
- vendor/**/*
- .vendor/**/*
- pkg/**/*
- spec/fixtures/**/*
- Gemfile
- Rakefile
- Guardfile
- Vagrantfile
Lint/ConditionPosition:
Enabled: True
Lint/ElseLayout:
Enabled: True
Lint/UnreachableCode:
Enabled: True
Lint/UselessComparison:
Enabled: True
Lint/EnsureReturn:
Enabled: True
Lint/HandleExceptions:
Enabled: True
Lint/LiteralInCondition:
Enabled: True
Lint/ShadowingOuterLocalVariable:
Enabled: True
Lint/LiteralInInterpolation:
Enabled: True
Style/HashSyntax:
Enabled: True
Style/RedundantReturn:
Enabled: True
Layout/EndOfLine:
Enabled: False
Lint/AmbiguousOperator:
Enabled: True
Lint/AssignmentInCondition:
Enabled: True
Layout/SpaceBeforeComment:
Enabled: True
Style/AndOr:
Enabled: True
Style/RedundantSelf:
Enabled: True
Metrics/BlockLength:
Enabled: False
# Method length is not necessarily an indicator of code quality
Metrics/MethodLength:
Enabled: False
# Module length is not necessarily an indicator of code quality
Metrics/ModuleLength:
Enabled: False
Style/WhileUntilModifier:
Enabled: True
Lint/AmbiguousRegexpLiteral:
Enabled: True
Security/Eval:
Enabled: True
Lint/BlockAlignment:
Enabled: True
Lint/DefEndAlignment:
Enabled: True
Lint/EndAlignment:
Enabled: True
Lint/DeprecatedClassMethods:
Enabled: True
Lint/Loop:
Enabled: True
Lint/ParenthesesAsGroupedExpression:
Enabled: True
Lint/RescueException:
Enabled: True
Lint/StringConversionInInterpolation:
Enabled: True
Lint/UnusedBlockArgument:
Enabled: True
Lint/UnusedMethodArgument:
Enabled: True
Lint/UselessAccessModifier:
Enabled: True
Lint/UselessAssignment:
Enabled: True
Lint/Void:
Enabled: True
Layout/AccessModifierIndentation:
Enabled: True
Style/AccessorMethodName:
Enabled: True
Style/Alias:
Enabled: True
Layout/AlignArray:
Enabled: True
Layout/AlignHash:
Enabled: True
Layout/AlignParameters:
Enabled: True
Metrics/BlockNesting:
Enabled: True
Style/AsciiComments:
Enabled: True
Style/Attr:
Enabled: True
Style/BracesAroundHashParameters:
Enabled: True
Style/CaseEquality:
Enabled: True
Layout/CaseIndentation:
Enabled: True
Style/CharacterLiteral:
Enabled: True
Style/ClassAndModuleCamelCase:
Enabled: True
Style/ClassAndModuleChildren:
Enabled: False
Style/ClassCheck:
Enabled: True
# Class length is not necessarily an indicator of code quality
Metrics/ClassLength:
Enabled: False
Style/ClassMethods:
Enabled: True
Style/ClassVars:
Enabled: True
Style/WhenThen:
Enabled: True
Style/WordArray:
Enabled: True
Style/UnneededPercentQ:
Enabled: True
Layout/Tab:
Enabled: True
Layout/SpaceBeforeSemicolon:
Enabled: True
Layout/TrailingBlankLines:
Enabled: True
Layout/SpaceInsideBlockBraces:
Enabled: True
Layout/SpaceInsideBrackets:
Enabled: True
Layout/SpaceInsideHashLiteralBraces:
Enabled: True
Layout/SpaceInsideParens:
Enabled: True
Layout/LeadingCommentSpace:
Enabled: True
Layout/SpaceBeforeFirstArg:
Enabled: True
Layout/SpaceAfterColon:
Enabled: True
Layout/SpaceAfterComma:
Enabled: True
Layout/SpaceAfterMethodName:
Enabled: True
Layout/SpaceAfterNot:
Enabled: True
Layout/SpaceAfterSemicolon:
Enabled: True
Layout/SpaceAroundEqualsInParameterDefault:
Enabled: True
Layout/SpaceAroundOperators:
Enabled: True
Layout/SpaceBeforeBlockBraces:
Enabled: True
Layout/SpaceBeforeComma:
Enabled: True
Style/CollectionMethods:
Enabled: True
Layout/CommentIndentation:
Enabled: True
Style/ColonMethodCall:
Enabled: True
Style/CommentAnnotation:
Enabled: True
# 'Complexity' is very relative
Metrics/CyclomaticComplexity:
Enabled: False
Style/ConstantName:
Enabled: True
Style/Documentation:
Enabled: False
Style/DefWithParentheses:
Enabled: True
Style/PreferredHashMethods:
Enabled: True
Layout/DotPosition:
EnforcedStyle: trailing
Style/DoubleNegation:
Enabled: True
Style/EachWithObject:
Enabled: True
Layout/EmptyLineBetweenDefs:
Enabled: True
Layout/IndentArray:
Enabled: True
Layout/IndentHash:
Enabled: True
Layout/IndentationConsistency:
Enabled: True
Layout/IndentationWidth:
Enabled: True
Layout/EmptyLines:
Enabled: True
Layout/EmptyLinesAroundAccessModifier:
Enabled: True
Style/EmptyLiteral:
Enabled: True
# Configuration parameters: AllowURI, URISchemes.
Metrics/LineLength:
Enabled: False
Style/MethodCallWithoutArgsParentheses:
Enabled: True
Style/MethodDefParentheses:
Enabled: True
Style/LineEndConcatenation:
Enabled: True
Layout/TrailingWhitespace:
Enabled: True
Style/StringLiterals:
Enabled: True
Style/TrailingCommaInArguments:
Enabled: True
Style/TrailingCommaInLiteral:
Enabled: True
Style/GlobalVars:
Enabled: True
Style/GuardClause:
Enabled: True
Style/IfUnlessModifier:
Enabled: True
Style/MultilineIfThen:
Enabled: True
Style/NegatedIf:
Enabled: True
Style/NegatedWhile:
Enabled: True
Style/Next:
Enabled: True
Style/SingleLineBlockParams:
Enabled: True
Style/SingleLineMethods:
Enabled: True
Style/SpecialGlobalVars:
Enabled: True
Style/TrivialAccessors:
Enabled: True
Style/UnlessElse:
Enabled: True
Style/VariableInterpolation:
Enabled: True
Style/VariableName:
Enabled: True
Style/WhileUntilDo:
Enabled: True
Style/EvenOdd:
Enabled: True
Style/FileName:
Enabled: True
Style/For:
Enabled: True
Style/Lambda:
Enabled: True
Style/MethodName:
Enabled: True
Style/MultilineTernaryOperator:
Enabled: True
Style/NestedTernaryOperator:
Enabled: True
Style/NilComparison:
Enabled: True
Style/FormatString:
Enabled: True
Style/MultilineBlockChain:
Enabled: True
Style/Semicolon:
Enabled: True
Style/SignalException:
Enabled: True
Style/NonNilCheck:
Enabled: True
Style/Not:
Enabled: True
Style/NumericLiterals:
Enabled: True
Style/OneLineConditional:
Enabled: True
Style/OpMethod:
Enabled: True
Style/ParenthesesAroundCondition:
Enabled: True
Style/PercentLiteralDelimiters:
Enabled: True
Style/PerlBackrefs:
Enabled: True
Style/PredicateName:
Enabled: True
Style/RedundantException:
Enabled: True
Style/SelfAssignment:
Enabled: True
Style/Proc:
Enabled: True
Style/RaiseArgs:
Enabled: True
Style/RedundantBegin:
Enabled: True
Style/RescueModifier:
Enabled: True
# based on https://github.com/voxpupuli/modulesync_config/issues/168
Style/RegexpLiteral:
EnforcedStyle: percent_r
Enabled: True
Lint/UnderscorePrefixedVariableName:
Enabled: True
Metrics/ParameterLists:
Enabled: False
Lint/RequireParentheses:
Enabled: True
Style/ModuleFunction:
Enabled: True
Lint/Debugger:
Enabled: True
Style/IfWithSemicolon:
Enabled: True
Style/Encoding:
Enabled: True
Style/BlockDelimiters:
Enabled: True
Layout/MultilineBlockLayout:
Enabled: True
# 'Complexity' is very relative
Metrics/AbcSize:
Enabled: False
# 'Complexity' is very relative
Metrics/PerceivedComplexity:
Enabled: False
Lint/UselessAssignment:
Enabled: True
Layout/ClosingParenthesisIndentation:
Enabled: True
# RSpec
RSpec/BeforeAfterAll:
Exclude:
- spec/acceptance/**/*
# We don't use rspec in this way
RSpec/DescribeClass:
Enabled: False
# Example length is not necessarily an indicator of code quality
RSpec/ExampleLength:
Enabled: False
RSpec/NamedSubject:
Enabled: False
# disabled for now since they cause a lot of issues
# these issues aren't easy to fix
RSpec/RepeatedDescription:
Enabled: False
RSpec/NestedGroups:
Enabled: False
# this is broken on ruby1.9
Layout/IndentHeredoc:
Enabled: False
# disable Yaml safe_load. This is needed to support ruby2.0.0 development envs
Security/YAMLLoad:
Enabled: false
# This affects hiera interpolation, as well as some configs that we push.
Style/FormatStringToken:
Enabled: false
# This is useful, but sometimes a little too picky about where unit tests files
# are located.
RSpec/FilePath:
Enabled: false
diff --git a/.travis.yml b/.travis.yml
index 7ce0e63..cbdb295 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,49 +1,47 @@
---
-sudo: false
-dist: xenial
+dist: bionic
language: ruby
cache: bundler
before_install:
- - rm -f Gemfile.lock
+ - yes | gem update --system
+ - bundle --version
script:
- 'bundle exec rake $CHECK'
matrix:
fast_finish: true
include:
- - rvm: 2.1.9
- bundler_args: --without system_tests development release
- env: PUPPET_VERSION="~> 4.0" CHECK=test PARALLEL_TEST_PROCESSORS=12
- rvm: 2.4.4
bundler_args: --without system_tests development release
env: PUPPET_VERSION="~> 5.0" CHECK=test
- - rvm: 2.5.1
+ - rvm: 2.5.3
bundler_args: --without system_tests development release
env: PUPPET_VERSION="~> 6.0" CHECK=test_with_coveralls
- - rvm: 2.5.1
+ - rvm: 2.5.3
bundler_args: --without system_tests development release
env: PUPPET_VERSION="~> 6.0" CHECK=rubocop
- rvm: 2.4.4
bundler_args: --without system_tests development release
env: PUPPET_VERSION="~> 5.0" CHECK=build DEPLOY_TO_FORGE=yes
branches:
only:
- master
- /^v\d/
notifications:
email: false
+ webhooks: https://voxpupu.li/incoming/travis
irc:
on_success: always
on_failure: always
channels:
- "chat.freenode.org#voxpupuli-notifications"
deploy:
provider: puppetforge
user: puppet
password:
secure: "I/IK9bG88UOVll0hpuxluGp6IY5gicLaDHug/jGwfuWlN4R3coPAqWO/sGOyaEMbc9V5/Fw0H0ThQdYY3eI3rW5M4a1r9TSg/Z9d46JximPat/XvcpLvUc0G+QxCVhTRmYqD7u0wuX5VSric0PQU6KSjH84ZbKgAA8l04NGObgUI6ugjaNBhkaoIP3glYcHY1fgn5vwER2T/iiXZ5q3qDtYboR2GWLUODLWSpXWZRy7oYvp/RGTSe1fKjDwkbtrZiFvRoyzQvDhEAr+0MFDxJiOLdoKJFeBs6BrF2lyUJ6udlOmEYV94DfKoxEhhlZbxkPCh4SedT79i3c3xkKlf9wfAsEyGSTfc9OtyYBfoHcE9GMRZIvLf2Jn2mpHMO2694Fil4d7JdhLYQ/9Gv9VgFrYosQdVlDh+RxE2CXzrO39LhA1GeOY/n1r+DdvuCJs1fZfBZ1ORb7eQNp1BknurJ8FoYCKlEgihS223IJEnGueDdYkchMSRjS6C3a/HIzBz0RvEDGXD3WgrY5edRIaGziSoSr5eXzumK7N1FFBlpfY/7j38zI1ibWN4PRakmZppeeWOb1xiuVS5JkngCLoYerxLJEEjt8+klXhwnqqJukFuObaVsyprSWp+aAu/UHD/4w/6/lC6Elv+VzccLpITOR5b7VdAuCttQ5PGse6fits="
on:
tags: true
# all_branches is required to use tags
all_branches: true
# Only publish the build marked with "DEPLOY_TO_FORGE"
condition: "$DEPLOY_TO_FORGE = yes"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 2a1dd66..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,170 +0,0 @@
-# Contributing to the Module or Raising Issues
-
-## Table of Contents
-
-1. [Raising an Issue](#raising-an-issue)
-1. [Contribtions](#contributions)
- * [Unit Tests](#unit-tests)
- * [Acceptance Tests](#acceptance-tests)
-1. [Contributors](#contributors)
-1. [Further Reading](#further-reading)
-
-## Raising an Issue
-
-When raising an issue, please provide the following information:
-
-* The version of the locp-cassandra module that you are using.
-* The version of Cassandra that you are installing.
-* The operating system and release (output from `facter os` would be
- appropriate).
-* A sample of your manifest/profile that is calling the `cassandra` module.
- Feel free to obfuscate sections of the code that contain details that
- are confidential (e.g. passwords and other secrets).
-
-## Contributions
-
-Contributions will be gratefully accepted. Please go to the project page, fork
-the project, make your changes locally and then raise a pull request. Details
-on how to do this are available at
-https://guides.github.com/activities/contributing-to-open-source.
-
-However, we do ask that at the very least, all items marked as **MUST** or
-**WON'T** in the list below are applicable:
-
-* Any new features (e.g. new resources or new attributes to existing resoures)
- **MUST** be fully documented .
-* Unit tests **MUST** be completing successfully. See
- [Unit Tests](#unit-tests) for more details. If your initial unit tests fail
- after a pull request and you need to fix them, simply change the code on
- your branch and push them to *origin* again as this will re-run the
- tests. It is not required to submit a new pull request.
-* Any new functionality or enhancements **SHOULD** be covered by unit/spec
- tests. If you are not comfortable with this, submit the PR anyway and
- we will fill in these gaps. You will most probably be asked to rebase
- your PR branch and then push again to register these changes.
-* If applicable, changes **COULD** be covered in beaker/acceptance tests.
-* Change **WON'T** break any functionality on any of the supported operating
- systems.
-
-### Unit Tests
-
-First, you'll need to install the testing dependencies using
-[bundler](http://bundler.io).
-
-```shell
-bundle install
-```
-
-To run all of the unit tests execute the following:
-
-```shell
-bundle exec rake test
-```
-
-This should output something like the following:
-
-```
-Running RuboCop...
-Inspecting 24 files
-........................
-
-24 files inspected, no offenses detected
----> syntax:manifests
----> syntax:templates
----> syntax:hiera:yaml
-/home/ben/.rvm/rubies/ruby-2.1.6/bin/ruby -I/home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-core-3.5.4/lib:/home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-support-3.5.0/lib /home/ben/.rvm/gems/ruby-2.1.6/gems/rspec-core-3.5.4/exe/rspec --pattern spec/\{aliases,classes,defines,unit,functions,hosts,integration,types\}/\*\*/\*_spec.rb --color
-[Coveralls] Set up the SimpleCov formatter.
-[Coveralls] Using SimpleCov's default settings.
-.......................................................
-
-Finished in 7.86 seconds (files took 0.81841 seconds to load)
-55 examples, 0 failures
-
-
-Total resources: 64
-Touched resources: 64
-Resource coverage: 100.00%
-[Coveralls] Outside the CI environment, not sending data.
-```
-
-Note that if you prefer, you can run the lint, syntax, and spec tests separately with individual commands:
-
-```shell
-bundle exec rake metadata_lint
-bundle exec rake rubocop
-bundle exec rake lint
-bundle exec rake validate
-bundle exec rake spec
-```
-
-If in doubt, or you are stuck, please ask for help in the PR or via our
-[Gitter Room](https://gitter.im/locp/cassandra).
-
-The unit tests will also fail if the test coverage falls below 100%.
-
-### Acceptance Tests
-
-These tests are more CPU intensive and are run via Docker. You will
-need to install further gems for this to work with the following
-command:
-
-```shell
-bundle install --with acceptance
-```
-
-Then run the tests:
-
-```shell
-bundle exec rake beaker:centos6
-bundle exec rake beaker:centos7
-bundle exec rake beaker:debian7
-bundle exec rake beaker:debian8
-bundle exec rake beaker:ubuntu1204
-bundle exec rake beaker:ubuntu1404
-bundle exec rake beaker:ubuntu1604
-```
-
-## Contributors
-
-**Release** | **PR/Issue** | **Contributer**
-------------|-----------------------------------------------------|----------------------------------------------------
-2.6.0 | [Adding Red Hat OS](https://github.com/locp/cassandra/pull/396) | [@stijnvdb](https://github.com/stijnvdb)
-2.3.0 | [Hiera documentation](https://github.com/locp/cassandra/pull/329) | [@tibers](https://github.com/tibers)
-2.1.1 | [Correct cql_types conditional in cassandra::schema class](https://github.com/locp/cassandra/pull/325)| [@aaron-miller](https://github.com/aaron-miller)
-2.0.2 | [locp/cassandra 2.0 example has two cassandra declarations](https://github.com/locp/cassandra/issues/291)| [@ericy-jana](https://github.com/ericy-jana)
-2.0.0 | [Convert cassandra::file from a class to a define](https://github.com/locp/cassandra/issues/266)| [@stanleyz](https://github.com/stanleyz)
-1.26.1 | [Correct cql_types conditional in cassandra::schema class](https://github.com/locp/cassandra/pull/325)| [@aaron-miller](https://github.com/aaron-miller)
-1.25.2 | [Ubuntu 16 doesnt like the service file](https://github.com/locp/cassandra/issues/269)| [@ahharu](https://github.com/ahharu)
-1.25.1 | [PID file name in systemd file for datastax-agent doesn't match PID file name in /etc/init.d/datastax-agent](https://github.com/locp/cassandra/issues/264)| [@pampelix](https://github.com/pampelix)
-1.25.0 | [adding support for mmap](https://github.com/locp/cassandra/pull/261) | [@tibers](https://github.com/tibers)
-1.24.0 | [remove varlib_dir require from data directory](https://github.com/locp/cassandra/pull/247) | [@ericy-jana](https://github.com/ericy-jana)
-1.24.0 | [stage config files before installing cassandra package](https://github.com/locp/cassandra/pull/246) | [@ericy-jana](https://github.com/ericy-jana)
-1.24.0 | [locp/cassandra starts two Cassandra processes](https://github.com/locp/cassandra/issues/245)| [@ericy-jana](https://github.com/ericy-jana)
-1.23.0 | [attemping to realize client security](https://github.com/locp/cassandra/pull/235) | [@tibers](https://github.com/tibers)
-1.22.1 | [#232 - add ordering to service definition](https://github.com/locp/cassandra/pull/233) | [@tibers](https://github.com/tibers)
-1.22.1 | [module tries to start cassandra before it's installed](https://github.com/locp/cassandra/issues/232)| [@tibers](https://github.com/tibers)
-1.21.0 | [Issue: Java version installed on Debian family by cassandra::java class #223](https://github.com/locp/cassandra/pull/226) | [@tibers](https://github.com/tibers)
-1.20.0 | [Missing attributes in cassandra.yaml](https://github.com/locp/cassandra/issues/217)| [@samyray](https://github.com/samyray)
-1.19.0 | [adding hints_directory for cassandra 3.x](https://github.com/locp/cassandra/pull/215) | [@tibers](https://github.com/tibers)
-1.18.0 | [Added opscenter ldap option group_search_filter_with_dn](https://github.com/locp/cassandra/pull/203) | [@Mike-Petersen](https://github.com/Mike-Petersen)
-1.15.0 | [creating vanilla cassandra 2.0.xx template](https://github.com/locp/cassandra/pull/189) | [@tibers](https://github.com/tibers)
-1.14.0 | [Feature/opscenter orbited longpoll](https://github.com/locp/cassandra/pull/171) | [@jonen10](https://github.com/jonen10)
-1.13.0 | [Allowing setting of async_pool_size and async_queue_size for the agent](https://github.com/locp/cassandra/pull/166) | [@Mike-Petersen](https://github.com/Mike-Petersen)
-1.13.0 | [parameterized thrift_framed_transport_size_in_mb](https://github.com/locp/cassandra/pull/163) | [@VeriskPuppet](https://github.com/VeriskPuppet)
-1.12.2 | [Error opening zip file or JAR manifest missing : /usr/sbin/../lib/jamm-0.3.0.jar](https://github.com/locp/cassandra/pull/165) | [@palmertime](https://github.com/palmertime)
-1.12.0 | [Rename alias to agent_alias as alias is a reserved puppet word](https://github.com/locp/cassandra/pull/156) | [@stuartbfox](https://github.com/stuartbfox)
-1.12.0 | [Added interfaces as an option](https://github.com/locp/cassandra/pull/153) | [@Mike-Petersen](https://github.com/Mike-Petersen)
-1.10.0 | [Allowing setting of local_interface for the datastax agent configuration](https://github.com/locp/cassandra/pull/144) | [@Mike-Petersen](https://github.com/Mike-Petersen)
-1.9.2 | [When installing cassandra dsc22 it tries to install cassandra 3.0.0 and as dependecy 2.2.3 is needed](https://github.com/locp/cassandra/issues/136)| [@mantunovic](https://github.com/mantunovic)
-1.9.2 | [When installing cassandra dsc22 it tries to install cassandra 3.0.0 and as dependecy 2.2.3 is needed](https://github.com/locp/cassandra/issues/136)| [@al4](https://github.com/al4)
-1.4.2 | [restart service if datastax agent package is upgraded](https://github.com/locp/cassandra/pull/110) | [@markasammut](https://github.com/markasammut)
-1.4.0 | [allow batch_size_warn_threshold to be modified externally](https://github.com/locp/cassandra/pull/100) | [@markasammut](https://github.com/markasammut)
-1.3.5 | [service_ensure unused](https://github.com/locp/cassandra/issues/93) | [@sampowers](https://github.com/sampowers)
-1.3.3 | [Fails To Run With puppetlabs-apt v1.8.0](https://github.com/locp/cassandra/pull/87) | [@DylanGriffith](https://github.com/DylanGriffith)
-0.4.2 | [Fix syntax in version_requirements](https://github.com/locp/cassandra/pull/34) | [@amosshapira](https://github.com/amosshapira)
-0.3.0 | [Add a template for Cassandra 1.x compat](https://github.com/locp/cassandra/pull/11) | [@spredzy](https://github.com/Spredzy)
-
-## Further Reading
-
-* *RSpec tests for your Puppet manifests*
-* *Beaker Info*
diff --git a/Dockerfile b/Dockerfile
index 27a33cf..6fd6342 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,21 +1,21 @@
-FROM ruby:2.5.1
+FROM ruby:2.5.3
WORKDIR /opt/puppet
# https://github.com/puppetlabs/puppet/blob/06ad255754a38f22fb3a22c7c4f1e2ce453d01cb/lib/puppet/provider/service/runit.rb#L39
RUN mkdir -p /etc/sv
ARG PUPPET_VERSION="~> 6.0"
ARG PARALLEL_TEST_PROCESSORS=4
# Cache gems
COPY Gemfile .
RUN bundle install --without system_tests development release --path=${BUNDLE_PATH:-vendor/bundle}
COPY . .
RUN bundle install
-RUN bundle exec release_checks
+RUN bundle exec rake release_checks
# Container should not saved
RUN exit 1
diff --git a/Gemfile b/Gemfile
index b871c78..8b4adb5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,86 +1,86 @@
source ENV['GEM_SOURCE'] || "https://rubygems.org"
def location_for(place, fake_version = nil)
if place =~ /^(git[:@][^#]*)#(.*)/
[fake_version, { :git => $1, :branch => $2, :require => false }].compact
elsif place =~ /^file:\/\/(.*)/
['>= 0', { :path => File.expand_path($1), :require => false }]
else
[place, { :require => false }]
end
end
group :test do
- gem 'puppetlabs_spec_helper', '>= 2.11.0', :require => false
- gem 'rspec-puppet-facts', '>= 1.8.0', :require => false
+ gem 'puppetlabs_spec_helper', '>= 2.14.0', :require => false
+ gem 'rspec-puppet-facts', '>= 1.9.5', :require => false
gem 'rspec-puppet-utils', :require => false
gem 'puppet-lint-leading_zero-check', :require => false
gem 'puppet-lint-trailing_comma-check', :require => false
gem 'puppet-lint-version_comparison-check', :require => false
gem 'puppet-lint-classes_and_types_beginning_with_digits-check', :require => false
gem 'puppet-lint-unquoted_string-check', :require => false
gem 'puppet-lint-variable_contains_upcase', :require => false
- gem 'puppet-lint-absolute_classname-check', :require => false
+ gem 'puppet-lint-absolute_classname-check', '>= 2.0.0', :require => false
gem 'puppet-lint-topscope-variable-check', :require => false
gem 'puppet-lint-legacy_facts-check', :require => false
+ gem 'puppet-lint-anchor-check', :require => false
gem 'metadata-json-lint', :require => false
gem 'redcarpet', :require => false
- gem 'rubocop', '~> 0.49.1', :require => false if RUBY_VERSION >= '2.3.0'
- gem 'rubocop-rspec', '~> 1.15.0', :require => false if RUBY_VERSION >= '2.3.0'
+ gem 'rubocop', '~> 0.49.1', :require => false
+ gem 'rubocop-rspec', '~> 1.15.0', :require => false
gem 'mocha', '~> 1.4.0', :require => false
gem 'coveralls', :require => false
gem 'simplecov-console', :require => false
- gem 'rack', '~> 1.0', :require => false if RUBY_VERSION < '2.2.2'
- gem 'parallel_tests', '2.24.0', :require => false if RUBY_VERSION < '2.2.0'
- gem 'parallel_tests', :require => false if RUBY_VERSION >= '2.2.0'
+ gem 'parallel_tests', :require => false
end
group :development do
gem 'travis', :require => false
gem 'travis-lint', :require => false
gem 'guard-rake', :require => false
gem 'overcommit', '>= 0.39.1', :require => false
end
group :system_tests do
gem 'winrm', :require => false
if beaker_version = ENV['BEAKER_VERSION']
gem 'beaker', *location_for(beaker_version)
else
gem 'beaker', '>= 4.2.0', :require => false
end
if beaker_rspec_version = ENV['BEAKER_RSPEC_VERSION']
gem 'beaker-rspec', *location_for(beaker_rspec_version)
else
gem 'beaker-rspec', :require => false
end
gem 'serverspec', :require => false
gem 'beaker-hostgenerator', '>= 1.1.22', :require => false
gem 'beaker-docker', :require => false
gem 'beaker-puppet', :require => false
gem 'beaker-puppet_install_helper', :require => false
gem 'beaker-module_install_helper', :require => false
- gem 'rbnacl', '>= 4', :require => false if RUBY_VERSION >= '2.2.6'
- gem 'rbnacl-libsodium', :require => false if RUBY_VERSION >= '2.2.6'
+ gem 'rbnacl', '>= 4', :require => false
+ gem 'rbnacl-libsodium', :require => false
gem 'bcrypt_pbkdf', :require => false
+ gem 'ed25519', :require => false
end
group :release do
- gem 'github_changelog_generator', :require => false, :git => 'https://github.com/github-changelog-generator/github-changelog-generator' if RUBY_VERSION >= '2.2.2'
+ gem 'github_changelog_generator', :require => false, :git => 'https://github.com/voxpupuli/github-changelog-generator', :branch => 'voxpupuli_essential_fixes'
gem 'puppet-blacksmith', :require => false
- gem 'voxpupuli-release', :require => false, :git => 'https://github.com/voxpupuli/voxpupuli-release-gem'
- gem 'puppet-strings', '>= 1.0', :require => false
+ gem 'voxpupuli-release', :require => false
+ gem 'puppet-strings', '>= 2.2', :require => false
end
if facterversion = ENV['FACTER_GEM_VERSION']
gem 'facter', facterversion.to_s, :require => false, :groups => [:test]
else
gem 'facter', :require => false, :groups => [:test]
end
-ENV['PUPPET_VERSION'].nil? ? puppetversion = '~> 5.0' : puppetversion = ENV['PUPPET_VERSION'].to_s
+ENV['PUPPET_VERSION'].nil? ? puppetversion = '~> 6.0' : puppetversion = ENV['PUPPET_VERSION'].to_s
gem 'puppet', puppetversion, :require => false, :groups => [:test]
# vim: syntax=ruby
diff --git a/Rakefile b/Rakefile
index 279580a..c0f2d37 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,92 +1,85 @@
require 'puppetlabs_spec_helper/rake_tasks'
# load optional tasks for releases
# only available if gem group releases is installed
begin
- require 'puppet_blacksmith/rake_tasks'
require 'voxpupuli/release/rake_tasks'
- require 'puppet-strings/tasks'
rescue LoadError
end
PuppetLint.configuration.log_format = '%{path}:%{line}:%{check}:%{KIND}:%{message}'
-PuppetLint.configuration.fail_on_warnings = true
-PuppetLint.configuration.send('relative')
-PuppetLint.configuration.send('disable_140chars')
-PuppetLint.configuration.send('disable_class_inherits_from_params_class')
-PuppetLint.configuration.send('disable_documentation')
-PuppetLint.configuration.send('disable_single_quote_string_with_variables')
-
-exclude_paths = %w(
- pkg/**/*
- vendor/**/*
- .vendor/**/*
- spec/**/*
-)
-PuppetLint.configuration.ignore_paths = exclude_paths
-PuppetSyntax.exclude_paths = exclude_paths
desc 'Auto-correct puppet-lint offenses'
task 'lint:auto_correct' do
- PuppetLint.configuration.fix = true
- Rake::Task[:lint].invoke
+ Rake::Task[:lint_fix].invoke
end
desc 'Run acceptance tests'
RSpec::Core::RakeTask.new(:acceptance) do |t|
t.pattern = 'spec/acceptance'
end
-desc 'Run tests metadata_lint, release_checks'
-task test: [
- :metadata_lint,
- :release_checks,
-]
+desc 'Run tests'
+task test: [:release_checks]
+
+namespace :check do
+ desc 'Check for trailing whitespace'
+ task :trailing_whitespace do
+ Dir.glob('**/*.md', File::FNM_DOTMATCH).sort.each do |filename|
+ next if filename =~ %r{^((modules|acceptance|\.?vendor|spec/fixtures|pkg)/|REFERENCE.md)}
+ File.foreach(filename).each_with_index do |line, index|
+ if line =~ %r{\s\n$}
+ puts "#{filename} has trailing whitespace on line #{index + 1}"
+ exit 1
+ end
+ end
+ end
+ end
+end
+Rake::Task[:release_checks].enhance ['check:trailing_whitespace']
desc "Run main 'test' task and report merged results to coveralls"
task test_with_coveralls: [:test] do
if Dir.exist?(File.expand_path('../lib', __FILE__))
require 'coveralls/rake/task'
Coveralls::RakeTask.new
Rake::Task['coveralls:push'].invoke
else
puts 'Skipping reporting to coveralls. Module has no lib dir'
end
end
-desc "Print supported beaker sets"
-task 'beaker_sets', [:directory] do |t, args|
- directory = args[:directory]
-
- metadata = JSON.load(File.read('metadata.json'))
-
- (metadata['operatingsystem_support'] || []).each do |os|
- (os['operatingsystemrelease'] || []).each do |release|
- if directory
- beaker_set = "#{directory}/#{os['operatingsystem'].downcase}-#{release}"
- else
- beaker_set = "#{os['operatingsystem'].downcase}-#{release}-x64"
- end
-
- filename = "spec/acceptance/nodesets/#{beaker_set}.yml"
-
- puts beaker_set if File.exists? filename
- end
- end
+desc 'Generate REFERENCE.md'
+task :reference, [:debug, :backtrace] do |t, args|
+ patterns = ''
+ Rake::Task['strings:generate:reference'].invoke(patterns, args[:debug], args[:backtrace])
end
begin
require 'github_changelog_generator/task'
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
version = (Blacksmith::Modulefile.new).version
config.future_release = "v#{version}" if version =~ /^\d+\.\d+.\d+$/
config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module."
config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog}
config.user = 'voxpupuli'
metadata_json = File.join(File.dirname(__FILE__), 'metadata.json')
metadata = JSON.load(File.read(metadata_json))
config.project = metadata['name']
end
+
+ # Workaround for https://github.com/github-changelog-generator/github-changelog-generator/issues/715
+ require 'rbconfig'
+ if RbConfig::CONFIG['host_os'] =~ /linux/
+ task :changelog do
+ puts 'Fixing line endings...'
+ changelog_file = File.join(__dir__, 'CHANGELOG.md')
+ changelog_txt = File.read(changelog_file)
+ new_contents = changelog_txt.gsub(%r{\r\n}, "\n")
+ File.open(changelog_file, "w") {|file| file.puts new_contents }
+ end
+ end
+
rescue LoadError
end
# vim: syntax=ruby
diff --git a/spec/default_facts.yml b/spec/default_facts.yml
deleted file mode 100644
index 2f6698d..0000000
--- a/spec/default_facts.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# use default_module_facts.yaml for module specific
-# facts.
-#
-# Hint if using with rspec-puppet-facts ("on_supported_os.each"):
-# if a same named fact exists in facterdb it will be overridden.
----
-ipaddress: "172.16.254.254"
-is_pe: false
-macaddress: "AA:AA:AA:AA:AA:AA"
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index ca1028d..f4fda54 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,38 +1,65 @@
# This file is managed via modulesync
# https://github.com/voxpupuli/modulesync
# https://github.com/voxpupuli/modulesync_config
RSpec.configure do |c|
c.mock_with :mocha
end
require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet-facts'
+require 'bundler'
include RspecPuppetFacts
+if ENV['DEBUG']
+ Puppet::Util::Log.level = :debug
+ Puppet::Util::Log.newdestination(:console)
+end
+
+if File.exist?(File.join(__dir__, 'default_module_facts.yml'))
+ facts = YAML.load(File.read(File.join(__dir__, 'default_module_facts.yml')))
+ if facts
+ facts.each do |name, value|
+ add_custom_fact name.to_sym, value
+ end
+ end
+end
+
if Dir.exist?(File.expand_path('../../lib', __FILE__))
require 'coveralls'
require 'simplecov'
require 'simplecov-console'
SimpleCov.formatters = [
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::Console
]
SimpleCov.start do
track_files 'lib/**/*.rb'
add_filter '/spec'
add_filter '/vendor'
add_filter '/.vendor'
+ add_filter Bundler.configured_bundle_path.path
end
end
RSpec.configure do |c|
- default_facts = {}
- default_facts.merge!(YAML.load(File.read(File.expand_path('../default_facts.yml', __FILE__)))) if File.exist?(File.expand_path('../default_facts.yml', __FILE__))
- default_facts.merge!(YAML.load(File.read(File.expand_path('../default_module_facts.yml', __FILE__)))) if File.exist?(File.expand_path('../default_module_facts.yml', __FILE__))
- c.default_facts = default_facts
+ # getting the correct facter version is tricky. We use facterdb as a source to mock facts
+ # see https://github.com/camptocamp/facterdb
+ # people might provide a specific facter version. In that case we use it.
+ # Otherwise we need to match the correct facter version to the used puppet version.
+ # as of 2019-10-31, puppet 5 ships facter 3.11 and puppet 6 ships facter 3.14
+ # https://puppet.com/docs/puppet/5.5/about_agent.html
+ #
+ # The environment variable `PUPPET_VERSION` is available in our travis environment, but we cannot rely on it
+ # if somebody runs the tests locally. For that case we should fallback the the puppet gem version.
+ c.default_facter_version = if ENV['FACTERDB_FACTS_VERSION']
+ ENV['FACTERDB_FACTS_VERSION']
+ else
+ puppet_version = ENV['PUPPET_VERSION'] ? ENV['PUPPET_VERSION'] : Gem.loaded_specs['puppet'].version.to_s
+ Gem::Dependency.new('', puppet_version).match?('', '5') ? '3.11.0' : '3.14.0'
+ end
# Coverage generation
c.after(:suite) do
RSpec::Puppet::Coverage.report!
end
end