diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 38cacd4e..2240a970 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,3 +1,18 @@ +# 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. @@ -8,29 +23,92 @@ 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 @@ -75,13 +153,15 @@ BUNDLE_JOBS="$(nproc)" ### Note for OS X users -`nproc` isn't a valid command unter OS x. As an alternative, you can do: +`nproc` isn't a valid command under OS x. As an alternative, you can do: ```sh --jobs "$(sysctl -n hw.ncpu)" ``` -## Syntax and style +## 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 @@ -99,7 +179,7 @@ against it. You can run those locally ahead of time with: 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 @@ -124,7 +204,7 @@ To run a specific spec test set the `SPEC` variable: 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. @@ -139,7 +219,7 @@ 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 @@ -176,18 +256,20 @@ 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: ```sh -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 +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: diff --git a/.msync.yml b/.msync.yml index 23dfa32f..8864fc09 100644 --- a/.msync.yml +++ b/.msync.yml @@ -1 +1 @@ -modulesync_config_version: '2.8.0' +modulesync_config_version: '2.12.0' diff --git a/.rubocop.yml b/.rubocop.yml index 099a11c5..c2ebc88d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,6 @@ require: rubocop-rspec AllCops: +# Puppet Server 5 defaults to jruby 1.7 so TargetRubyVersion must stay at 1.9 until we drop support for puppet 5 TargetRubyVersion: 1.9 Include: - ./**/*.rb diff --git a/.travis.yml b/.travis.yml index 25e23772..7c68c59c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,9 @@ --- -dist: xenial +dist: bionic language: ruby cache: bundler before_install: - - gem update --system - - gem update bundler + - yes | gem update --system - bundle --version script: - 'bundle exec rake $CHECK' @@ -25,19 +24,19 @@ matrix: env: PUPPET_VERSION="~> 5.0" CHECK=build DEPLOY_TO_FORGE=yes - rvm: 2.5.3 bundler_args: --without development release - env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker + env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker services: docker - rvm: 2.5.3 bundler_args: --without development release - env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker + env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker services: docker - rvm: 2.5.3 bundler_args: --without development release - env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian9-64 BEAKER_HYPERVISOR=docker CHECK=beaker + env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian9-64 BEAKER_HYPERVISOR=docker CHECK=beaker services: docker - rvm: 2.5.3 bundler_args: --without development release - env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=debian9-64 BEAKER_HYPERVISOR=docker CHECK=beaker + env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=debian9-64 BEAKER_HYPERVISOR=docker CHECK=beaker services: docker branches: only: @@ -45,6 +44,7 @@ branches: - /^v\d/ notifications: email: false + webhooks: https://voxpupu.li/incoming/travis irc: on_success: always on_failure: always diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 00deb27d..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,96 +0,0 @@ -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 quicker. - - -## 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. Run the tests. We only take pull requests with passing tests, and - documentation. - -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 the 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. - -## 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: - - export PUPPET_VERSION="~> 4.2.0" - -Install the dependencies like so... - - bundle install - -## 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: - - bundle exec rake lint - bundle exec rake validate - -## 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 your all the unit tests - - bundle exec rake spec SPEC_OPTS='--format documentation' - -To run a specific spec test set the `SPEC` variable: - - bundle exec rake spec SPEC=spec/foo_spec.rb - -To run the linter, the syntax checker and the unit tests: - - bundle exec rake test - - -## 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: - - bundle exec rake acceptance - -This will run the tests on an Ubuntu 12.04 virtual machine. You can also -run the integration tests against Centos 6.5 with. - - BEAKER_set=centos-64-x64 bundle exec rake acceptances - -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_fies`. - diff --git a/Dockerfile b/Dockerfile index 67048bb4..6fd63422 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ RUN bundle install --without system_tests development release --path=${BUNDLE_PA 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 9571ef3c..11c85584 100644 --- a/Gemfile +++ b/Gemfile @@ -11,25 +11,9 @@ def location_for(place, fake_version = nil) end group :test do - gem 'puppetlabs_spec_helper', '>= 2.14.0', :require => false - gem 'rspec-puppet-facts', '>= 1.8.0', :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-topscope-variable-check', :require => false - gem 'metadata-json-lint', :require => false - gem 'redcarpet', :require => false - 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 'parallel_tests', :require => false + gem 'voxpupuli-test', '>= 1.0.0', :require => false + gem 'coveralls', :require => false + gem 'simplecov-console', :require => false end group :development do @@ -60,12 +44,13 @@ group :system_tests do 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' + 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 'voxpupuli-release', :require => false gem 'puppet-strings', '>= 2.2', :require => false end diff --git a/Rakefile b/Rakefile index 09701d0f..b450fe7b 100644 --- a/Rakefile +++ b/Rakefile @@ -1,4 +1,4 @@ -require 'puppetlabs_spec_helper/rake_tasks' +require 'voxpupuli/test/rake' # load optional tasks for releases # only available if gem group releases is installed @@ -7,47 +7,6 @@ begin rescue LoadError end -PuppetLint.configuration.log_format = '%{path}:%{line}:%{check}:%{KIND}:%{message}' -PuppetLint.configuration.absolute_classname_reverse = true - -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 - 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' -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__)) @@ -77,6 +36,19 @@ begin 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/manifests/init.pp b/manifests/init.pp index 48208e53..2ca487e1 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -48,7 +48,7 @@ $server_package = $gluster::params::server_package, $use_exported_resources = $gluster::params::export_resources, $version = $gluster::params::version, - Optional[Hash] $volumes = undef, + Hash[String, Any] $volumes = {}, ) inherits ::gluster::params { class { 'gluster::install': @@ -68,7 +68,7 @@ if $use_exported_resources { # first we export this server's instance - @@gluster::peer { $::fqdn: + @@gluster::peer { $facts['networking']['fqdn']: pool => $pool, } @@ -76,8 +76,10 @@ Gluster::Peer <<| pool == $pool |>> } - if $volumes { - create_resources( ::gluster::volume, $volumes ) + $volumes.each |$volume, $options| { + gluster::volume { $volume: + * => $options, + } } } } diff --git a/manifests/params.pp b/manifests/params.pp index fb73d453..6d4dffec 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -18,17 +18,17 @@ # Set distro/release specific names, repo versions, repo gpg keys, package versions, etc # if the user didn't specify a version, just use "installed" for package version. # if they did specify a version, assume they provided a valid one - case $::osfamily { + case $facts['os']['family'] { 'RedHat': { $repo = true $repo_gpg_key_source = 'https://raw.githubusercontent.com/CentOS-Storage-SIG/centos-release-storage-common/master/RPM-GPG-KEY-CentOS-SIG-Storage' - $server_package = $::operatingsystemmajrelease ? { + $server_package = $facts['os']['release']['major'] ? { # RHEL 6 and 7 provide Gluster packages natively /(6|7)/ => 'glusterfs-server', default => false } - $client_package = $::operatingsystemmajrelease ? { + $client_package = $facts['os']['release']['major'] ? { /(6|7)/ => 'glusterfs-fuse', default => false, } diff --git a/manifests/peer.pp b/manifests/peer.pp index 14474045..c2f95679 100644 --- a/manifests/peer.pp +++ b/manifests/peer.pp @@ -36,7 +36,7 @@ # define gluster::peer ( $pool = 'default', - $fqdn = $::fqdn, + $fqdn = $facts['networking']['fqdn'], ) { # we can't do much without the Gluster binary @@ -45,7 +45,7 @@ if getvar('::gluster_binary') { # we can't join to ourselves, so it only makes sense to operate # on other gluster servers in the same pool - if $fqdn != $::fqdn { + if $fqdn != $facts['networking']['fqdn'] { # and we don't want to attach a server that is already a member # of the current pool diff --git a/manifests/repo.pp b/manifests/repo.pp index 35c07608..f42085f3 100644 --- a/manifests/repo.pp +++ b/manifests/repo.pp @@ -19,7 +19,7 @@ $release = $gluster::params::release, $version = $gluster::params::version, ) inherits gluster::params { - case $::osfamily { + case $facts['os']['family'] { 'RedHat': { class { 'gluster::repo::yum': release => $release, @@ -30,6 +30,6 @@ version => $version, } } - default: { fail("${::osfamily} not yet supported!") } + default: { fail("${facts['os']['family']} not yet supported!") } } } diff --git a/manifests/repo/apt.pp b/manifests/repo/apt.pp index d8262718..a0146f9a 100644 --- a/manifests/repo/apt.pp +++ b/manifests/repo/apt.pp @@ -51,15 +51,15 @@ } elsif $version =~ /^(\d)\.(\d+)\.(\d+).*$/ { $repo_ver = "${1}.${2}/${1}.${2}.${3}" } else { - fail("${version} doesn't make sense for ${::operatingsystem}!") + fail("${version} doesn't make sense for ${facts['os']['name']}!") } # the Gluster repo only supports x86_64 (amd64) and arm64. The Ubuntu PPA also supports armhf and arm64. - case $::operatingsystem { + case $facts['os']['name'] { 'Debian': { - case $::lsbdistcodename { + case $facts['os']['distro']['codename'] { 'jessie', 'stretch': { - $arch = $::architecture ? { + $arch = $facts['os']['architecture'] ? { 'amd64' => 'amd64', 'arm64' => 'arm64', default => false, @@ -67,14 +67,14 @@ $_repo_base = 'https://download.gluster.org/pub/gluster/glusterfs' $repo_url = if versioncmp($release, '4.1') < 0 { - "${_repo_base}/01.old-releases/${release}/LATEST/Debian/${::lsbdistcodename}/${arch}/apt/" + "${_repo_base}/01.old-releases/${release}/LATEST/Debian/${facts['os']['distro']['codename']}/${arch}/apt/" } else { $_release = if $release == '4.1' { $release } else { $release[0] } - "${_repo_base}/${_release}/LATEST/Debian/${::lsbdistcodename}/${arch}/apt/" + "${_repo_base}/${_release}/LATEST/Debian/${facts['os']['distro']['codename']}/${arch}/apt/" } } default: { @@ -88,14 +88,14 @@ } unless $arch { - fail("Architecture ${::architecture} not yet supported for ${::operatingsystem}.") + fail("Architecture ${facts['os']['architecture']} not yet supported for ${facts['os']['name']}.") } $repo = { "glusterfs-${version}" => { ensure => present, location => $repo_url, - release => $::lsbdistcodename, + release => $facts['os']['distro']['codename'], repos => 'main', key => { id => $repo_key_name, diff --git a/manifests/repo/yum.pp b/manifests/repo/yum.pp index ac7ff714..343e10fc 100644 --- a/manifests/repo/yum.pp +++ b/manifests/repo/yum.pp @@ -21,15 +21,15 @@ ) inherits gluster::params { # CentOS Gluster repo only supports x86_64 - if $::architecture != 'x86_64' { - fail("Architecture ${::architecture} not yet supported for ${::operatingsystem}.") + if $facts['os']['architecture'] != 'x86_64' { + fail("Architecture ${facts['os']['architecture']} not yet supported for ${facts['os']['name']}.") } if $priority { if ! defined( Package['yum-plugin-priorities'] ) { package { 'yum-plugin-priorities': ensure => installed, - before => Yumrepo["glusterfs-${::architecture}"], + before => Yumrepo["glusterfs-${facts['os']['architecture']}"], } } } @@ -40,15 +40,15 @@ $release[0] } - yumrepo { "glusterfs-${::architecture}": + yumrepo { "glusterfs-${facts['os']['architecture']}": enabled => 1, - baseurl => "http://mirror.centos.org/centos/${::operatingsystemmajrelease}/storage/${::architecture}/gluster-${_release}/", - descr => "CentOS-${::operatingsystemmajrelease} - Gluster ${_release}", + baseurl => "http://mirror.centos.org/centos/${facts['os']['release']['major']}/storage/${facts['os']['architecture']}/gluster-${_release}/", + descr => "CentOS-${facts['os']['release']['major']} - Gluster ${_release}", gpgcheck => 1, gpgkey => $repo_key_source, priority => $priority, } - Yumrepo["glusterfs-${::architecture}"] -> Package<| tag == 'gluster-packages' |> + Yumrepo["glusterfs-${facts['os']['architecture']}"] -> Package<| tag == 'gluster-packages' |> } diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb index b4a8ab42..6a4650fb 100644 --- a/spec/classes/init_spec.rb +++ b/spec/classes/init_spec.rb @@ -179,9 +179,7 @@ end it 'fails' do - expect do - is_expected.to contain_gluster__volume('data1') - end.to raise_error(Puppet::Error, %r{}) + is_expected.to compile.and_raise_error(%r{Expected value of type Hash, got Array}) end end end diff --git a/spec/classes/install_spec.rb b/spec/classes/install_spec.rb index d8320dd7..f44c250a 100644 --- a/spec/classes/install_spec.rb +++ b/spec/classes/install_spec.rb @@ -56,16 +56,17 @@ end context 'installing on an unsupported architecture' do let :facts do - super().merge( - architecture: 'zLinux' - ) + # deep_merge modifies facts in place + facts = super().dup + facts[:os] = facts[:os].merge(architecture: 'zLinux') + facts end case facts[:osfamily] when 'Archlinux', 'Suse' it { is_expected.not_to create_class('gluster::repo') } else - it { is_expected.to raise_error(Puppet::Error, %r{not yet supported}) } + it { is_expected.to compile.and_raise_error(%r{not yet supported}) } end end end diff --git a/spec/classes/repo_apt_spec.rb b/spec/classes/repo_apt_spec.rb index e385f579..82b8d8e2 100644 --- a/spec/classes/repo_apt_spec.rb +++ b/spec/classes/repo_apt_spec.rb @@ -1,96 +1,90 @@ require 'spec_helper' describe 'gluster::repo::apt', type: :class do - on_supported_os.each do |os, facts| - context "on #{os}" do - let(:facts) do - facts - end - let :pre_condition do - 'require ::gluster::params' + on_supported_os.each do |os, os_facts| + context "on #{os}", if: os_facts[:os]['family'] == 'Debian' do + let(:facts) { os_facts } + let(:pre_condition) { 'require gluster::params' } + + context 'with all defaults' do + it { is_expected.to contain_class('gluster::repo::apt') } + it { is_expected.to compile.with_all_deps } + it 'installs' do + is_expected.to contain_apt__source('glusterfs-LATEST').with( + repos: 'main', + release: facts[:lsbdistcodename].to_s, + location: "https://download.gluster.org/pub/gluster/glusterfs/7/LATEST/Debian/#{facts[:lsbdistcodename]}/#{facts[:architecture]}/apt/" + ) + end end - case facts[:osfamily] - when 'Debian' - context 'with all defaults' do - it { is_expected.to contain_class('gluster::repo::apt') } - it { is_expected.to compile.with_all_deps } - it 'installs' do - is_expected.to contain_apt__source('glusterfs-LATEST').with( - repos: 'main', - release: facts[:lsbdistcodename].to_s, - location: "https://download.gluster.org/pub/gluster/glusterfs/7/LATEST/Debian/#{facts[:lsbdistcodename]}/#{facts[:architecture]}/apt/" - ) - end + context 'unsupported architecture' do + let(:facts) do + # deep_merge modifies the facts in place + facts = super().dup + facts[:os] = facts[:os].merge(architecture: 'zLinux') + facts + end + + it 'does not install' do + is_expected.to compile.and_raise_error(%r{Architecture zLinux not yet supported}) end - context 'unsupported architecture' do - let :facts do - super().merge( - architecture: 'zLinux' - ) - end + end - it 'does not install' do - expect do - is_expected.to create_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-gluster.pub') - end.to raise_error(Puppet::Error, %r{not yet supported}) - end + context 'latest Gluster with priority' do + let :params do + { + priority: '700' + } end - context 'latest Gluster with priority' do - let :params do - { - priority: '700' - } - end - it 'installs' do - is_expected.to contain_apt__source('glusterfs-LATEST').with( - repos: 'main', - release: facts[:lsbdistcodename].to_s, - location: "https://download.gluster.org/pub/gluster/glusterfs/7/LATEST/Debian/#{facts[:lsbdistcodename]}/#{facts[:architecture]}/apt/", - pin: '700' - ) - end + it 'installs' do + is_expected.to contain_apt__source('glusterfs-LATEST').with( + repos: 'main', + release: facts[:lsbdistcodename].to_s, + location: "https://download.gluster.org/pub/gluster/glusterfs/7/LATEST/Debian/#{facts[:lsbdistcodename]}/#{facts[:architecture]}/apt/", + pin: '700' + ) end + end - context 'Specific Gluster release 4.1' do - let :params do - { - release: '4.1' - } - end + context 'Specific Gluster release 4.1' do + let :params do + { + release: '4.1' + } + end - it 'installs' do - is_expected.to contain_apt__source('glusterfs-LATEST').with( - repos: 'main', - release: facts[:lsbdistcodename].to_s, - key: { - 'id' => 'EED3351AFD72E5437C050F0388F6CDEE78FA6D97', - 'key_source' => 'https://download.gluster.org/pub/gluster/glusterfs/4.1/rsa.pub' - }, - location: "https://download.gluster.org/pub/gluster/glusterfs/4.1/LATEST/Debian/#{facts[:lsbdistcodename]}/amd64/apt/" - ) - end + it 'installs' do + is_expected.to contain_apt__source('glusterfs-LATEST').with( + repos: 'main', + release: facts[:lsbdistcodename].to_s, + key: { + 'id' => 'EED3351AFD72E5437C050F0388F6CDEE78FA6D97', + 'key_source' => 'https://download.gluster.org/pub/gluster/glusterfs/4.1/rsa.pub' + }, + location: "https://download.gluster.org/pub/gluster/glusterfs/4.1/LATEST/Debian/#{facts[:lsbdistcodename]}/amd64/apt/" + ) end + end - context 'Specific Gluster release 3.12' do - let :params do - { - release: '3.12' - } - end + context 'Specific Gluster release 3.12' do + let :params do + { + release: '3.12' + } + end - it 'installs' do - is_expected.to contain_apt__source('glusterfs-LATEST').with( - repos: 'main', - release: facts[:lsbdistcodename].to_s, - key: { - 'id' => '8B7C364430B66F0B084C0B0C55339A4C6A7BD8D4', - 'key_source' => 'https://download.gluster.org/pub/gluster/glusterfs/3.12/rsa.pub' - }, - location: "https://download.gluster.org/pub/gluster/glusterfs/01.old-releases/3.12/LATEST/Debian/#{facts[:lsbdistcodename]}/amd64/apt/" - ) - end + it 'installs' do + is_expected.to contain_apt__source('glusterfs-LATEST').with( + repos: 'main', + release: facts[:lsbdistcodename].to_s, + key: { + 'id' => '8B7C364430B66F0B084C0B0C55339A4C6A7BD8D4', + 'key_source' => 'https://download.gluster.org/pub/gluster/glusterfs/3.12/rsa.pub' + }, + location: "https://download.gluster.org/pub/gluster/glusterfs/01.old-releases/3.12/LATEST/Debian/#{facts[:lsbdistcodename]}/amd64/apt/" + ) end end end diff --git a/spec/classes/repo_yum_spec.rb b/spec/classes/repo_yum_spec.rb index 86ae32cd..795baaa2 100644 --- a/spec/classes/repo_yum_spec.rb +++ b/spec/classes/repo_yum_spec.rb @@ -30,9 +30,7 @@ end it 'does not install' do - expect do - is_expected.to create_file('/etc/yum.repos.d/glusterfs-x86_64.repo') - end.to raise_error(Puppet::Error, %r{doesn't make sense!}) + is_expected.to compile.and_raise_error(%r{doesn't make sense!}) end end context 'unsupported architecture' do @@ -43,9 +41,7 @@ end it 'does not install' do - expect do - is_expected.to create_file('/etc/yum.repos.d/glusterfs-x86_64.repo') - end.to raise_error(Puppet::Error, %r{not yet supported}) + is_expected.to compile.and_raise_error(%r{not yet supported}) end end context 'latest Gluster with priority' do diff --git a/spec/defines/peer_spec.rb b/spec/defines/peer_spec.rb index 340c5f4b..db22f619 100644 --- a/spec/defines/peer_spec.rb +++ b/spec/defines/peer_spec.rb @@ -99,7 +99,9 @@ gluster_binary: '/usr/sbin/gluster', gluster_peer_count: 0, gluster_peer_list: '', - fqdn: 'peer1.example.com' + networking: { + fqdn: 'peer1.example.com' + } } end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f16fb152..b2b27045 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,14 +1,12 @@ # This file is managed via modulesync # https://github.com/voxpupuli/modulesync # https://github.com/voxpupuli/modulesync_config -RSpec.configure do |c| - c.mock_with :rspec -end -require 'puppetlabs_spec_helper/module_spec_helper' -require 'rspec-puppet-facts' -require 'bundler' -include RspecPuppetFacts +# puppetlabs_spec_helper will set up coverage if the env variable is set. +# We want to do this if lib exists and it hasn't been explicitly set. +ENV['COVERAGE'] ||= 'yes' if Dir.exist?(File.expand_path('../../lib', __FILE__)) + +require 'voxpupuli/test/spec_helper' if File.exist?(File.join(__dir__, 'default_module_facts.yml')) facts = YAML.load(File.read(File.join(__dir__, 'default_module_facts.yml'))) @@ -18,27 +16,3 @@ 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| - # Coverage generation - c.after(:suite) do - RSpec::Puppet::Coverage.report! - end -end