simp-beaker-helpers 1.18.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.fixtures.yml +8 -0
  3. data/.gitignore +8 -0
  4. data/.gitlab-ci.yml +163 -0
  5. data/.rspec +4 -0
  6. data/.rubocop.yml +546 -0
  7. data/.travis.yml +36 -0
  8. data/CHANGELOG.md +231 -0
  9. data/Gemfile +51 -0
  10. data/LICENSE +27 -0
  11. data/README.md +543 -0
  12. data/Rakefile +151 -0
  13. data/files/pki/clean.sh +1 -0
  14. data/files/pki/make.sh +101 -0
  15. data/files/pki/template_ca.cnf +259 -0
  16. data/files/pki/template_host.cnf +263 -0
  17. data/files/puppet-agent-versions.yaml +46 -0
  18. data/lib/simp/beaker_helpers.rb +1231 -0
  19. data/lib/simp/beaker_helpers/constants.rb +25 -0
  20. data/lib/simp/beaker_helpers/inspec.rb +328 -0
  21. data/lib/simp/beaker_helpers/snapshot.rb +156 -0
  22. data/lib/simp/beaker_helpers/ssg.rb +383 -0
  23. data/lib/simp/beaker_helpers/version.rb +5 -0
  24. data/lib/simp/beaker_helpers/windows.rb +16 -0
  25. data/lib/simp/rake/beaker.rb +269 -0
  26. data/simp-beaker-helpers.gemspec +38 -0
  27. data/spec/acceptance/nodesets/default.yml +32 -0
  28. data/spec/acceptance/suites/default/check_puppet_version_spec.rb +23 -0
  29. data/spec/acceptance/suites/default/enable_fips_spec.rb +23 -0
  30. data/spec/acceptance/suites/default/fixture_modules_spec.rb +22 -0
  31. data/spec/acceptance/suites/default/install_simp_deps_repo_spec.rb +43 -0
  32. data/spec/acceptance/suites/default/nodesets +1 -0
  33. data/spec/acceptance/suites/default/pki_tests_spec.rb +55 -0
  34. data/spec/acceptance/suites/default/set_hieradata_on_spec.rb +33 -0
  35. data/spec/acceptance/suites/default/write_hieradata_to_spec.rb +33 -0
  36. data/spec/acceptance/suites/fips_from_fixtures/00_default_spec.rb +63 -0
  37. data/spec/acceptance/suites/fips_from_fixtures/metadata.yml +2 -0
  38. data/spec/acceptance/suites/fips_from_fixtures/nodesets +1 -0
  39. data/spec/acceptance/suites/offline/00_default_spec.rb +165 -0
  40. data/spec/acceptance/suites/offline/README +2 -0
  41. data/spec/acceptance/suites/offline/nodesets/default.yml +26 -0
  42. data/spec/acceptance/suites/puppet_collections/00_default_spec.rb +25 -0
  43. data/spec/acceptance/suites/puppet_collections/metadata.yml +2 -0
  44. data/spec/acceptance/suites/puppet_collections/nodesets/default.yml +30 -0
  45. data/spec/acceptance/suites/snapshot/00_snapshot_test_spec.rb +82 -0
  46. data/spec/acceptance/suites/snapshot/10_general_usage_spec.rb +56 -0
  47. data/spec/acceptance/suites/snapshot/nodesets +1 -0
  48. data/spec/acceptance/suites/windows/00_default_spec.rb +119 -0
  49. data/spec/acceptance/suites/windows/metadata.yml +2 -0
  50. data/spec/acceptance/suites/windows/nodesets/default.yml +33 -0
  51. data/spec/acceptance/suites/windows/nodesets/win2016.yml +35 -0
  52. data/spec/acceptance/suites/windows/nodesets/win2019.yml +34 -0
  53. data/spec/lib/simp/beaker_helpers_spec.rb +216 -0
  54. data/spec/spec_helper.rb +100 -0
  55. data/spec/spec_helper_acceptance.rb +25 -0
  56. metadata +243 -0
@@ -0,0 +1,36 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ sudo: false
5
+ before_install:
6
+ - rm Gemfile.lock || true
7
+ bundler_args: "--without development --path .vendor"
8
+ notifications:
9
+ email: false
10
+ rvm:
11
+ - 2.4.4
12
+ env:
13
+ - SIMP_SKIP_NON_SIMPOS_TESTS=1
14
+ script:
15
+ - bundle exec rake spec
16
+ before_deploy:
17
+ - bundle exec rake clobber
18
+ - "export GEM_VERSION=`ruby -r ./lib/simp/beaker_helpers/version.rb -e 'puts Simp::BeakerHelpers::VERSION'`"
19
+ - '[[ $TRAVIS_TAG =~ ^${GEM_VERSION}$ ]]'
20
+ deploy:
21
+ - provider: rubygems
22
+ gemspec: simp-beaker-helpers.gemspec
23
+ gem: simp-beaker-helpers
24
+ api_key:
25
+ secure: "AlnBx0dBSxn+S97n0h14ltKUOA+6v0bc7QZPIcwGJV9nnf1hKH3pf9La1TVknEx7XgpAcM9jusQJ7hBlqvSq8z8SFF0bZk1EgSRIKc1cuYPLiGyUM2O7+AFHyCy3iCnPvKeoQmE/BJb5O1dGnbmSbf4A0fqLxA7jiHG1j7z+cnmJB1i67wovDfl13TsOXyBfbespWBMMc0BKAw56FPs9XggAk2cNusS3hd5tqW1AZPT2/xwt+d8ngkmO96u8QcichYRFQ+w+XW4H0w935wNg/dWiskJlt7TIYVAh4Ko5s2DZKf52Tne8TugALSn0LhRatpp7sw1FTTpteCW8UqK8uwGC2hM4pZViAOv4P1YObz2IPOZPriBl+cCayJdMKnotkUJliAMnw5TLiSWKLou+S0Pdj2h3fJZWdOEwRPMzIVoJtsOHG3GdNcPL6f7iU0vP/wr6FeR3uWa+fA7NHRi2Du955O8JpogjdrW08ahcAEwhtI3A4mrA08wN09axsrwr093uDRm/5h4FHyAhExJ0YiA/6kcPpUvILcLStyHe0RQDICQMdsQo2DSbnL65w3QjFa2fML2Shf9cRwX06+ia2BxozWzFD/6p3RiRtPxphnbFiUdjYSGWcwCcUgbJx9SW04lSSxOhpyItuXgxZqiybkzstXd6riu5zwg1R8TWk34="
26
+ on:
27
+ tags: true
28
+ rvm: 2.4.4
29
+ condition: "($SKIP_PUBLISH != true)"
30
+ - provider: releases
31
+ api_key:
32
+ secure: "I41p4aqjkrNDHJhZ5gWC4gzn7BVwEYRm5Q3PAxQRSIUDB/QTVgNqZx8YptkuIvSGpw8kIywyZg3NKdzGUO8aJJ0NlXapL7e9qQIigkYhdaCZjZFG5zIxdOFs4sVoz/6vnQT9JIcGWy7uS5xiNOulGvfEWU78+e+I9yPdT74RApve5VAVT/km5lV5ldRnwwehLnTx+volUlnOD8rwfizoVLqFTrfRfr4cVMF605UYyaiVxHF50hywFRZoAdVcMEhlLQnQXfz/ZsLMJLJm9eCpjQ989N0oX6theSLCcv7QtHcWMXydjWMcpuTfBZSFrwUVbC23uMOKTJVEWq5LMG3m2L6hP3//2gvUzGhOVLvoGuC+erboB7QoXdcoOgXY+dTZPMcPBxpArdDLWVQSLTvPs05QzpaUdRLVMC/kD1d1EudlEicgkNgNDBhBn3089nVmvKndbKLvj+23a5AQVVbs+8C0x+SJvTc9N2N+bmuH7jIJPrEvWK4xwcQa+g2M/EBv05jaEdSErlVa6B6UKCH0Lea9rpy1se9vn5OzpaaMCCJIpcpQqHDjo0PMAQXBSbqjKcBei6lR5fIFl5UO9gWP1v8PGPuCzGTBivQ92XlgV1TWXmdbJHwIuSbJx3Ali7Wp19RR4E4uHC+TPFssvgkh9ZLkORnWWS35wzzU1LkwWx0="
33
+ on:
34
+ tags: true
35
+ rvm: 2.4.4
36
+ condition: "($SKIP_PUBLISH != true)"
@@ -0,0 +1,231 @@
1
+ ### 1.18.8 / 2020-07-14
2
+ * Allow the beaker version to be pinned by environment variable
3
+
4
+ ### 1.18.7 / 2020-07-07
5
+ * Fix host reference bug when switching to FIPS mode
6
+ * Ensure that net-ssh 6+ can access older FIPS systems
7
+
8
+ ### 1.18.6 / 2020-06-24
9
+ * Fix Vagrant snapshot issues
10
+
11
+ ### 1.18.5 / 2020-06-24
12
+ * Allow Vagrant to connect to EL8+ hosts in FIPS mode
13
+ * Add EL8 support to the SSG scans
14
+
15
+ ### 1.18.4 / 2020-03-31
16
+ * Fix capturing error messages when inspec fails to generate results
17
+
18
+ ### 1.18.3 / 2020-02-24
19
+ * Fix the Windows library loading location.
20
+ * No longer attempt to load windows libraries by default unless the system is
21
+ actually Windows
22
+
23
+ ### 1.18.2 / 2020-02-24
24
+
25
+ * The previous location for loading the Windows libraries would not work in a
26
+ `:before` block. This moves it into its own module space.
27
+ * Bump to the working version of beaker and beaker-puppet
28
+
29
+ ### 1.18.1 / 2020-02-12
30
+ * Fix gemspec dependencies
31
+ * Fix the windows library loading location
32
+
33
+ ### 1.18.0 / 2020-02-06
34
+ * Update Windows support
35
+ * Add require beaker-windows and note installation of gem if missing
36
+ * Add geotrust global CA certificate in fix_eratta_on
37
+ * Added convenience helper methods
38
+ * Add puppet_environment_path_on
39
+ * Add file_content_on which is multi-platform safe unlike the built-in
40
+ file_contents_on
41
+ * Add hiera_config_path_on
42
+ * Add get_hiera_config_on
43
+ * Add set_hiera_config_on
44
+
45
+ ### 1.17.1 / 2019-11-01
46
+ * Only pull in the beaker rake tasks from the puppetlabs helpers
47
+
48
+ ### 1.17.0 / 2019-10-22
49
+ * Allow users to perform exclusion filters on SSG results
50
+ * Allow users to pass Arrays of items to match for SSG results
51
+
52
+ ### 1.16.2 / 2019-10-10
53
+ * Pull latest inspec package now that the upstream bug is fixed
54
+
55
+ ### 1.16.1 / 2019-09-25
56
+ * Remove debugging pry that was accidentally left in
57
+
58
+ ### 1.16.0 / 2019-09-23
59
+ * Added a sosreport function to gather SOS Reports from EL systems
60
+
61
+ ### 1.15.2 / 2019-09-13
62
+ * Fix an issue where the inspec reports were not processed properly
63
+
64
+ ### 1.15.1 / 2019-08-26
65
+ * Ensure that any user on the SUT can use the RedHat entitlements
66
+
67
+ ### 1.15.0 / 2019-08-08
68
+ * Add the ability to handle registration of Red Hat hosts with the RHN.
69
+
70
+ ### 1.14.6 / 2019-08-15
71
+ * Add Windows client support to the beaker helpers functions
72
+ * Added an `is_windows?(sut)` function
73
+ * Work around issues with calling `sut.puppet` on Windows SUTs
74
+ * Update `copy_fixture_modules_to` to support Windows (slow copy)
75
+ * Add Windows support to `puppet_modulepath_on`
76
+
77
+ ### 1.14.5 / 2019-08-14
78
+ * Update the CentOS SSG hooks to properly work with CentOS 6
79
+
80
+ ### 1.14.4 / 2019-07-26
81
+ * Bump the version of Highline to 2.0+ due to bugs in the latest 1.X series
82
+
83
+ ### 1.14.3 / 2019-06-24
84
+ * Add RPM-GPG-KEY-SIMP-6 to the SIMP dependencies repo created
85
+ by install_simp_repo.
86
+
87
+ ### 1.14.2 / 2019-05-16
88
+ * Move the minimum supported puppet version to Puppet 5 since Puppet 4 has been
89
+ removed from the download servers completely. Beaker may re-add support for
90
+ the new location so not removing the mappings at this time.
91
+ * Fixed a bug where a hash item was incorrect and not properly passing along
92
+ configuration items.
93
+
94
+ ### 1.14.1 / 2019-04-15
95
+ * Handle license acceptance option needed for new versions of inspec.
96
+
97
+ ### 1.14.0 / 2019-04-08
98
+ * Added function, install_simp_repo, to install the simp online repos.
99
+ The repos are defined in a hash in the function. All the repos
100
+ will be configured and enabled. To disable one or more of them pass
101
+ in an array of names of the repos to disable.
102
+
103
+ ### 1.13.1 / 2019-02-02
104
+ * Ensure that SUTs have an FQDN set and not just a short hostname
105
+ * Work around issue where the SSG doesn't build the STIG for CentOS any longer.
106
+ * Add a work around for getting the docker SUT ID due to breaking changes in
107
+ the beaker-docker gem
108
+
109
+ ### 1.13.0 / 2018-11-09
110
+ * Make the SSG reporting consistent with the InSpec reporting
111
+ * Thanks to Liz Nemsick for the original result processing code
112
+
113
+ ### 1.12.2 / 2018-10-25
114
+ * Skip most of fix_errata_on on windows platforms
115
+
116
+ ### 1.12.1 / 2018-10-24
117
+ * Fall back to SSH file copies automatically when rsync does not work due to
118
+ test cases that affect ssh directly and that will cause new sessions to fail.
119
+
120
+ ### 1.12.0 / 2018-10-22
121
+ * When using suites, allow users to loop through multiple specified nodesets as
122
+ a colon delimited list or loop through all nodesets by passing 'ALL'.
123
+ * If 'ALL' is passed, the 'default' suite will be run first.
124
+
125
+ ### 1.11.3 / 2018-10-22
126
+ * Made the inspec report less confusing overall by noting where checks are
127
+ overridden
128
+ * Fix errors in the previous ssh key copy
129
+
130
+ ### 1.11.2 / 2018-10-11
131
+ * Copy ssh keys in home directories to simp standard '/etc/ssh/local_keys/'
132
+ to avoid error when certain simp puppet modules are applied
133
+ * Fix enable_fips_mode_on(), which no longer works on centos/7 vagrant boxes.
134
+
135
+ ### 1.11.1 / 2018-10-03
136
+ * Deprecate the 'terminus' parameter in 'write_hieradata_to' and 'set_hieradata_on'
137
+ * Add 'copy_hiera_data_to' method to replace the one from beaker-hiera
138
+ * Add 'hiera_datadir' method to replace the one from beaker-hiera
139
+ * Change InSpec to use the 'reporter' option instead of 'format'
140
+ * Update the SSG to point to the new ComplianceAsCode repository
141
+
142
+ ### 1.11.0 / 2018-10-01
143
+ * Add support for Beaker 4
144
+
145
+ ### 1.10.14 / 2018-08-01
146
+ * Pinned `net-telnet` to `~> 0.1.1` for all releases due to dropping support
147
+ for Ruby less than 2.3 in `0.2.X`. This should be removed once we drop
148
+ support for Ruby 1.9 (late October 2018).
149
+
150
+ ### 1.10.13 / 2018-07-24
151
+ * Update puppet to puppet-agent mapping table for puppet-agent 1.10.14
152
+
153
+ ### 1.10.12 / 2018-07-09
154
+ * Forced all parallelization to `false` by default due to random issues with
155
+ Beaker
156
+
157
+ ### 1.10.11 / 2018-06-25
158
+ * Pinned `fog-openstack` to `0.1.25` for all releases due to dropping support
159
+ for Ruby 1.9 in `0.1.26`. This should be removed once we drop support for
160
+ Ruby 1.9 (late October 2018)
161
+ * Added removal of `.vendor` directory which was preventing successful
162
+ deployment status in Travis CI
163
+
164
+ ### 1.10.10 / 2018-06-22
165
+ * Version bump due to being released without a git tag
166
+
167
+ ### 1.10.9 / 2018-06-22
168
+ * Ensure that the SSG is built from the latest tag instead of master
169
+ * Provide the option to pass a specific branch to the SSG builds
170
+ * Pin the suite base directory off of the global base directory instead of
171
+ local to wherever the system happens to be at the time.
172
+
173
+ ### 1.10.8 / 2018-05-18
174
+ * New env var BEAKER_no_fix_interfaces, set to skip the fix that brings up all
175
+ vagrant interfaces
176
+ * Parallelized pre-test setup actions that are used across all hosts using `block_on`
177
+ * Add runtime dependency on `highline` for the `inspec` reporting
178
+
179
+ ### 1.10.7 / 2018-05-11
180
+ * Updated README
181
+ * Changed acceptance tests to use `beaker:suites`
182
+ * Removed all Puppet 5+ mappings and updated the install method to figure out
183
+ what to use based on the available gems so that everything is now consistent
184
+
185
+ ### 1.10.6 / 2018-05-07
186
+ * Added Simp::BeakerHelpers.tmpname method to work around the removal of
187
+ Dir::Tmpname in Ruby 2.5
188
+
189
+ ### 1.10.5 / 2018-04-27
190
+ * Fix issue with direct copy to/from docker containers
191
+ * Add necessary package for SSG builds
192
+ * Added the downloaded inspec_deps directory to the clean list
193
+
194
+ ### 1.10.4 / 2018-04-25
195
+ * Fix Inspec report failures
196
+ * Fix SSG build failures
197
+ * Allow the SSG remediation acceptance test to fail
198
+
199
+ ### 1.10.3 / 2018-03-23
200
+ * Avoid warnings when using `puppet config print`
201
+
202
+ ### 1.10.2 / 2018-03-04
203
+ * Reimplemented `pluginsync_on` with a Puppet manifest to completely mimic
204
+ a native pluginsync
205
+ - Syncs _all_ assets (e.g., augeas lenses) instead of just the facts
206
+ - Simpler
207
+ - Much faster, especially with many modules or SUTs
208
+
209
+ ### 1.10.1 / 2018-02-13
210
+ * Updated the Puppet version mapping list for Puppet 5
211
+ * Fixed a bug in the way that the latest Puppet 5 version was being determined
212
+
213
+ ### 1.10.0 / 2018-01-23
214
+ * Add support for Puppet 5
215
+ * Note: you need to set 'puppet_collection' to 'puppet5' to test Puppet 5 and
216
+ 'aio' (or leave it out) to test Puppet less than 5
217
+ * Fix support for passing the 'ALL' suite to run all suites
218
+ * Updates per Rubocop
219
+
220
+ * Ensure that `rsync` is not used once `fips` is enabled on the SUT
221
+ * If `fips` is enabled on the SUT, but not the running host, rsync
222
+ connections have a high likelihood of failing
223
+
224
+ ### 1.9.0 / 2018-01-01
225
+ * Ensure that all host IP addresses get added to the internally generated PKI
226
+ keys as subjectAltNames. Kubernetes needs this and it does not hurt to have
227
+ in place for testing.
228
+
229
+ ### 1.8.10 / 2017-11-02
230
+ * Fix bug in which dracut was not run on CentOS6, when dracut-fips was
231
+ installed for a FIPS-enabled test.
data/Gemfile ADDED
@@ -0,0 +1,51 @@
1
+ # ------------------------------------------------------------------------------
2
+ # NOTE: SIMP Puppet rake tasks support ruby 2.1.9
3
+ # ------------------------------------------------------------------------------
4
+ gem_sources = ENV.fetch('GEM_SERVERS','https://rubygems.org').split(/[, ]+/)
5
+
6
+ gem_sources.each { |gem_source| source gem_source }
7
+
8
+ # read dependencies in from the gemspec
9
+ gemspec
10
+
11
+ # mandatory gems
12
+ gem 'bundler'
13
+ gem 'rake'
14
+
15
+ group :system_tests do
16
+ beaker_gem_options = ENV.fetch('BEAKER_GEM_OPTIONS', ['>= 4.17.0', '< 5.0.0'])
17
+
18
+ if "#{beaker_gem_options}".include?(':')
19
+ # Just pass in BEAKER_GEM_OPTIONS as a string that would represent the usual
20
+ # hash of options.
21
+ #
22
+ # Something like: BEAKER_GEM_OPTIONS=':git => "https://my.repo/beaker.git", :tag => "1.2.3"'
23
+ #
24
+ # No, this isn't robust, but it's not really an 'every day' sort of thing
25
+ # and safer than an `eval`
26
+ begin
27
+ gem 'beaker', Hash[
28
+ beaker_gem_options.split(',').map do |x| # Split passed options on k/v pairs
29
+ x.gsub('"', '').strip.split(/:\s|\s+=>\s+/) # Allow for either format hash keys
30
+ end.map do |k,v|
31
+ [
32
+ k.delete(':').to_sym, # Convert all keys to symbols
33
+ v.strip
34
+ ]
35
+ end
36
+ ] # Convert the whole thing to a valid Hash
37
+ rescue => e
38
+ raise "Invalid BEAKER_GEM_OPTIONS: '#{beaker_gem_options}' => '#{e}'"
39
+ end
40
+ else
41
+ gem 'beaker', beaker_gem_options
42
+ end
43
+
44
+ gem 'beaker-rspec'
45
+ gem 'beaker-windows'
46
+ gem 'net-ssh'
47
+ gem 'puppet', ENV.fetch('PUPPET_VERSION', '~> 5.0')
48
+ gem 'puppetlabs_spec_helper'
49
+ gem 'rubocop'
50
+ gem 'rubocop-rspec'
51
+ end
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ rubygem-simp-beaker-helpers - methods to help Beaker scaffolding SIMP tests
2
+
3
+ --
4
+
5
+ Per Section 105 of the Copyright Act of 1976, these works are not entitled to
6
+ domestic copyright protection under US Federal law.
7
+
8
+ The US Government retains the right to pursue copyright protections outside of
9
+ the United States.
10
+
11
+ The United States Government has unlimited rights in this software and all
12
+ derivatives thereof, pursuant to the contracts under which it was developed and
13
+ the License under which it falls.
14
+
15
+ ---
16
+
17
+ Licensed under the Apache License, Version 2.0 (the "License");
18
+ you may not use this file except in compliance with the License.
19
+ You may obtain a copy of the License at
20
+
21
+ http://www.apache.org/licenses/LICENSE-2.0
22
+
23
+ Unless required by applicable law or agreed to in writing, software
24
+ distributed under the License is distributed on an "AS IS" BASIS,
25
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ See the License for the specific language governing permissions and
27
+ limitations under the License.
@@ -0,0 +1,543 @@
1
+ # simp-beaker-helpers
2
+
3
+ Methods to assist beaker acceptance tests for SIMP.
4
+
5
+ #### Table of Contents
6
+
7
+ <!-- vim-markdown-toc GFM -->
8
+
9
+ * [Overview](#overview)
10
+ * [Setup](#setup)
11
+ * [Beginning with simp-beaker-helpers](#beginning-with-simp-beaker-helpers)
12
+ * [Rake Tasks](#rake-tasks)
13
+ * [`rake beaker:suites`](#rake-beakersuites)
14
+ * [Suite Execution](#suite-execution)
15
+ * [Environment Variables](#environment-variables)
16
+ * [Global Suite Configuration](#global-suite-configuration)
17
+ * [Supported Config:](#supported-config)
18
+ * [Individual Suite Configuration](#individual-suite-configuration)
19
+ * [Supported Config:](#supported-config-1)
20
+ * [Nodeset Enhancements](#nodeset-enhancements)
21
+ * [YUM Repo Support](#yum-repo-support)
22
+ * [Methods](#methods)
23
+ * [`copy_to`](#copy_to)
24
+ * [`copy_fixture_modules_to`](#copy_fixture_modules_to)
25
+ * [`fix_errata_on`](#fix_errata_on)
26
+ * [`run_fake_pki_ca_on`](#run_fake_pki_ca_on)
27
+ * [`copy_pki_to`](#copy_pki_to)
28
+ * [`copy_keydist_to`](#copy_keydist_to)
29
+ * [`pfact_on`](#pfact_on)
30
+ * [`pluginsync_on`](#pluginsync_on)
31
+ * [`write_hieradata_to`](#write_hieradata_to)
32
+ * [`set_hieradata_on`](#set_hieradata_on)
33
+ * [`clear_temp_hieradata`](#clear_temp_hieradata)
34
+ * [`latest_puppet_agent_version_for(puppet_version)`](#latest_puppet_agent_version_forpuppet_version)
35
+ * [`install_puppet`](#install_puppet)
36
+ * [Environment variables](#environment-variables-1)
37
+ * [`BEAKER_fips`](#beaker_fips)
38
+ * [`BEAKER_fips_module_version`](#beaker_fips_module_version)
39
+ * [`BEAKER_spec_prep`](#beaker_spec_prep)
40
+ * [`BEAKER_SIMP_parallel`](#beaker_simp_parallel)
41
+ * [`BEAKER_stringify_facts`](#beaker_stringify_facts)
42
+ * [`BEAKER_use_fixtures_dir_for_modules`](#beaker_use_fixtures_dir_for_modules)
43
+ * [`BEAKER_no_fix_interfaces`](#beaker_no_fix_interfaces)
44
+ * [PUPPET_VERSION](#puppet_version)
45
+ * [BEAKER_RHSM_USER](#beaker_rhsm_user)
46
+ * [BEAKER_RHSM_PASS](#beaker_rhsm_pass)
47
+ * [BEAKER_inspec_version](#beaker_inspec_version)
48
+ * [Examples](#examples)
49
+ * [Prep OS, Generate and copy PKI certs to each SUT](#prep-os-generate-and-copy-pki-certs-to-each-sut)
50
+ * [Specify the version of Puppet to run in the SUTs](#specify-the-version-of-puppet-to-run-in-the-suts)
51
+ * [Experimental Features](#experimental-features)
52
+ * [Snapshot Support](#snapshot-support)
53
+ * [Running Tests with Snapshots](#running-tests-with-snapshots)
54
+ * [Adding Snapshots to your Tests](#adding-snapshots-to-your-tests)
55
+ * [Taking a Snapshot](#taking-a-snapshot)
56
+ * [Base Snapshots](#base-snapshots)
57
+ * [Restoring a Snapshot](#restoring-a-snapshot)
58
+ * [Listing Snapshots](#listing-snapshots)
59
+ * [License](#license)
60
+
61
+ <!-- vim-markdown-toc -->
62
+
63
+ ## Overview
64
+
65
+ ## Setup
66
+
67
+ ### Beginning with simp-beaker-helpers
68
+
69
+ Add this to your project's `Gemfile`:
70
+
71
+ ```ruby
72
+ gem 'simp-beaker-helpers'
73
+ ```
74
+
75
+ Add this to your project's `spec/spec_helper_acceptance.rb`:
76
+ ```ruby
77
+ require 'simp/beaker_helpers'
78
+ include Simp::BeakerHelpers
79
+ ```
80
+
81
+ ## Rake Tasks
82
+
83
+ New `rake` tasks are available to help you use `beaker` more effectively.
84
+
85
+ These can be included in your `Rakefile` by adding the following:
86
+
87
+ ```
88
+ require 'simp/rake/beaker'
89
+ Simp::Rake::Beaker.new(File.dirname(__FILE__))
90
+ ```
91
+
92
+ ### `rake beaker:suites`
93
+
94
+ The 'beaker:suites' rake task provides the ability to run isolated test sets
95
+ with a full reset of the Beaker environment.
96
+
97
+ These are entirely isolated runs of Beaker and have been designed to be used
98
+ for situations where you need to eliminate all of the cruft from your previous
99
+ runs to perform a new type of test.
100
+
101
+ ### Suite Execution
102
+
103
+ By default the only suite that will be executed is `default`. Since each suite
104
+ is executed in a new environment, spin up can take a lot of time. Therefore,
105
+ the default is to only run the default suite.
106
+
107
+ If there is a suite where the metadata contains `default_run` set to the
108
+ Boolean `true`, then that suite will be part of the default suite execution.
109
+
110
+ You can run all suites by setting the passed suite name to `ALL` (case
111
+ sensitive).
112
+
113
+ #### Environment Variables
114
+
115
+ * BEAKER_suite_runall
116
+ * Run all Suites
117
+
118
+ * BEAKER_suite_basedir
119
+ * The base directory where suites will be defined
120
+ * Default: spec/acceptance
121
+
122
+ #### Global Suite Configuration
123
+
124
+ A file `config.yml` can be placed in the `suites` directory to control certain
125
+ aspects of the suite run.
126
+
127
+ ##### Supported Config:
128
+
129
+ ```yaml
130
+ ---
131
+ # Fail the entire suite at the first failure
132
+ 'fail_fast' : <true|false> => Default: true
133
+ ```
134
+
135
+ #### Individual Suite Configuration
136
+
137
+ Each suite may contain a YAML file, metadata.yml, which will be used to provide
138
+ information to the suite of tests.
139
+
140
+ ##### Supported Config:
141
+
142
+ ```yaml
143
+ ---
144
+ 'name' : '<User friendly name for the suite>'
145
+
146
+ # Run this suite by default
147
+ 'default_run' : <true|false> => Default: false
148
+ ```
149
+
150
+ ## Nodeset Enhancements
151
+
152
+ ### YUM Repo Support
153
+
154
+ Nodes in your nodesets will create YUM repository entries according to the
155
+ following Hash:
156
+
157
+ ```yaml
158
+ ---
159
+ yum_repos:
160
+ <repo_name>:
161
+ <yum_resource_parameter>: <value>
162
+ ```
163
+
164
+ The `baseurl` and `gpgkey` parameters can also take an Array if you need to
165
+ point at more than one location.
166
+
167
+ This would look like the following:
168
+
169
+ ```yaml
170
+ ---
171
+ yum_repos:
172
+ <repo_name>:
173
+ baseurl:
174
+ - http://some.random.host
175
+ - https://some.other.random.host
176
+ gpgkey:
177
+ - https://my.gpg.host
178
+ - https://my.other.gpg.host
179
+ ```
180
+
181
+ ## Methods
182
+
183
+ #### `copy_to`
184
+
185
+ Abstracts copying files and directories in the most efficient manner possible.
186
+
187
+ * If your system is a ``docker`` container it uses ``docker cp``
188
+ * If your system is anything else:
189
+ * Attempts to use ``rsync`` if it is present on both sides
190
+ * Falls back to ``scp``
191
+
192
+ All copy semantics are consistent with what you would expect from ``scp_to``
193
+
194
+ #### `copy_fixture_modules_to`
195
+
196
+ Copies the local fixture modules (under `spec/fixtures/modules`) onto a list of
197
+ SUTs.
198
+
199
+ ```ruby
200
+ copy_fixture_modules_to( suts = hosts, opts = {} )
201
+ ```
202
+ - **`suts`** = _(Array,String)_ list of SUTs to copy modules to
203
+ - **`opts`** = _(Hash)_ Options passed on to `copy_module_to()` for each SUT
204
+
205
+ By default, this will copy modules to the first path listed in each SUT's
206
+ `modulepath` and simulate a pluginsync so the Beaker DSL's `facter_on` will
207
+ still work.
208
+
209
+ If you need to use a non-default module path:
210
+ ```ruby
211
+ # WARNING: this will use the same :target_module_dir for each SUT
212
+ copy_fixture_modules_to( hosts, {
213
+ :target_module_dir => '/path/to/my/modules',
214
+ })
215
+ ```
216
+
217
+ If you want to disable pluginsync:
218
+ ```ruby
219
+ # WARNING: `fact_on` will not see custom facts
220
+ copy_fixture_modules_to( hosts, {
221
+ :pluginsync => false
222
+ })
223
+ ```
224
+
225
+ #### `fix_errata_on`
226
+
227
+ Apply any OS fixes we need on each SUT
228
+ `fix_errata_on( suts = hosts )`
229
+
230
+
231
+ #### `run_fake_pki_ca_on`
232
+
233
+ Generate a fake openssl CA + certs for each host on a given SUT and copy the
234
+ files back to a local directory.
235
+
236
+ **NOTE:** this needs to generate everything inside an SUT. It is assumed the
237
+ SUT will have the appropriate openssl in its environment.
238
+
239
+ `run_fake_pki_ca_on( ca_sut = master, suts = hosts, local_dir = '' )`
240
+
241
+ - **`ca_sut`** = the SUT to generate the CA & certs on
242
+ - **`suts`** = list of SUTs to generate certs for
243
+ - **`local_dir`** = local path where the CA+cert directory tree should copied back to
244
+
245
+ #### `copy_pki_to`
246
+
247
+ Copy a single SUT's PKI certs (with cacerts) onto the SUT. This simulates the result of `pki::copy` without requiring a full master and `simp-pki` module.
248
+
249
+ The directory structure copied to the SUT is:
250
+ ```
251
+ SUT_BASE_DIR/
252
+ pki/
253
+ cacerts/cacerts.pem
254
+ public/fdqn.pub
255
+ private/fdqn.pem
256
+
257
+ ```
258
+
259
+ `copy_pki_to(sut, local_pki_dir, sut_base_dir = '/etc/pki/simp-testing')`
260
+
261
+
262
+ #### `copy_keydist_to`
263
+
264
+ Copy a CA keydist/ directory of CA+host certs into an SUT.
265
+
266
+ This simulates the output of FakeCA's `gencerts_nopass.sh` into `keydist/` and is useful for constructing a Puppet master SUT that will distribute PKI keys via agent runs.
267
+
268
+ `copy_keydist_to( ca_sut = master )`
269
+
270
+
271
+ #### `pfact_on`
272
+
273
+ Look up a fact on a given SUT using the `puppet fact` face. This honors whatever facter-related settings the SUT's Puppet installation has been configured to use (i.e., `factpath`, `stringify_facts`, etc).
274
+
275
+ `pfact_on( sut, fact_name )`
276
+
277
+
278
+ #### `pluginsync_on`
279
+
280
+ Simulates a `pluginsync` (useful for deploying custom facts) on given SUTs.
281
+
282
+ `pluginsync_on( suts = hosts )`
283
+
284
+ #### `write_hieradata_to`
285
+
286
+ Writes a YAML file in the Hiera :datadir of a Beaker::Host.
287
+
288
+ **NOTE**: This is useless unless Hiera is configured to use the data file.
289
+ `Beaker::DSL::Helpers::Hiera#write_hiera_config_on` from [beaker-hiera](https://github.com/puppetlabs/beaker-hiera) may be used to configure Hiera.
290
+
291
+ `write_hieradata_to(host, hieradata, terminus = 'default')`
292
+
293
+ - **`host`** = _(Array,String,Symbol)_ One or more hosts to act upon
294
+ - **`hieradata`** = _(Hash)_ The full hiera data structure to write to the system
295
+ - **`terminus`** = _(String)_ The file basename minus the file extension in which to write the Hiera data
296
+
297
+ #### `set_hieradata_on`
298
+
299
+ Writes a YAML file in the Hiera :datdir of a Beaker::Host, then configures the host to use that file exclusively.
300
+
301
+ **NOTE**: This is authoritative; you cannot mix this with other Hiera data sources.
302
+
303
+ `set_hieradata_on(host, hieradata, terminus = 'default')`
304
+
305
+ - **`host`** = _(Array,String,Symbol)_ One or more hosts to act upon
306
+ - **`hieradata`** = _(Hash)_ The full hiera data structure to write to the system
307
+ - **`terminus`** = _(String)_ The file basename minus the file extension in which to write the Hiera data
308
+
309
+ #### `clear_temp_hieradata`
310
+
311
+ Clean up all temporary hiera data files; meant to be called from `after(:all)`
312
+
313
+ `clear_temp_hieradata`
314
+
315
+ #### `latest_puppet_agent_version_for(puppet_version)`
316
+
317
+ Finds the latest `puppet-agent` version based on the passed gem version and can
318
+ accept the usual Gem comparison syntax (e.g., '4.0', '=4.2', '~> 4.3.1', '5')
319
+
320
+ Returns the `puppet-agent` package version or `nil` if not found.
321
+
322
+ #### `install_puppet`
323
+
324
+ Performs an assessment of all set parameters and installs the correct
325
+ `puppet-agent` based on those parameters based on the following logic.
326
+
327
+ If the environment variable `BEAKER_PUPPET_AGENT_VERSION` or
328
+ `PUPPET_INSTALL_VERSION` or `PUPPET_VERSION` is set, it will use that value
329
+ to determine the `puppet-agent` version to install.
330
+
331
+ If it is unable to determine the `puppet-agent` version from any `*VERSION`
332
+ environment variables and the environment variable `BEAKER_PUPPET_COLLECTION`
333
+ is set, it will use this to determine which puppet collection to install from.
334
+ (Presently, this only works with Puppet 5.x and is set as `puppet5`.)
335
+
336
+ If it cannot determinte the `puppet-agent` version from any environment
337
+ variables, it will default the version to the value of
338
+ Simp::BeakerHelpers::DEFAULT_PUPPET_AGENT_VERSION, which is currently '1.10.4'.
339
+
340
+ ## Environment variables
341
+
342
+ #### `BEAKER_fips`
343
+
344
+ _(Default: `no`)_ When set to `yes`, Beaker will enable [FIPS mode](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-Federal_Standards_And_Regulations-Federal_Information_Processing_Standard.html) on all SUTs before running tests.
345
+
346
+ **NOTE:** FIPS mode is only enabled on RedHat family hosts.
347
+
348
+ #### `BEAKER_fips_module_version`
349
+
350
+ _(Default: unset)_ Set to a version of the simp-fips Puppet module released
351
+ to Puppet Forge, when you want to specify the version of that module used to
352
+ implement enable FIPS. When unset, the latest version is used.
353
+
354
+ **NOTE:** This has no effect if the `simp-fips` module is already included in your fixtures.yml
355
+
356
+ #### `BEAKER_spec_prep`
357
+
358
+ _(Default: `yes`)_ Ensures that each fixture module is present under
359
+ `spec/fixtures/modules`. If any fixture modules are missing, it will run `rake
360
+ spec_prep` to populate the missing modules using `.fixtures.yml`. Note that
361
+ this will _not_ update modules that are already present under
362
+ `spec/fixtures/modules`.
363
+
364
+ #### `BEAKER_SIMP_parallel`
365
+
366
+ _(Default: `no`)_ Execute each SIMP host setup method such as
367
+ `Simp::BeakerHelpers::copy_fixure_modules_to` and `Simp::BeakerHelpers::fix_errata_on`
368
+ on all hosts in a node set in parallel. Uses parallelization provided by Beaker.
369
+
370
+ **NOTE:** Beaker's parallelization capability does not always work, so a word
371
+ to the wise is sufficient.
372
+
373
+ #### `BEAKER_stringify_facts`
374
+ #### `BEAKER_use_fixtures_dir_for_modules`
375
+
376
+ #### `BEAKER_no_fix_interfaces`
377
+
378
+ Set to skip code that makes sure all interfaces are up
379
+
380
+ #### PUPPET_VERSION
381
+
382
+ The `PUPPET_VERSION` environment variable will install the latest
383
+ `puppet-agent` package that provides that version of Puppet. This honors
384
+ `Gemfile`-style expressions like `"~> 4.8.0"`
385
+
386
+ `BEAKER_PUPPET_AGENT_VERSION` and `PUPPET_INSTALL_VERSION` are synonyms of
387
+ `PUPPET_VERSION`.
388
+
389
+ #### BEAKER_RHSM_USER
390
+
391
+ The username to use with Red Hat Subscription Manager when dealing with a RHEL host.
392
+
393
+ Will not be output to the screen.
394
+
395
+ #### BEAKER_RHSM_PASS
396
+
397
+ The password to use with Red Hat Subscription Manager when dealing with a RHEL host.
398
+
399
+ Will not be output to the screen.
400
+
401
+ Note: When using Subscription Manager, make sure your nodeset has the setting validation: false. Otherwise Beaker:Rspec
402
+ might try to install packages before subscription manager is configured.
403
+
404
+ #### BEAKER_inspec_version
405
+
406
+ The version of InSpec to use when running inspec tests. Currently hard-coded to
407
+ `4.16.14` due to a bug introduced in `4.16.15`.
408
+
409
+ Let to 'latest' to use the latest available in the upstream repos.
410
+
411
+ ## Examples
412
+
413
+ ### Prep OS, Generate and copy PKI certs to each SUT
414
+ This pattern serves to prepare component modules that use PKI
415
+
416
+ ```ruby
417
+ # spec/spec_acceptance_helpers.rb
418
+ require 'beaker-rspec'
419
+ require 'tmpdir'
420
+ require 'simp/beaker_helpers'
421
+ include Simp::BeakerHelpers
422
+
423
+ unless ENV['BEAKER_provision'] == 'no'
424
+ hosts.each do |host|
425
+ # Install Puppet
426
+ if host.is_pe?
427
+ install_pe
428
+ else
429
+ install_puppet
430
+ end
431
+ end
432
+ end
433
+
434
+
435
+ RSpec.configure do |c|
436
+ # ensure that environment OS is ready on each host
437
+ fix_errata_on hosts
438
+
439
+ # Readable test descriptions
440
+ c.formatter = :documentation
441
+
442
+ # Configure all nodes in nodeset
443
+ c.before :suite do
444
+ begin
445
+ # Install modules and dependencies from spec/fixtures/modules
446
+ copy_fixture_modules_to( hosts )
447
+ Dir.mktmpdir do |cert_dir|
448
+ run_fake_pki_ca_on( default, hosts, cert_dir )
449
+ hosts.each{ |host| copy_pki_to( host, cert_dir, '/etc/pki/simp-testing' )}
450
+ end
451
+ rescue StandardError, ScriptError => e
452
+ require 'pry'; binding.pry if ENV['PRY']
453
+ end
454
+ end
455
+ end
456
+ ```
457
+
458
+ ### Specify the version of Puppet to run in the SUTs
459
+
460
+ ```bash
461
+ # puppet-agent 1.8.3 will be installed in VMs
462
+ PUPPET_VERSION="~> 4.8.0" bundle exec rake beaker:suites
463
+
464
+ # puppet-agent 1.9.2 will be installed in VMs
465
+ PUPPET_INSTALL_VERSION=1.9.2 bundle exec rake beaker:suites
466
+
467
+ # The latest puppet 5 will be installed in VMs
468
+ PUPPET_VERSION="5" bundle exec rake beaker:suites
469
+
470
+ # puppet-agent 1.10.4 will be installed in VMs
471
+ bundle exec rake beaker:suites
472
+ ```
473
+
474
+ ## Experimental Features
475
+
476
+ ### Snapshot Support
477
+
478
+ Rudimentary support for snapshotting VMs has been added. This currently only
479
+ works for local `vagrant` systems and relies on the underlying `vagrant
480
+ snapshot` command working for the underlying hypervisor. VirtualBox is highly
481
+ recommended and `libvirt` is known to not work due to limitiations in
482
+ `vagrant`.
483
+
484
+ This was added to attempt to be able to restart tests from given checkpoints
485
+ that encompass extremely long running test segments. This is particularly
486
+ relevant when you are trying to set up a large support infrastructure but need
487
+ to debug later stages of your tests over time.
488
+
489
+ #### Running Tests with Snapshots
490
+
491
+ To enable snapshots during your initial test runs, run your test as follows:
492
+
493
+ ```bash
494
+ BEAKER_destroy=no BEAKER_simp_snapshot=yes rake beaker:suites
495
+ ```
496
+
497
+ Then, on subsequent runs, run your test as follows:
498
+
499
+ ```bash
500
+ BEAKER_provision=no BEAKER_destroy=no BEAKER_simp_snapshot=yes rake beaker:suites
501
+ ```
502
+ #### Adding Snapshots to your Tests
503
+
504
+ The following demonstrates the general idea behind using snapshots. Note, the
505
+ decision to directly call the module methods was made to ensure that people
506
+ knew explicitly when this capability was being called since it affects the
507
+ underlying OS configuration.
508
+
509
+ ##### Taking a Snapshot
510
+
511
+ `Simp::BeakerHelpers::Snapshot.save(sut, '<name of snapshot>')` will save a
512
+ snapshot with the given name. If the snapshot already exists, it will be
513
+ forceably overwritten.
514
+
515
+
516
+ ##### Base Snapshots
517
+
518
+ Any time a snapshot is saved, if an initial base snapshot doesn't exist, one
519
+ will be created. You can restore back to the base snapshot using
520
+ `Simp::BeakerHelpers::Snapshot.restore_to_base(sut)`.
521
+
522
+ These are specifically created to ensure that we don't run into issues with
523
+ trying to remove the parent of all snapshots since some hypervisors do not
524
+ allow this.
525
+
526
+ ##### Restoring a Snapshot
527
+
528
+ `Simp::BeakerHelpers::Snapshot.restore(sut, '<name of snapshot>)` will restore
529
+ to the named snapshot.
530
+
531
+ Attempting to restore to a snapshot that doesn't exist is an error.
532
+
533
+ ##### Listing Snapshots
534
+
535
+ `Simp::BeakerHelpers::Snapshot.list(sut)` will return an Array of all snapshot
536
+ names for that system.
537
+
538
+ `Simp::BeakerHelpers::Snapshot.exist?(sut, '<name of snapshot>')` will return a
539
+ Boolean based on whether or not the snapshot with the given name is present on
540
+ the system.
541
+
542
+ ## License
543
+ See [LICENSE](LICENSE)