voxpupuli-acceptance 0.2.1 → 1.1.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: 69860eff5a884085c2872fdce8f47122020ddb6355f72eb75eec92ae712415f1
4
- data.tar.gz: 490075ff98e6a91416abf253db39c55f2f0600ce930c72615e77fdaa70546bb0
3
+ metadata.gz: 557133c56cc279a2e32231fe370c9dc751ccfab399f8c359728834f25f750ba2
4
+ data.tar.gz: db7b675b150ee69ae02d8942c4d5d97b7ddf759c0dc1dab64e25900813c223ac
5
5
  SHA512:
6
- metadata.gz: b6d35892eee0ea3657a9cb588e665704e521a1dfa08f85f6e2a3c9f34294306860c65e027cf40ace681878da7059c32c0504182dffabc827f92d009b7808b04f
7
- data.tar.gz: 25c82c6e01747cedfbf827b53dd89f79f21af9ac8cb27bce0147758e917ad8b911e705de8665ee31e30ebe7432f1e28406ced64c8236a970c993f62fba27d6ea
6
+ metadata.gz: 43680c07caa4c51a162f0b33a1a8646aab994e0a5500e2624658696ff24b4952fda7d97868e7018e0f7639d6ef8859f70a28bfa6f349967d3cb102e2417285a9
7
+ data.tar.gz: 63fa116962dec2f7e042fe5eb665c90ae4bc2ff261aee24849dc7571e950337201f929a5805c01b6dba0cf90dc69ab448c8735a0d71371a2dec9b5bc3b8e1b96
@@ -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,9 @@
1
+ begin
2
+ # Fixtures can be needed because of spec_prep
3
+ # spec_prep taks is provided by puppetlabs_spec_helper
4
+ require 'puppetlabs_spec_helper/tasks/fixtures'
5
+ rescue LoadError
6
+ # we only need that during CI, so we rescue the LoadError
7
+ end
8
+ # provides the beaker rake task
9
+ require 'beaker-rspec/rake_task'
@@ -1,9 +1,14 @@
1
+ require_relative 'examples'
2
+
1
3
  def configure_beaker(modules: :metadata, &block)
2
4
  ENV['PUPPET_INSTALL_TYPE'] ||= 'agent'
3
5
  ENV['BEAKER_PUPPET_COLLECTION'] ||= 'puppet6'
4
6
  ENV['BEAKER_debug'] ||= 'true'
5
7
  ENV['BEAKER_HYPERVISOR'] ||= 'docker'
6
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'
7
12
  require 'beaker-rspec'
8
13
  require 'beaker-puppet'
9
14
  require 'beaker/puppet_install_helper'
@@ -30,14 +35,50 @@ def configure_beaker(modules: :metadata, &block)
30
35
  install_module_dependencies
31
36
  when :fixtures
32
37
  fixture_modules = File.join(Dir.pwd, 'spec', 'fixtures', 'modules')
33
- Voxpupupli::Acceptance::Fixtures.install_fixture_modules_on(hosts, fixture_modules)
38
+ Voxpupuli::Acceptance::Fixtures.install_fixture_modules_on(hosts, fixture_modules)
39
+ end
40
+
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
34
53
  end
35
54
 
36
- if block
37
- hosts.each do |host|
38
- yield host
55
+ local_setup = RSpec.configuration.setup_acceptance_node
56
+ hosts.each do |host|
57
+ yield host if block
58
+
59
+ if local_setup && File.exist?(local_setup)
60
+ puts "Configuring #{host} by applying #{local_setup}"
61
+ apply_manifest_on(host, File.read(local_setup), catch_failures: true)
39
62
  end
40
63
  end
41
64
  end
42
65
  end
43
66
  end
67
+
68
+ RSpec.configure do |c|
69
+ # Fact handling
70
+ c.add_setting :suite_configure_facts_from_env, default: true
71
+
72
+ # Hiera settings
73
+ c.add_setting :suite_hiera, default: true
74
+ c.add_setting :suite_hiera_data_dir, default: File.join('spec', 'acceptance', 'hieradata')
75
+ c.add_setting :suite_hiera_hierachy, default: [
76
+ 'fqdn/%{fqdn}.yaml',
77
+ 'os/%{os.family}/%{os.release.major}.yaml',
78
+ 'os/%{os.family}.yaml',
79
+ 'common.yaml',
80
+ ]
81
+
82
+ # Node setup
83
+ c.add_setting :setup_acceptance_node, default: File.join('spec', 'setup_acceptance_node.pp')
84
+ 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.2.1
4
+ version: 1.1.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-05-20 00:00:00.000000000 Z
11
+ date: 2022-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt_pbkdf
@@ -30,26 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 4.2.0
34
- - - "!="
35
- - !ruby/object:Gem::Version
36
- version: 4.22.0
37
- - - "!="
38
- - !ruby/object:Gem::Version
39
- version: 4.23.0
33
+ version: 4.33.0
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
- version: 4.2.0
47
- - - "!="
48
- - !ruby/object:Gem::Version
49
- version: 4.22.0
50
- - - "!="
51
- - !ruby/object:Gem::Version
52
- version: 4.23.0
40
+ version: 4.33.0
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: beaker-docker
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -65,35 +53,35 @@ dependencies:
65
53
  - !ruby/object:Gem::Version
66
54
  version: '0'
67
55
  - !ruby/object:Gem::Dependency
68
- name: beaker-hostgenerator
56
+ name: beaker-hiera
69
57
  requirement: !ruby/object:Gem::Requirement
70
58
  requirements:
71
- - - ">="
59
+ - - "~>"
72
60
  - !ruby/object:Gem::Version
73
- version: 1.1.22
61
+ version: '0.4'
74
62
  type: :runtime
75
63
  prerelease: false
76
64
  version_requirements: !ruby/object:Gem::Requirement
77
65
  requirements:
78
- - - ">="
66
+ - - "~>"
79
67
  - !ruby/object:Gem::Version
80
- version: 1.1.22
68
+ version: '0.4'
81
69
  - !ruby/object:Gem::Dependency
82
- name: beaker-module_install_helper
70
+ name: beaker-hostgenerator
83
71
  requirement: !ruby/object:Gem::Requirement
84
72
  requirements:
85
73
  - - ">="
86
74
  - !ruby/object:Gem::Version
87
- version: '0'
75
+ version: 1.1.22
88
76
  type: :runtime
89
77
  prerelease: false
90
78
  version_requirements: !ruby/object:Gem::Requirement
91
79
  requirements:
92
80
  - - ">="
93
81
  - !ruby/object:Gem::Version
94
- version: '0'
82
+ version: 1.1.22
95
83
  - !ruby/object:Gem::Dependency
96
- name: beaker-puppet
84
+ name: beaker-module_install_helper
97
85
  requirement: !ruby/object:Gem::Requirement
98
86
  requirements:
99
87
  - - ">="
@@ -107,7 +95,7 @@ dependencies:
107
95
  - !ruby/object:Gem::Version
108
96
  version: '0'
109
97
  - !ruby/object:Gem::Dependency
110
- name: beaker-puppet_install_helper
98
+ name: beaker-puppet
111
99
  requirement: !ruby/object:Gem::Requirement
112
100
  requirements:
113
101
  - - ">="
@@ -121,7 +109,7 @@ dependencies:
121
109
  - !ruby/object:Gem::Version
122
110
  version: '0'
123
111
  - !ruby/object:Gem::Dependency
124
- name: beaker-rspec
112
+ name: beaker-puppet_install_helper
125
113
  requirement: !ruby/object:Gem::Requirement
126
114
  requirements:
127
115
  - - ">="
@@ -135,7 +123,7 @@ dependencies:
135
123
  - !ruby/object:Gem::Version
136
124
  version: '0'
137
125
  - !ruby/object:Gem::Dependency
138
- name: beaker-vagrant
126
+ name: beaker-rspec
139
127
  requirement: !ruby/object:Gem::Requirement
140
128
  requirements:
141
129
  - - ">="
@@ -149,7 +137,7 @@ dependencies:
149
137
  - !ruby/object:Gem::Version
150
138
  version: '0'
151
139
  - !ruby/object:Gem::Dependency
152
- name: ed25519
140
+ name: beaker-vagrant
153
141
  requirement: !ruby/object:Gem::Requirement
154
142
  requirements:
155
143
  - - ">="
@@ -177,21 +165,21 @@ dependencies:
177
165
  - !ruby/object:Gem::Version
178
166
  version: '0.1'
179
167
  - !ruby/object:Gem::Dependency
180
- name: rbnacl
168
+ name: rake
181
169
  requirement: !ruby/object:Gem::Requirement
182
170
  requirements:
183
171
  - - ">="
184
172
  - !ruby/object:Gem::Version
185
- version: '4'
173
+ version: '0'
186
174
  type: :runtime
187
175
  prerelease: false
188
176
  version_requirements: !ruby/object:Gem::Requirement
189
177
  requirements:
190
178
  - - ">="
191
179
  - !ruby/object:Gem::Version
192
- version: '4'
180
+ version: '0'
193
181
  - !ruby/object:Gem::Dependency
194
- name: rbnacl-libsodium
182
+ name: serverspec
195
183
  requirement: !ruby/object:Gem::Requirement
196
184
  requirements:
197
185
  - - ">="
@@ -205,7 +193,7 @@ dependencies:
205
193
  - !ruby/object:Gem::Version
206
194
  version: '0'
207
195
  - !ruby/object:Gem::Dependency
208
- name: serverspec
196
+ name: winrm
209
197
  requirement: !ruby/object:Gem::Requirement
210
198
  requirements:
211
199
  - - ">="
@@ -219,19 +207,19 @@ dependencies:
219
207
  - !ruby/object:Gem::Version
220
208
  version: '0'
221
209
  - !ruby/object:Gem::Dependency
222
- name: winrm
210
+ name: puppetlabs_spec_helper
223
211
  requirement: !ruby/object:Gem::Requirement
224
212
  requirements:
225
213
  - - ">="
226
214
  - !ruby/object:Gem::Version
227
- version: '0'
228
- type: :runtime
215
+ version: 1.2.0
216
+ type: :development
229
217
  prerelease: false
230
218
  version_requirements: !ruby/object:Gem::Requirement
231
219
  requirements:
232
220
  - - ">="
233
221
  - !ruby/object:Gem::Version
234
- version: '0'
222
+ version: 1.2.0
235
223
  description: A package that depends on all the gems Vox Pupuli modules need and methods
236
224
  to simplify acceptance spec helpers
237
225
  email:
@@ -241,9 +229,12 @@ extensions: []
241
229
  extra_rdoc_files: []
242
230
  files:
243
231
  - lib/voxpupuli/acceptance.rb
232
+ - lib/voxpupuli/acceptance/examples.rb
233
+ - lib/voxpupuli/acceptance/facts.rb
244
234
  - lib/voxpupuli/acceptance/fixtures.rb
235
+ - lib/voxpupuli/acceptance/rake.rb
245
236
  - lib/voxpupuli/acceptance/spec_helper_acceptance.rb
246
- homepage: http://github.com/voxpupuli/voxpupuli-acceptance
237
+ homepage: https://github.com/voxpupuli/voxpupuli-acceptance
247
238
  licenses:
248
239
  - Apache-2.0
249
240
  metadata: {}
@@ -255,14 +246,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
255
246
  requirements:
256
247
  - - ">="
257
248
  - !ruby/object:Gem::Version
258
- version: '0'
249
+ version: '2.4'
250
+ - - "<"
251
+ - !ruby/object:Gem::Version
252
+ version: '4'
259
253
  required_rubygems_version: !ruby/object:Gem::Requirement
260
254
  requirements:
261
255
  - - ">="
262
256
  - !ruby/object:Gem::Version
263
257
  version: '0'
264
258
  requirements: []
265
- rubygems_version: 3.0.6
259
+ rubygems_version: 3.3.3
266
260
  signing_key:
267
261
  specification_version: 4
268
262
  summary: Helpers for acceptance testing Vox Pupuli modules