simp-beaker-helpers 1.12.1 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +149 -103
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +2 -1
- data/lib/simp/beaker_helpers.rb +79 -60
- data/lib/simp/beaker_helpers/inspec.rb +7 -1
- data/lib/simp/beaker_helpers/ssg.rb +127 -1
- data/lib/simp/beaker_helpers/version.rb +1 -1
- data/simp-beaker-helpers.gemspec +1 -0
- data/spec/acceptance/nodesets/default.yml +17 -7
- data/spec/acceptance/suites/puppet_collections/nodesets/default.yml +14 -7
- data/spec/acceptance/suites/windows/00_default_spec.rb +103 -0
- data/spec/acceptance/suites/windows/metadata.yml +2 -0
- data/spec/acceptance/suites/windows/nodesets/default.yml +40 -0
- data/spec/lib/simp/beaker_helpers_spec.rb +5 -5
- data/spec/spec_helper_acceptance.rb +0 -15
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9229a2699ed6767059dee0f1b835dece7284420aabc219a0f195f6b9d0d0622
|
4
|
+
data.tar.gz: 99f9de96732cd0e07f02fc29c1af20fc6390bf67a55d22046eb93f836b8a377c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2289cd0e1bff87e03cad29ee5f36d0f609b2ee2d0ccdff5101a22e5df5ba26a21b44e79d9bb228607d670e51a6c55dfad57d149179844cece4edbfdfc46fcbd7
|
7
|
+
data.tar.gz: 84557eec4604ec94fec37c4a47415fdba716ccbc5c2c7d92f5d6f1e87f63774c9a6004006541aa58ed8f441ca3e8a86094c2892d90d3716b1a173e21bde1302f
|
data/.gitlab-ci.yml
CHANGED
@@ -1,120 +1,166 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
|
2
|
+
.cache_bundler: &cache_bundler
|
3
|
+
cache:
|
4
|
+
untracked: true
|
5
|
+
# A broad attempt at caching between runs (ala Travis CI)
|
6
|
+
key: "${CI_PROJECT_NAMESPACE}__bundler"
|
7
|
+
paths:
|
8
|
+
- '.vendor'
|
9
|
+
- 'vendor'
|
10
|
+
|
11
|
+
.setup_bundler_env: &setup_bundler_env
|
12
|
+
before_script:
|
13
|
+
- 'echo Files in cache: $(find .vendor | wc -l) || :'
|
14
|
+
- 'export GEM_HOME=.vendor/gem_install'
|
15
|
+
- 'export BUNDLE_CACHE_PATH=.vendor/bundler'
|
16
|
+
- 'declare GEM_BUNDLER_VER=(-v ''~> ${BUNDLER_VERSION:-1.16.0}'')'
|
17
|
+
- declare GEM_INSTALL=(gem install --no-document)
|
18
|
+
- declare BUNDLER_INSTALL=(bundle install --no-binstubs --jobs $(nproc) --path=.vendor "${FLAGS[@]}")
|
19
|
+
- gem list -ie "${GEM_BUNDLE_VER[@]}" --silent bundler || "${GEM_INSTALL[@]}" --local "${GEM_BUNDLE_VER[@]}" bundler || "${GEM_INSTALL[@]}" "${GEM_BUNDLE_VER[@]}" bundler
|
20
|
+
- 'rm -rf pkg/ || :'
|
21
|
+
- bundle check || rm -f Gemfile.lock && ("${BUNDLER_INSTALL[@]}" --local || "${BUNDLER_INSTALL[@]}")
|
22
|
+
|
23
|
+
|
24
|
+
.validation_checks: &validation_checks
|
25
|
+
script:
|
26
|
+
- bundle exec rake syntax
|
27
|
+
- bundle exec rake check:dot_underscore
|
28
|
+
- bundle exec rake check:test_file
|
29
|
+
- bundle exec rake lint
|
30
|
+
# - bundle exec rake pkg:check_version
|
31
|
+
# - bundle exec rake pkg:compare_latest_tag
|
32
|
+
|
33
|
+
.spec_tests: &spec_tests
|
34
|
+
script:
|
35
|
+
- bundle exec rake spec
|
36
|
+
|
37
|
+
# To avoid running a prohibitive number of tests every commit,
|
38
|
+
# don't set this env var in your gitlab instance
|
39
|
+
.only_with_SIMP_FULL_MATRIX: &only_with_SIMP_FULL_MATRIX
|
40
|
+
only:
|
41
|
+
variables:
|
42
|
+
- $SIMP_FULL_MATRIX
|
43
|
+
|
4
44
|
stages:
|
5
|
-
-
|
45
|
+
- validation
|
6
46
|
- unit
|
7
|
-
- lint
|
8
47
|
- acceptance
|
48
|
+
- deploy
|
49
|
+
|
50
|
+
# Puppet 4.10 for PE 2017.2 support (EOL:2018-02-21)
|
51
|
+
# See: https://puppet.com/misc/puppet-enterprise-lifecycle
|
52
|
+
# --------------------------------------
|
53
|
+
2_1-validation:
|
54
|
+
stage: validation
|
55
|
+
tags:
|
56
|
+
- docker
|
57
|
+
image: ruby:2.1
|
58
|
+
<<: *cache_bundler
|
59
|
+
<<: *setup_bundler_env
|
60
|
+
<<: *validation_checks
|
9
61
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
62
|
+
2_1-unit:
|
63
|
+
stage: unit
|
64
|
+
tags:
|
65
|
+
- docker
|
66
|
+
image: ruby:2.1
|
67
|
+
<<: *cache_bundler
|
68
|
+
<<: *setup_bundler_env
|
69
|
+
<<: *spec_tests
|
14
70
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
71
|
+
# Puppet 4.10 for PE 2017.2 support (EOL:2018-02-21)
|
72
|
+
# See: https://puppet.com/misc/puppet-enterprise-lifecycle
|
73
|
+
# --------------------------------------
|
74
|
+
2_4-validation:
|
75
|
+
stage: validation
|
76
|
+
tags:
|
77
|
+
- docker
|
78
|
+
image: ruby:2.4
|
79
|
+
<<: *cache_bundler
|
80
|
+
<<: *setup_bundler_env
|
81
|
+
<<: *validation_checks
|
82
|
+
|
83
|
+
2_4-unit:
|
84
|
+
stage: unit
|
85
|
+
tags:
|
86
|
+
- docker
|
87
|
+
image: ruby:2.4
|
88
|
+
<<: *cache_bundler
|
89
|
+
<<: *setup_bundler_env
|
90
|
+
<<: *spec_tests
|
19
91
|
|
20
|
-
before_script:
|
21
|
-
- 'ruby -v'
|
22
|
-
- 'apt update && apt install -y rpm'
|
23
|
-
- 'bundle -v || gem install bundler'
|
24
|
-
- 'bundle config --local path vendor'
|
25
|
-
- 'rm -f Gemfile.lock'
|
26
|
-
- 'bundle install -j $(nproc) --no-binstubs'
|
27
92
|
|
28
93
|
#=======================================================================
|
29
|
-
#
|
94
|
+
# Acceptance tests
|
95
|
+
default:
|
96
|
+
stage: acceptance
|
97
|
+
tags:
|
98
|
+
- beaker
|
99
|
+
<<: *cache_bundler
|
100
|
+
<<: *setup_bundler_env
|
101
|
+
variables:
|
102
|
+
PUPPET_VERSION: '~> 4.10.10'
|
103
|
+
script:
|
104
|
+
- bundle exec rake spec_clean
|
105
|
+
- bundle exec rake beaker:suites[default]
|
30
106
|
|
31
|
-
|
32
|
-
stage:
|
33
|
-
tags:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
- 'Gemfile.lock'
|
41
|
-
retry: 1
|
107
|
+
default-puppet5:
|
108
|
+
stage: acceptance
|
109
|
+
tags:
|
110
|
+
- beaker
|
111
|
+
<<: *cache_bundler
|
112
|
+
<<: *setup_bundler_env
|
113
|
+
variables:
|
114
|
+
PUPPET_VERSION: '~> 5.3'
|
115
|
+
BEAKER_PUPPET_COLLECTION: 'puppet5'
|
42
116
|
script:
|
43
|
-
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
# bundled in Puppet Enterprise.
|
53
|
-
#
|
54
|
-
# For more information see:
|
55
|
-
# * https://puppet.com/docs/pe/latest/overview/component_versions_in_recent_pe_releases.html
|
56
|
-
# * https://puppet.com/misc/puppet-enterprise-lifecycle
|
57
|
-
# * https://puppet.com/docs/pe/latest/overview/getting_support_for_pe.html#standard-releases-and-long-term-support-releases
|
58
|
-
#
|
59
|
-
# ----------------------------------------------
|
60
|
-
# | Release | Puppet | Ruby | End-of-Life Date |
|
61
|
-
# ----------|--------|------|------------------|
|
62
|
-
# PE 2017.2 4.10 2.1 2018-02
|
63
|
-
# PE 2017.3 5.3 2.4 2018-08
|
64
|
-
# PE 2018.1 5.5 2.4 2020-05
|
65
|
-
#
|
66
|
-
|
67
|
-
.simp_6_1: &simp_6_1
|
117
|
+
- bundle exec rake spec_clean
|
118
|
+
- bundle exec rake beaker:suites[default]
|
119
|
+
|
120
|
+
default-fips:
|
121
|
+
stage: acceptance
|
122
|
+
tags:
|
123
|
+
- beaker
|
124
|
+
<<: *cache_bundler
|
125
|
+
<<: *setup_bundler_env
|
68
126
|
variables:
|
69
|
-
|
127
|
+
BEAKER_fips: 'yes'
|
128
|
+
script:
|
129
|
+
- bundle exec rake spec_clean
|
130
|
+
- bundle exec rake beaker:suites[default]
|
70
131
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
stage: 'sanity'
|
81
|
-
tags: ['docker']
|
132
|
+
fips_from_fixtures:
|
133
|
+
stage: acceptance
|
134
|
+
tags:
|
135
|
+
- beaker
|
136
|
+
<<: *cache_bundler
|
137
|
+
<<: *setup_bundler_env
|
138
|
+
variables:
|
139
|
+
PUPPET_VERSION: '~> 5.3'
|
140
|
+
BEAKER_PUPPET_COLLECTION: 'puppet5'
|
82
141
|
script:
|
83
|
-
-
|
84
|
-
-
|
142
|
+
- bundle exec rake spec_clean
|
143
|
+
- bundle exec rake beaker:suites[fips_from_fixtures]
|
85
144
|
|
86
|
-
|
87
|
-
stage:
|
88
|
-
|
89
|
-
|
90
|
-
|
145
|
+
puppet_collections:
|
146
|
+
stage: acceptance
|
147
|
+
tags:
|
148
|
+
- beaker
|
149
|
+
<<: *cache_bundler
|
150
|
+
<<: *setup_bundler_env
|
151
|
+
variables:
|
152
|
+
PUPPET_VERSION: '~> 5.3'
|
153
|
+
BEAKER_PUPPET_COLLECTION: 'puppet5'
|
154
|
+
script:
|
155
|
+
- bundle exec rake spec_clean
|
156
|
+
- bundle exec rake beaker:suites[puppet_collections]
|
91
157
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
tags: ['docker']
|
158
|
+
windows:
|
159
|
+
stage: acceptance
|
160
|
+
tags:
|
161
|
+
- beaker
|
162
|
+
<<: *cache_bundler
|
163
|
+
<<: *setup_bundler_env
|
99
164
|
script:
|
100
|
-
-
|
101
|
-
|
102
|
-
policy: 'pull'
|
103
|
-
dependencies: []
|
104
|
-
artifacts:
|
105
|
-
when: 'always'
|
106
|
-
paths:
|
107
|
-
- 'Gemfile.lock'
|
108
|
-
|
109
|
-
# ==============================================================================
|
110
|
-
# acceptance tests
|
111
|
-
#
|
112
|
-
el-simp_6_1-default:
|
113
|
-
<<: *acceptance_base
|
114
|
-
<<: *simp_6_1
|
115
|
-
|
116
|
-
el-simp_6_1-default-fips:
|
117
|
-
<<: *acceptance_base
|
118
|
-
<<: *simp_6_1
|
119
|
-
variables:
|
120
|
-
BEAKER_fips: 'yes'
|
165
|
+
- bundle exec rake spec_clean
|
166
|
+
- bundle exec rake beaker:suites[windows]
|
data/.travis.yml
CHANGED
@@ -29,7 +29,7 @@ deploy:
|
|
29
29
|
condition: "($SKIP_PUBLISH != true)"
|
30
30
|
- provider: releases
|
31
31
|
api_key:
|
32
|
-
secure: "
|
32
|
+
secure: "I41p4aqjkrNDHJhZ5gWC4gzn7BVwEYRm5Q3PAxQRSIUDB/QTVgNqZx8YptkuIvSGpw8kIywyZg3NKdzGUO8aJJ0NlXapL7e9qQIigkYhdaCZjZFG5zIxdOFs4sVoz/6vnQT9JIcGWy7uS5xiNOulGvfEWU78+e+I9yPdT74RApve5VAVT/km5lV5ldRnwwehLnTx+volUlnOD8rwfizoVLqFTrfRfr4cVMF605UYyaiVxHF50hywFRZoAdVcMEhlLQnQXfz/ZsLMJLJm9eCpjQ989N0oX6theSLCcv7QtHcWMXydjWMcpuTfBZSFrwUVbC23uMOKTJVEWq5LMG3m2L6hP3//2gvUzGhOVLvoGuC+erboB7QoXdcoOgXY+dTZPMcPBxpArdDLWVQSLTvPs05QzpaUdRLVMC/kD1d1EudlEicgkNgNDBhBn3089nVmvKndbKLvj+23a5AQVVbs+8C0x+SJvTc9N2N+bmuH7jIJPrEvWK4xwcQa+g2M/EBv05jaEdSErlVa6B6UKCH0Lea9rpy1se9vn5OzpaaMCCJIpcpQqHDjo0PMAQXBSbqjKcBei6lR5fIFl5UO9gWP1v8PGPuCzGTBivQ92XlgV1TWXmdbJHwIuSbJx3Ali7Wp19RR4E4uHC+TPFssvgkh9ZLkORnWWS35wzzU1LkwWx0="
|
33
33
|
on:
|
34
34
|
tags: true
|
35
35
|
rvm: 2.4.4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
### 1.13.0 / 2018-11-09
|
2
|
+
* Make the SSG reporting consistent with the InSpec reporting
|
3
|
+
* Thanks to Liz Nemsick for the original result processing code
|
4
|
+
|
5
|
+
### 1.12.2 / 2018-10-25
|
6
|
+
* Skip most of fix_errata_on on windows platforms
|
7
|
+
|
1
8
|
### 1.12.1 / 2018-10-24
|
2
9
|
* Fall back to SSH file copies automatically when rsync does not work due to
|
3
10
|
test cases that affect ssh directly and that will cause new sessions to fail.
|
data/Gemfile
CHANGED
@@ -15,8 +15,9 @@ gem 'rake'
|
|
15
15
|
group :system_tests do
|
16
16
|
gem 'beaker'
|
17
17
|
gem 'beaker-rspec'
|
18
|
+
gem 'beaker-windows'
|
18
19
|
gem 'net-ssh'
|
19
|
-
gem 'puppet', ENV.fetch('PUPPET_VERSION', '~>
|
20
|
+
gem 'puppet', ENV.fetch('PUPPET_VERSION', '~> 5.0')
|
20
21
|
gem 'puppetlabs_spec_helper'
|
21
22
|
gem 'rubocop'
|
22
23
|
gem 'rubocop-rspec'
|
data/lib/simp/beaker_helpers.rb
CHANGED
@@ -235,7 +235,13 @@ module Simp::BeakerHelpers
|
|
235
235
|
puts '== configuring FIPS mode on SUTs'
|
236
236
|
puts ' -- (use BEAKER_fips=no to disable)'
|
237
237
|
parallel = (ENV['BEAKER_SIMP_parallel'] == 'yes')
|
238
|
+
|
238
239
|
block_on(suts, :run_in_parallel => parallel) do |sut|
|
240
|
+
if sut[:platform] =~ /windows/
|
241
|
+
puts " -- SKIPPING #{sut} because it is windows"
|
242
|
+
next
|
243
|
+
end
|
244
|
+
|
239
245
|
puts " -- enabling FIPS on '#{sut}'"
|
240
246
|
|
241
247
|
# We need to use FIPS compliant algorithms and keylengths as per the FIPS
|
@@ -366,73 +372,82 @@ module Simp::BeakerHelpers
|
|
366
372
|
end
|
367
373
|
end
|
368
374
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
#
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
u[5] =~ %r{^(/|/dev/.*|/s?bin/?.*|/proc/?.*)$} ? [nil] : [u[0], u[5]]
|
399
|
-
end
|
400
|
-
]
|
375
|
+
def linux_errata( sut )
|
376
|
+
# We need to be able to flip between server and client without issue
|
377
|
+
on sut, 'puppet resource group puppet gid=52'
|
378
|
+
on sut, 'puppet resource user puppet comment="Puppet" gid="52" uid="52" home="/var/lib/puppet" managehome=true'
|
379
|
+
|
380
|
+
# This may not exist in docker so just skip the whole thing
|
381
|
+
if sut.file_exist?('/etc/ssh')
|
382
|
+
# SIMP uses a central ssh key location so we prep that spot in case we
|
383
|
+
# flip to the SIMP SSH module.
|
384
|
+
on(sut, 'mkdir -p /etc/ssh/local_keys')
|
385
|
+
on(sut, 'chown -R root:root /etc/ssh/local_keys')
|
386
|
+
on(sut, 'chmod 755 /etc/ssh/local_keys')
|
387
|
+
|
388
|
+
user_info = on(sut, 'getent passwd').stdout.lines
|
389
|
+
|
390
|
+
cmd = []
|
391
|
+
# Hash of user => home_dir
|
392
|
+
# Exclude silly directories
|
393
|
+
# * /
|
394
|
+
# * /dev/*
|
395
|
+
# * /s?bin
|
396
|
+
# * /proc
|
397
|
+
user_info = Hash[
|
398
|
+
user_info.map do |u|
|
399
|
+
u.strip!
|
400
|
+
u = u.split(':')
|
401
|
+
u[5] =~ %r{^(/|/dev/.*|/s?bin/?.*|/proc/?.*)$} ? [nil] : [u[0], u[5]]
|
402
|
+
end
|
403
|
+
]
|
401
404
|
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
+
user_info.keys.each do |user|
|
406
|
+
src_file = "#{user_info[user]}/.ssh/authorized_keys"
|
407
|
+
tgt_file = "/etc/ssh/local_keys/#{user}"
|
405
408
|
|
406
|
-
|
407
|
-
end
|
409
|
+
on(sut, %{if [ -f "#{src_file}" ]; then cp -a -f "#{src_file}" "#{tgt_file}" && chmod 644 "#{tgt_file}"; fi}, :silent => true)
|
408
410
|
end
|
411
|
+
end
|
412
|
+
|
413
|
+
# SIMP uses structured facts, therefore stringify_facts must be disabled
|
414
|
+
unless ENV['BEAKER_stringify_facts'] == 'yes'
|
415
|
+
on sut, 'puppet config set stringify_facts false'
|
416
|
+
end
|
409
417
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
418
|
+
# Occasionally we run across something similar to BKR-561, so to ensure we
|
419
|
+
# at least have the host defaults:
|
420
|
+
#
|
421
|
+
# :hieradatadir is used as a canary here; it isn't the only missing key
|
422
|
+
unless sut.host_hash.key? :hieradatadir
|
423
|
+
configure_type_defaults_on(sut)
|
424
|
+
end
|
414
425
|
|
415
|
-
|
416
|
-
|
417
|
-
#
|
418
|
-
# :hieradatadir is used as a canary here; it isn't the only missing key
|
419
|
-
unless sut.host_hash.key? :hieradatadir
|
420
|
-
configure_type_defaults_on(sut)
|
421
|
-
end
|
426
|
+
if fact_on(sut, 'osfamily') == 'RedHat'
|
427
|
+
enable_yum_repos_on(sut)
|
422
428
|
|
423
|
-
|
424
|
-
|
429
|
+
# net-tools required for netstat utility being used by be_listening
|
430
|
+
if fact_on(sut, 'operatingsystemmajrelease') == '7'
|
431
|
+
pp = <<-EOS
|
432
|
+
package { 'net-tools': ensure => installed }
|
433
|
+
EOS
|
434
|
+
apply_manifest_on(sut, pp, :catch_failures => false)
|
435
|
+
end
|
425
436
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
EOS
|
431
|
-
apply_manifest_on(sut, pp, :catch_failures => false)
|
432
|
-
end
|
437
|
+
# Clean up YUM prior to starting our test runs.
|
438
|
+
on(sut, 'yum clean all')
|
439
|
+
end
|
440
|
+
end
|
433
441
|
|
434
|
-
|
435
|
-
|
442
|
+
# Apply known OS fixes we need to run Beaker on each SUT
|
443
|
+
def fix_errata_on( suts = hosts )
|
444
|
+
parallel = (ENV['BEAKER_SIMP_parallel'] == 'yes')
|
445
|
+
block_on(suts, :run_in_parallel => parallel) do |sut|
|
446
|
+
if sut[:platform] =~ /windows/
|
447
|
+
puts " -- SKIPPING #{sut} because it is windows"
|
448
|
+
# DO NOTHING
|
449
|
+
else
|
450
|
+
linux_errata(sut)
|
436
451
|
end
|
437
452
|
end
|
438
453
|
|
@@ -442,7 +457,6 @@ module Simp::BeakerHelpers
|
|
442
457
|
end
|
443
458
|
end
|
444
459
|
|
445
|
-
|
446
460
|
# Generate a fake openssl CA + certs for each host on a given SUT
|
447
461
|
#
|
448
462
|
# The directory structure is the same as what FakeCA drops into keydist/
|
@@ -597,6 +611,11 @@ done
|
|
597
611
|
def activate_interfaces(hosts)
|
598
612
|
parallel = (ENV['BEAKER_SIMP_parallel'] == 'yes')
|
599
613
|
block_on(hosts, :run_in_parallel => parallel) do |host|
|
614
|
+
if host[:platform] =~ /windows/
|
615
|
+
puts " -- SKIPPING #{host} because it is windows"
|
616
|
+
next
|
617
|
+
end
|
618
|
+
|
600
619
|
interfaces_fact = retry_on(host,'facter interfaces', verbose: true).stdout
|
601
620
|
|
602
621
|
interfaces = interfaces_fact.strip.split(',')
|
@@ -144,6 +144,8 @@ module Simp::BeakerHelpers
|
|
144
144
|
:skipped => [],
|
145
145
|
:overridden => []
|
146
146
|
},
|
147
|
+
:score => 0,
|
148
|
+
:report => nil,
|
147
149
|
:profiles => {}
|
148
150
|
}
|
149
151
|
|
@@ -188,14 +190,17 @@ module Simp::BeakerHelpers
|
|
188
190
|
|
189
191
|
if status == /^fail/
|
190
192
|
status = :failed
|
193
|
+
color = 'red'
|
191
194
|
else
|
192
195
|
status = :passed
|
196
|
+
color = 'green'
|
193
197
|
end
|
194
198
|
else
|
195
199
|
status = :skipped
|
200
|
+
color = 'yellow'
|
196
201
|
end
|
197
202
|
|
198
|
-
stats[:global][status] << title
|
203
|
+
stats[:global][status] << title.to_s.color
|
199
204
|
|
200
205
|
stats[:profiles][profile_name][:controls][title][:status] = status
|
201
206
|
stats[:profiles][profile_name][:controls][title][:source] = control['source_location']['ref']
|
@@ -261,6 +266,7 @@ module Simp::BeakerHelpers
|
|
261
266
|
|
262
267
|
report << "\n Score: #{score}%"
|
263
268
|
|
269
|
+
stats[:score] = score
|
264
270
|
stats[:report] = report.join("\n")
|
265
271
|
|
266
272
|
return stats
|
@@ -61,6 +61,16 @@ module Simp::BeakerHelpers
|
|
61
61
|
'datastream' => 'ssg-centos7-ds.xml'
|
62
62
|
}
|
63
63
|
}
|
64
|
+
},
|
65
|
+
'OracleLinux' => {
|
66
|
+
'7' => {
|
67
|
+
'required_packages' => EL_PACKAGES,
|
68
|
+
'ssg' => {
|
69
|
+
'profile_target' => 'ol7',
|
70
|
+
'build_target' => 'ol7',
|
71
|
+
'datastream' => 'ssg-ol7-ds.xml'
|
72
|
+
}
|
73
|
+
}
|
64
74
|
}
|
65
75
|
}
|
66
76
|
|
@@ -116,7 +126,7 @@ module Simp::BeakerHelpers
|
|
116
126
|
cmd += ' --remediate'
|
117
127
|
end
|
118
128
|
|
119
|
-
cmd += %( --profile #{profile} --results #{@result_file}.xml --report #{@result_file}.html #{OS_INFO[@os][@os_rel]['ssg']['datastream']})
|
129
|
+
cmd += %( --fetch-remote-resources --profile #{profile} --results #{@result_file}.xml --report #{@result_file}.html #{OS_INFO[@os][@os_rel]['ssg']['datastream']})
|
120
130
|
|
121
131
|
# We accept all exit codes here because there have occasionally been
|
122
132
|
# failures in the SSG content and we're not testing that.
|
@@ -131,6 +141,122 @@ module Simp::BeakerHelpers
|
|
131
141
|
end
|
132
142
|
end
|
133
143
|
|
144
|
+
# Output the report
|
145
|
+
#
|
146
|
+
# @param report
|
147
|
+
# The results Hash
|
148
|
+
#
|
149
|
+
def write_report(report)
|
150
|
+
File.open(File.join(@output_dir, @result_file) + '.report', 'w') do |fh|
|
151
|
+
fh.puts(report[:report].uncolor)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Retrieve a subset of test results based on a match to
|
156
|
+
# filter
|
157
|
+
#
|
158
|
+
# FIXME:
|
159
|
+
# - This is a hack! Should be searching for rules based on a set
|
160
|
+
# set of STIG ids, but don't see those ids in the oscap results xml.
|
161
|
+
# Further mapping is required...
|
162
|
+
# - Create the same report structure as inspec
|
163
|
+
def process_ssg_results(filter=nil)
|
164
|
+
self.class.process_ssg_results(File.join(@output_dir, @result_file) + '.xml', filter)
|
165
|
+
end
|
166
|
+
|
167
|
+
# Process the results of an SSG run
|
168
|
+
#
|
169
|
+
# @return [Hash] A Hash of statistics and a formatted report
|
170
|
+
#
|
171
|
+
def self.process_ssg_results(result_file, filter=nil)
|
172
|
+
require 'highline'
|
173
|
+
require 'nokogiri'
|
174
|
+
|
175
|
+
HighLine.colorize_strings
|
176
|
+
|
177
|
+
fail("Could not find results XML file '#{result_file}'") unless File.exist?(result_file)
|
178
|
+
|
179
|
+
puts "Processing #{result_file}"
|
180
|
+
doc = Nokogiri::XML(File.open(result_file))
|
181
|
+
|
182
|
+
# because I'm lazy
|
183
|
+
doc.remove_namespaces!
|
184
|
+
|
185
|
+
if filter
|
186
|
+
# XPATH to get the pertinent test results:
|
187
|
+
# Any node named 'rule-result' for which the attribute 'idref'
|
188
|
+
# contains filter
|
189
|
+
result_nodes = doc.xpath("//rule-result[contains(@idref,'#{filter}')]")
|
190
|
+
else
|
191
|
+
result_nodes = doc.xpath('//rule-result')
|
192
|
+
end
|
193
|
+
|
194
|
+
stats = {
|
195
|
+
:failed => [],
|
196
|
+
:passed => [],
|
197
|
+
:skipped => [],
|
198
|
+
:filter => filter.nil? ? 'No Filter' : filter,
|
199
|
+
:report => nil,
|
200
|
+
:score => 0
|
201
|
+
}
|
202
|
+
|
203
|
+
result_nodes.each do |rule_result|
|
204
|
+
# Results are recorded in a child node named 'result'.
|
205
|
+
# Within the 'result' node, the actual result string is
|
206
|
+
# the content of that node's (only) child node.
|
207
|
+
|
208
|
+
result = rule_result.element_children.at('result')
|
209
|
+
result_id = rule_result.attributes['idref'].value.to_s
|
210
|
+
result_value = [
|
211
|
+
'Title: ' + doc.xpath("//Rule[@id='#{result_id}']/title/text()").first.to_s,
|
212
|
+
' ID: ' + result_id
|
213
|
+
].join("\n")
|
214
|
+
|
215
|
+
if result.child.content == 'fail'
|
216
|
+
stats[:failed] << result_value.red
|
217
|
+
elsif result.child.content == 'pass'
|
218
|
+
stats[:passed] << result_value.green
|
219
|
+
else
|
220
|
+
stats[:skipped] << result_value.yellow
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
report = []
|
225
|
+
|
226
|
+
report << '== Skipped =='
|
227
|
+
report << stats[:skipped].join("\n")
|
228
|
+
|
229
|
+
report << '== Passed =='
|
230
|
+
report << stats[:passed].join("\n")
|
231
|
+
|
232
|
+
report << '== Failed =='
|
233
|
+
report << stats[:failed].join("\n")
|
234
|
+
|
235
|
+
|
236
|
+
report << 'OSCAP Statistics:'
|
237
|
+
|
238
|
+
if filter
|
239
|
+
report << " * Used Filter: 'idref' ~= '#{stats[:filter]}'"
|
240
|
+
end
|
241
|
+
|
242
|
+
report << " * Passed: #{stats[:passed].count.to_s.green}"
|
243
|
+
report << " * Failed: #{stats[:failed].count.to_s.red}"
|
244
|
+
report << " * Skipped: #{stats[:skipped].count.to_s.yellow}"
|
245
|
+
|
246
|
+
score = 0
|
247
|
+
|
248
|
+
if (stats[:passed].count + stats[:failed].count) > 0
|
249
|
+
score = ((stats[:passed].count.to_f/(stats[:passed].count + stats[:failed].count)) * 100.0).round(0)
|
250
|
+
end
|
251
|
+
|
252
|
+
report << "\n Score: #{score}%"
|
253
|
+
|
254
|
+
stats[:score] = score
|
255
|
+
stats[:report] = report.join("\n")
|
256
|
+
|
257
|
+
return stats
|
258
|
+
end
|
259
|
+
|
134
260
|
private
|
135
261
|
|
136
262
|
def get_ssg_datastream
|
data/simp-beaker-helpers.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_runtime_dependency 'beaker-vagrant' , '~> 0.5'
|
26
26
|
s.add_runtime_dependency 'beaker-puppet_install_helper', '~> 0.9'
|
27
27
|
s.add_runtime_dependency 'highline' , '~> 1.6'
|
28
|
+
s.add_runtime_dependency 'nokogiri' , '~> 1.8'
|
28
29
|
|
29
30
|
# Because net-telnet dropped support for Ruby < 2.3.0
|
30
31
|
# TODO: Update this when we no longer support Ruby 2.1.9 (should be October 2018)
|
@@ -1,3 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
if ENV['BEAKER_HYPERVISOR']
|
3
|
+
hypervisor = ENV['BEAKER_HYPERVISOR']
|
4
|
+
else
|
5
|
+
hypervisor = 'vagrant'
|
6
|
+
end
|
7
|
+
-%>
|
1
8
|
HOSTS:
|
2
9
|
server-el7:
|
3
10
|
roles:
|
@@ -5,18 +12,21 @@ HOSTS:
|
|
5
12
|
- default
|
6
13
|
- master
|
7
14
|
- el7
|
8
|
-
platform:
|
9
|
-
box:
|
10
|
-
hypervisor:
|
15
|
+
platform: el-7-x86_64
|
16
|
+
box: centos/7
|
17
|
+
hypervisor: <%= hypervisor %>
|
11
18
|
|
12
19
|
server-el6:
|
13
20
|
roles:
|
14
21
|
- el6
|
15
|
-
platform:
|
16
|
-
box:
|
17
|
-
hypervisor:
|
22
|
+
platform: el-6-x86_64
|
23
|
+
box: centos/6
|
24
|
+
hypervisor: <%= hypervisor %>
|
18
25
|
|
19
26
|
CONFIG:
|
20
27
|
log_level: verbose
|
21
|
-
type:
|
28
|
+
type: aio
|
22
29
|
vagrant_memsize: 256
|
30
|
+
<% if ENV['BEAKER_PUPPET_COLLECTION'] -%>
|
31
|
+
puppet_collection: <%= ENV['BEAKER_PUPPET_COLLECTION'] %>
|
32
|
+
<% end -%>
|
@@ -1,3 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
if ENV['BEAKER_HYPERVISOR']
|
3
|
+
hypervisor = ENV['BEAKER_HYPERVISOR']
|
4
|
+
else
|
5
|
+
hypervisor = 'vagrant'
|
6
|
+
end
|
7
|
+
-%>
|
1
8
|
HOSTS:
|
2
9
|
server-el7:
|
3
10
|
roles:
|
@@ -5,19 +12,19 @@ HOSTS:
|
|
5
12
|
- default
|
6
13
|
- master
|
7
14
|
- el7
|
8
|
-
platform:
|
9
|
-
box:
|
10
|
-
hypervisor:
|
15
|
+
platform: el-7-x86_64
|
16
|
+
box: centos/7
|
17
|
+
hypervisor: <%= hypervisor %>
|
11
18
|
|
12
19
|
server-el6:
|
13
20
|
roles:
|
14
21
|
- el6
|
15
|
-
platform:
|
16
|
-
box:
|
17
|
-
hypervisor:
|
22
|
+
platform: el-6-x86_64
|
23
|
+
box: centos/6
|
24
|
+
hypervisor: <%= hypervisor %>
|
18
25
|
|
19
26
|
CONFIG:
|
20
27
|
log_level: verbose
|
21
|
-
type:
|
28
|
+
type: aio
|
22
29
|
puppet_collection: puppet5
|
23
30
|
vagrant_memsize: 256
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
require 'yaml'
|
3
|
+
require 'openssl'
|
4
|
+
require 'beaker-rspec'
|
5
|
+
require 'simp/beaker_helpers'
|
6
|
+
include Simp::BeakerHelpers
|
7
|
+
|
8
|
+
require 'beaker/puppet_install_helper'
|
9
|
+
require 'beaker-windows'
|
10
|
+
include BeakerWindows::Path
|
11
|
+
include BeakerWindows::Powershell
|
12
|
+
include BeakerWindows::Registry
|
13
|
+
include BeakerWindows::WindowsFeature
|
14
|
+
|
15
|
+
unless ENV['BEAKER_provision'] == 'no'
|
16
|
+
hosts.each do |host|
|
17
|
+
# Install Puppet
|
18
|
+
if host.is_pe?
|
19
|
+
install_pe
|
20
|
+
else
|
21
|
+
install_puppet
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
hosts.each do |host|
|
27
|
+
# https://petersouter.co.uk/testing-windows-puppet-with-beaker/
|
28
|
+
case host['platform']
|
29
|
+
when /windows/
|
30
|
+
GEOTRUST_GLOBAL_CA = <<-EOM.freeze
|
31
|
+
-----BEGIN CERTIFICATE-----
|
32
|
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
33
|
+
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
34
|
+
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
35
|
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
36
|
+
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
37
|
+
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
38
|
+
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
39
|
+
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
40
|
+
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
41
|
+
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
42
|
+
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
43
|
+
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
44
|
+
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
45
|
+
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
46
|
+
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
47
|
+
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
48
|
+
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
49
|
+
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
50
|
+
-----END CERTIFICATE-----
|
51
|
+
EOM
|
52
|
+
install_cert_on_windows(host, 'geotrustglobal', GEOTRUST_GLOBAL_CA)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
RSpec.configure do |c|
|
58
|
+
# ensure that environment OS is ready on each host
|
59
|
+
fix_errata_on(hosts)
|
60
|
+
|
61
|
+
# Readable test descriptions
|
62
|
+
c.formatter = :documentation
|
63
|
+
|
64
|
+
# Configure all nodes in nodeset
|
65
|
+
c.before :suite do
|
66
|
+
begin
|
67
|
+
nonwin = hosts.dup
|
68
|
+
nonwin.delete_if {|h| h[:platform] =~ /windows/ }
|
69
|
+
# Install modules and dependencies from spec/fixtures/modules
|
70
|
+
copy_fixture_modules_to( nonwin )
|
71
|
+
begin
|
72
|
+
server = only_host_with_role(nonwin, 'server')
|
73
|
+
rescue ArgumentError => e
|
74
|
+
server = only_host_with_role(nonwin, 'default')
|
75
|
+
end
|
76
|
+
# Generate and install PKI certificates on each SUT
|
77
|
+
Dir.mktmpdir do |cert_dir|
|
78
|
+
run_fake_pki_ca_on(server, nonwin, cert_dir )
|
79
|
+
nonwin.each{ |sut| copy_pki_to( sut, cert_dir, '/etc/pki/simp-testing' )}
|
80
|
+
end
|
81
|
+
|
82
|
+
# add PKI keys
|
83
|
+
copy_keydist_to(server)
|
84
|
+
rescue StandardError, ScriptError => e
|
85
|
+
if ENV['PRY']
|
86
|
+
require 'pry'; binding.pry
|
87
|
+
else
|
88
|
+
raise e
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
hosts.each do |host|
|
96
|
+
describe 'windows hosts coexising with linux hosts' do
|
97
|
+
context "on #{host}" do
|
98
|
+
it 'should have puppet installed' do
|
99
|
+
on(host, 'puppet --version')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<%
|
2
|
+
if ENV['BEAKER_HYPERVISOR']
|
3
|
+
hypervisor = ENV['BEAKER_HYPERVISOR']
|
4
|
+
else
|
5
|
+
hypervisor = 'vagrant'
|
6
|
+
end
|
7
|
+
-%>
|
8
|
+
HOSTS:
|
9
|
+
win:
|
10
|
+
roles:
|
11
|
+
- windows
|
12
|
+
- ad
|
13
|
+
platform: windows-server-amd64
|
14
|
+
box: opentable/win-2012r2-standard-amd64-nocm # VBOX ONLY
|
15
|
+
hypervisor: <%= hypervisor %>
|
16
|
+
vagrant_memsize: 2048
|
17
|
+
vagrant_cpus: 2
|
18
|
+
user: vagrant
|
19
|
+
communicator: winrm
|
20
|
+
is_cygwin: false
|
21
|
+
centos7:
|
22
|
+
roles:
|
23
|
+
- default
|
24
|
+
- client
|
25
|
+
platform: el-7-x86_64
|
26
|
+
box: centos/7
|
27
|
+
hypervisor: <%= hypervisor %>
|
28
|
+
centos6:
|
29
|
+
roles:
|
30
|
+
- client
|
31
|
+
platform: el-6-x86_64
|
32
|
+
box: centos/6
|
33
|
+
hypervisor: <%= hypervisor %>
|
34
|
+
CONFIG:
|
35
|
+
log_level: verbose
|
36
|
+
type: aio
|
37
|
+
vagrant_memsize: 256
|
38
|
+
<% if ENV['BEAKER_PUPPET_ENVIRONMENT'] -%>
|
39
|
+
puppet_environment: <%= ENV['BEAKER_PUPPET_ENVIRONMENT'] %>
|
40
|
+
<% end -%>
|
@@ -80,11 +80,11 @@ describe 'Simp::BeakerHelpers' do
|
|
80
80
|
|
81
81
|
# this logic won't work properly without code changes that just aren't worth it because
|
82
82
|
# Puppet 4 is MD soon....
|
83
|
-
it "maps to appropriate Puppet version when '<' operator specified in version" do
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
83
|
+
# it "maps to appropriate Puppet version when '<' operator specified in version" do
|
84
|
+
# pending 'fails because matches 4.x table'
|
85
|
+
# allow(@helper).to receive(:`).with('gem search -ra -e puppet').and_return(gem_search_results)
|
86
|
+
# expect( @helper.latest_puppet_agent_version_for('< 5.5') ).to match /5.4.0/
|
87
|
+
# end
|
88
88
|
|
89
89
|
it "maps to appropriate Puppet version when comma-separated operators specified in version" do
|
90
90
|
allow(@helper).to receive(:`).with('gem search -ra -e puppet').and_return(gem_search_results)
|
@@ -22,19 +22,4 @@ RSpec.configure do |c|
|
|
22
22
|
|
23
23
|
# Readable test descriptions
|
24
24
|
c.formatter = :documentation
|
25
|
-
|
26
|
-
# Configure all nodes in nodeset
|
27
|
-
c.before :suite do
|
28
|
-
begin
|
29
|
-
# Install modules and dependencies from spec/fixtures/modules
|
30
|
-
copy_fixture_modules_to( hosts )
|
31
|
-
STDOUT.flush
|
32
|
-
rescue StandardError, ScriptError => e
|
33
|
-
if ENV['PRY']
|
34
|
-
require 'pry'; binding.pry
|
35
|
-
else
|
36
|
-
raise e
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simp-beaker-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Tessmer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: beaker
|
@@ -109,6 +109,20 @@ dependencies:
|
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '1.6'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: nokogiri
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.8'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.8'
|
112
126
|
- !ruby/object:Gem::Dependency
|
113
127
|
name: net-telnet
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,8 +151,7 @@ dependencies:
|
|
137
151
|
- - "~>"
|
138
152
|
- !ruby/object:Gem::Version
|
139
153
|
version: 0.57.2
|
140
|
-
description:
|
141
|
-
Beaker helper methods to help scaffold SIMP acceptance tests
|
154
|
+
description: " Beaker helper methods to help scaffold SIMP acceptance tests\n"
|
142
155
|
email: simp@simp-project.org
|
143
156
|
executables: []
|
144
157
|
extensions: []
|
@@ -180,6 +193,9 @@ files:
|
|
180
193
|
- spec/acceptance/suites/puppet_collections/00_default_spec.rb
|
181
194
|
- spec/acceptance/suites/puppet_collections/metadata.yml
|
182
195
|
- spec/acceptance/suites/puppet_collections/nodesets/default.yml
|
196
|
+
- spec/acceptance/suites/windows/00_default_spec.rb
|
197
|
+
- spec/acceptance/suites/windows/metadata.yml
|
198
|
+
- spec/acceptance/suites/windows/nodesets/default.yml
|
183
199
|
- spec/lib/simp/beaker_helpers_spec.rb
|
184
200
|
- spec/spec_helper.rb
|
185
201
|
- spec/spec_helper_acceptance.rb
|