voxpupuli-acceptance 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37915c6f478ecafc4e655b0b331e7187ded5de2f5d0759be3e1b91495e2fba8d
4
- data.tar.gz: 7c9f0126fa4113ad3dba24a629a3450bf59eb2476ec1e3dbf9adabd1551229c6
3
+ metadata.gz: 18f700e3c94ea73c5ccb90021f06950463b965b412a02779b68685fd95e22ef2
4
+ data.tar.gz: 07fd8b5f34440869d96be25b0be77479fb49a01381ee4919eac0e4129e3c2c9c
5
5
  SHA512:
6
- metadata.gz: 605dba3416c85639b1027063785a91cd2cc8bbc4fab71cf09f79cfd5bb6810ab498814416be7558a0450a6ef006f1cdb8b390ecd3da392d64c0c10eea385d1cb
7
- data.tar.gz: 1f41ec9930bf790bb61bb7f3693484f5f32198f521d1e4c381055f6112bd6e67e51f7088d37041b3eaeac92a3a9837eb4d677c960202810f939251869ffc1491
6
+ metadata.gz: 330135466f41d8d37378cf09b57c500f598364cf67c0770ecbc38ac20602a41acedf15ea86ca89d935037f89d5a18b15ebca52374fd296129c4e90ff494faebb
7
+ data.tar.gz: 4b5bc3918ee3f1f5967474bce44025f30beac5da95932fbdc051364f69601fb7884734a492b9212e92f421ca5a0eac321afac0cfaece99950f9faa2edbd6dc46
@@ -0,0 +1,21 @@
1
+ shared_examples 'an idempotent resource' do |host|
2
+ host ||= default
3
+
4
+ it 'applies with no errors' do
5
+ apply_manifest_on(host, manifest, catch_failures: true)
6
+ end
7
+
8
+ it 'applies a second time without changes' do
9
+ apply_manifest_on(host, manifest, catch_changes: true)
10
+ end
11
+ end
12
+
13
+ shared_examples 'the example' do |name, host|
14
+ include_examples 'an idempotent resource', host do
15
+ let(:manifest) do
16
+ path = File.join(Dir.pwd, 'examples', name)
17
+ raise Exception, "Example '#{path}' does not exist" unless File.exist?(path)
18
+ File.read(path)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ module Voxpupuli
2
+ module Acceptance
3
+ class Facts
4
+ ENV_VAR_PREFIX = 'BEAKER_FACTER_'
5
+ FACT_FILE = '/etc/facter/facts.d/voxpupuli-acceptance-env.json'
6
+
7
+ class << self
8
+ def beaker_facts_from_env
9
+ facts = {}
10
+
11
+ ENV.each do |var, value|
12
+ next unless var.start_with?(ENV_VAR_PREFIX)
13
+
14
+ fact = var.sub(ENV_VAR_PREFIX, '').downcase
15
+ facts[fact] = value
16
+ end
17
+
18
+ facts
19
+ end
20
+
21
+ def write_beaker_facts_on(hosts)
22
+ beaker_facts = beaker_facts_from_env
23
+
24
+ if beaker_facts.any?
25
+ require 'json'
26
+ on(hosts, "mkdir -p #{File.dirname(FACT_FILE)} && cat <<VOXPUPULI_BEAKER_ENV_VARS > #{FACT_FILE}\n#{beaker_facts.to_json}\nVOXPUPULI_BEAKER_ENV_VARS")
27
+ else
28
+ on(hosts, "rm -f #{FACT_FILE}")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  require 'tmpdir'
2
2
  require 'puppet/modulebuilder'
3
3
 
4
- module Voxpupupli
4
+ module Voxpupuli
5
5
  module Acceptance
6
6
  class Fixtures
7
7
  class << self
@@ -0,0 +1,7 @@
1
+ begin
2
+ require 'puppetlabs_spec_helper/tasks/beaker'
3
+ # Fixtures can be needed because of spec_prep
4
+ require 'puppetlabs_spec_helper/tasks/fixtures'
5
+ rescue LoadError
6
+ require 'beaker-rspec/rake_task'
7
+ end
@@ -1,36 +1,14 @@
1
- ENV_VAR_PREFIX = 'BEAKER_FACTER_'
2
- FACT_FILE = '/etc/facter/facts.d/voxpupuli-acceptance-env.json'
1
+ require_relative 'examples'
3
2
 
4
- def beaker_facts_from_env
5
- facts = {}
6
-
7
- ENV.each do |var, value|
8
- next unless var.start_with?(ENV_VAR_PREFIX)
9
-
10
- fact = var.sub(ENV_VAR_PREFIX, '').downcase
11
- facts[fact] = value
12
- end
13
-
14
- facts
15
- end
16
-
17
- def write_beaker_facts_on(hosts)
18
- beaker_facts = beaker_facts_from_env
19
-
20
- if beaker_facts.any?
21
- require 'json'
22
- on(hosts, "mkdir -p #{File.dirname(FACT_FILE)} && cat <<VOXPUPULI_BEAKER_ENV_VARS > #{FACT_FILE}\n#{beaker_facts.to_json}\nVOXPUPULI_BEAKER_ENV_VARS")
23
- else
24
- on(hosts, "rm -f #{FACT_FILE}")
25
- end
26
- end
27
-
28
- def configure_beaker(modules: :metadata, configure_facts_from_env: true, &block)
3
+ def configure_beaker(modules: :metadata, &block)
29
4
  ENV['PUPPET_INSTALL_TYPE'] ||= 'agent'
30
5
  ENV['BEAKER_PUPPET_COLLECTION'] ||= 'puppet6'
31
6
  ENV['BEAKER_debug'] ||= 'true'
32
7
  ENV['BEAKER_HYPERVISOR'] ||= 'docker'
33
8
 
9
+ # On Ruby 3 this doesn't appear to matter but on Ruby 2 beaker-hiera must be
10
+ # included before beaker-rspec so Beaker::DSL is final
11
+ require 'beaker-hiera'
34
12
  require 'beaker-rspec'
35
13
  require 'beaker-puppet'
36
14
  require 'beaker/puppet_install_helper'
@@ -57,16 +35,52 @@ def configure_beaker(modules: :metadata, configure_facts_from_env: true, &block)
57
35
  install_module_dependencies
58
36
  when :fixtures
59
37
  fixture_modules = File.join(Dir.pwd, 'spec', 'fixtures', 'modules')
60
- Voxpupupli::Acceptance::Fixtures.install_fixture_modules_on(hosts, fixture_modules)
38
+ Voxpupuli::Acceptance::Fixtures.install_fixture_modules_on(hosts, fixture_modules)
61
39
  end
62
40
 
63
- write_beaker_facts_on(hosts) if configure_facts_from_env
41
+ if RSpec.configuration.suite_configure_facts_from_env
42
+ require_relative 'facts'
43
+ Voxpupuli::Acceptance::Facts.write_beaker_facts_on(hosts)
44
+ end
45
+
46
+ if RSpec.configuration.suite_hiera?
47
+ hiera_data_dir = RSpec.configuration.suite_hiera_data_dir
48
+
49
+ if Dir.exist?(hiera_data_dir)
50
+ write_hiera_config_on(hosts, RSpec.configuration.suite_hiera_hierachy)
51
+ copy_hiera_data_to(hosts, hiera_data_dir)
52
+ end
53
+ end
64
54
 
65
- if block
66
- hosts.each do |host|
55
+ hosts.each do |host|
56
+ if block
67
57
  yield host
58
+
59
+ local_setup = RSpec.configuration.setup_acceptance_node
60
+ if local_setup && File.exist?(local_setup)
61
+ puts "Configuring #{host} by applying #{local_setup}"
62
+ apply_manifest_on(host, File.read(local_setup), catch_failures: true)
63
+ end
68
64
  end
69
65
  end
70
66
  end
71
67
  end
72
68
  end
69
+
70
+ RSpec.configure do |c|
71
+ # Fact handling
72
+ c.add_setting :suite_configure_facts_from_env, default: true
73
+
74
+ # Hiera settings
75
+ c.add_setting :suite_hiera, default: true
76
+ c.add_setting :suite_hiera_data_dir, default: File.join('spec', 'acceptance', 'hieradata')
77
+ c.add_setting :suite_hiera_hierachy, default: [
78
+ 'fqdn/%{fqdn}.yaml',
79
+ 'os/%{os.family}/%{os.release.major}.yaml',
80
+ 'os/%{os.family}.yaml',
81
+ 'common.yaml',
82
+ ]
83
+
84
+ # Node setup
85
+ c.add_setting :setup_acceptance_node, default: File.join('spec', 'setup_acceptance_node.pp')
86
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: voxpupuli-acceptance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-09 00:00:00.000000000 Z
11
+ date: 2021-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt_pbkdf
@@ -64,6 +64,20 @@ dependencies:
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: beaker-hiera
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '0.4'
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '0.4'
67
81
  - !ruby/object:Gem::Dependency
68
82
  name: beaker-hostgenerator
69
83
  requirement: !ruby/object:Gem::Requirement
@@ -176,6 +190,20 @@ dependencies:
176
190
  - - "~>"
177
191
  - !ruby/object:Gem::Version
178
192
  version: '0.1'
193
+ - !ruby/object:Gem::Dependency
194
+ name: rake
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ type: :runtime
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
179
207
  - !ruby/object:Gem::Dependency
180
208
  name: rbnacl
181
209
  requirement: !ruby/object:Gem::Requirement
@@ -241,9 +269,12 @@ extensions: []
241
269
  extra_rdoc_files: []
242
270
  files:
243
271
  - lib/voxpupuli/acceptance.rb
272
+ - lib/voxpupuli/acceptance/examples.rb
273
+ - lib/voxpupuli/acceptance/facts.rb
244
274
  - lib/voxpupuli/acceptance/fixtures.rb
275
+ - lib/voxpupuli/acceptance/rake.rb
245
276
  - lib/voxpupuli/acceptance/spec_helper_acceptance.rb
246
- homepage: http://github.com/voxpupuli/voxpupuli-acceptance
277
+ homepage: https://github.com/voxpupuli/voxpupuli-acceptance
247
278
  licenses:
248
279
  - Apache-2.0
249
280
  metadata: {}
@@ -255,14 +286,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
255
286
  requirements:
256
287
  - - ">="
257
288
  - !ruby/object:Gem::Version
258
- version: '0'
289
+ version: '2.4'
290
+ - - "<"
291
+ - !ruby/object:Gem::Version
292
+ version: '4'
259
293
  required_rubygems_version: !ruby/object:Gem::Requirement
260
294
  requirements:
261
295
  - - ">="
262
296
  - !ruby/object:Gem::Version
263
297
  version: '0'
264
298
  requirements: []
265
- rubygems_version: 3.0.6
299
+ rubygems_version: 3.1.6
266
300
  signing_key:
267
301
  specification_version: 4
268
302
  summary: Helpers for acceptance testing Vox Pupuli modules