voxpupuli-acceptance 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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