puppet-check 1.5.0 → 1.5.1
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 +4 -4
- data/CHANGELOG.md +12 -4
- data/README.md +3 -2
- data/lib/puppet-check.rb +19 -11
- data/lib/puppet-check/cli.rb +2 -2
- data/lib/puppet-check/data_parser.rb +15 -16
- data/lib/puppet-check/puppet_parser.rb +2 -6
- data/lib/puppet-check/rspec_puppet_support.rb +12 -2
- data/lib/puppet-check/ruby_parser.rb +4 -6
- data/lib/puppet-check/tasks.rb +16 -12
- data/spec/puppet-check/data_parser_spec.rb +9 -9
- data/spec/puppet-check/puppet_parser_spec.rb +14 -11
- data/spec/puppet-check/tasks_spec.rb +13 -3
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75505f645bd001e57219d134a49f1d577154bef7
|
4
|
+
data.tar.gz: 33c2a820796a29b069e563b584583499cb826af5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9be87827795fa8f90e546077b37ff50834a3cd75339e757760d4261506dc36b30be6435b718e2e7c3b87ebed1917632945049c15b1b5aa189b9e1bd18d9117a
|
7
|
+
data.tar.gz: 02d65c5713c1f9737859a92315c879e8c391dd68579c548a8450c31a4267fe469d3a9b58997348bb6040ca89fd1af55542c6b48a4ed8e085b5771477c6ef20d8
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,20 @@
|
|
1
|
+
### 1.5.1
|
2
|
+
- Slight cleanup and optimization.
|
3
|
+
- Fixed check for no spec directories during RSpec Puppet helper.
|
4
|
+
- Fixed check for semantic versioning in `metadata.json` for numbering > 9.
|
5
|
+
- Accounted for Puppet syntax validation output bugfix in 5.3.
|
6
|
+
- Fix bad symlink for module fixture during RSpec Puppet.
|
7
|
+
- Updating Beaker Rake task usage.
|
8
|
+
|
1
9
|
### 1.5.0
|
2
|
-
- Maximum Puppet version increased from
|
10
|
+
- Maximum Puppet version increased from 4 to 5.
|
3
11
|
- Added capability to check EYAML (experimental).
|
4
12
|
- Test Kitchen frontend interface.
|
5
13
|
- Updated Puppet error output for Puppet 5 differences.
|
6
14
|
- Slight optimization for smaller test sets.
|
7
|
-
- Suppress constant redefinition warnings from Octocatalog-
|
8
|
-
- Changed FileName cop to reflect change in RuboCop >= 0.
|
9
|
-
- Entire module is now symlinked into `spec/fixtures/modules` during
|
15
|
+
- Suppress constant redefinition warnings from Octocatalog-Diff's Puppet code reuse.
|
16
|
+
- Changed FileName cop to reflect change in RuboCop >= 0.50.
|
17
|
+
- Entire module is now symlinked into `spec/fixtures/modules` during RSpec Puppet testing (formerly specific components).
|
10
18
|
|
11
19
|
### 1.4.1
|
12
20
|
- Support for using SVN to download external module dependencies for RSpec Puppet.
|
data/README.md
CHANGED
@@ -260,9 +260,10 @@ Example:
|
|
260
260
|
Note that `args` will be ignored during `git pull`, `svn update`, and `hg pull/hg update` when the modules are updated instead of freshly cloned.
|
261
261
|
|
262
262
|
#### puppetcheck:beaker
|
263
|
-
|
263
|
+
This task serves as a frontend to the `beaker_quickstart:run_test[hypervisor]` rake task that Beaker provides. It merely provides a convenient unified frontend for the task and automated as part of the `puppetcheck` tasks. Note that you should still provide a hypervisor argument to the rake task when executed individually (e.g. `rake puppetcheck:beaker[vagrant]`). The Vagrant hypervisor will be selected by default when executed as part of the `puppetcheck` task. Vagrant will also be selected by default if no hypervisor argument is provided to the individual task.
|
264
264
|
|
265
|
-
|
265
|
+
#### puppetcheck:kitchen
|
266
|
+
This task serves as a frontend to the `kitchen:all` rake task that Test Kitchen provides. It merely provides a convenient unified frontend for the task and automated as part of the `puppetcheck` tasks.
|
266
267
|
|
267
268
|
### API
|
268
269
|
|
data/lib/puppet-check.rb
CHANGED
@@ -96,7 +96,7 @@ class PuppetCheck
|
|
96
96
|
# traverse the unique paths and return all files
|
97
97
|
paths.uniq.each do |path|
|
98
98
|
if File.directory?(path)
|
99
|
-
files.concat(Dir.glob("#{path}/**/*").select { |subpath| File.file?
|
99
|
+
files.concat(Dir.glob("#{path}/**/*").select { |subpath| File.file?(subpath) })
|
100
100
|
elsif File.file?(path)
|
101
101
|
files.push(path)
|
102
102
|
end
|
@@ -112,23 +112,31 @@ class PuppetCheck
|
|
112
112
|
|
113
113
|
# categorize and pass the files out to the parsers to determine their status
|
114
114
|
def execute_parsers(files, future, style, public, private, pl_args, rc_args)
|
115
|
+
# check manifests
|
115
116
|
manifests, files = files.partition { |file| File.extname(file) == '.pp' }
|
116
|
-
PuppetParser.manifest(manifests, future, style, pl_args)
|
117
|
+
PuppetParser.manifest(manifests, future, style, pl_args) unless manifests.empty?
|
118
|
+
# check puppet templates
|
117
119
|
templates, files = files.partition { |file| File.extname(file) == '.epp' }
|
118
|
-
PuppetParser.template(templates)
|
120
|
+
PuppetParser.template(templates) unless templates.empty?
|
121
|
+
# check ruby files
|
119
122
|
rubies, files = files.partition { |file| File.extname(file) == '.rb' }
|
120
|
-
RubyParser.ruby(rubies, style, rc_args)
|
123
|
+
RubyParser.ruby(rubies, style, rc_args) unless rubies.empty?
|
124
|
+
# check ruby templates
|
121
125
|
templates, files = files.partition { |file| File.extname(file) == '.erb' }
|
122
|
-
RubyParser.template(templates)
|
126
|
+
RubyParser.template(templates) unless templates.empty?
|
127
|
+
# check yaml data
|
123
128
|
yamls, files = files.partition { |file| File.extname(file) =~ /\.ya?ml$/ }
|
124
|
-
DataParser.yaml(yamls)
|
129
|
+
DataParser.yaml(yamls) unless yamls.empty?
|
130
|
+
# check json data
|
125
131
|
jsons, files = files.partition { |file| File.extname(file) == '.json' }
|
126
|
-
DataParser.json(jsons)
|
127
|
-
# block this for now
|
132
|
+
DataParser.json(jsons) unless jsons.empty?
|
133
|
+
# check eyaml data; block this for now
|
128
134
|
# eyamls, files = files.partition { |file| File.extname(file) =~ /\.eya?ml$/ }
|
129
|
-
# DataParser.eyaml(eyamls, public, private)
|
135
|
+
# DataParser.eyaml(eyamls, public, private) unless eyamls.empty?
|
136
|
+
# check misc ruby
|
130
137
|
librarians, files = files.partition { |file| File.basename(file) =~ /(?:Puppet|Module|Rake|Gem)file$/ }
|
131
|
-
RubyParser.librarian(librarians, style, rc_args)
|
132
|
-
|
138
|
+
RubyParser.librarian(librarians, style, rc_args) unless librarians.empty?
|
139
|
+
# ignore everything else
|
140
|
+
self.class.settings[:ignored_files].concat(files)
|
133
141
|
end
|
134
142
|
end
|
data/lib/puppet-check/cli.rb
CHANGED
@@ -9,7 +9,7 @@ class PuppetCheck::CLI
|
|
9
9
|
parse(args)
|
10
10
|
raise 'puppet-check: no paths specified; try using --help' if args.empty?
|
11
11
|
|
12
|
-
# run PuppetCheck
|
12
|
+
# run PuppetCheck with specified paths
|
13
13
|
PuppetCheck.new.run(args)
|
14
14
|
end
|
15
15
|
|
@@ -24,7 +24,7 @@ class PuppetCheck::CLI
|
|
24
24
|
|
25
25
|
# base options
|
26
26
|
opts.on('--version', 'Display the current version.') do
|
27
|
-
puts 'puppet-check 1.5.
|
27
|
+
puts 'puppet-check 1.5.1'
|
28
28
|
exit 0
|
29
29
|
end
|
30
30
|
|
@@ -4,8 +4,6 @@ require_relative '../puppet-check'
|
|
4
4
|
class DataParser
|
5
5
|
# checks yaml (.yaml/.yml)
|
6
6
|
def self.yaml(files)
|
7
|
-
return if files.empty?
|
8
|
-
|
9
7
|
require 'yaml'
|
10
8
|
|
11
9
|
files.each do |file|
|
@@ -18,7 +16,7 @@ class DataParser
|
|
18
16
|
warnings = []
|
19
17
|
|
20
18
|
# perform some rudimentary hiera checks if data exists and is hieradata
|
21
|
-
warnings = hiera(parsed, file) unless
|
19
|
+
warnings = hiera(parsed, file) unless parsed.nil? || (File.basename(file) == 'hiera.yaml')
|
22
20
|
|
23
21
|
next PuppetCheck.settings[:warning_files].push("#{file}:\n#{warnings.join("\n")}") unless warnings.empty?
|
24
22
|
PuppetCheck.settings[:clean_files].push(file.to_s)
|
@@ -28,15 +26,19 @@ class DataParser
|
|
28
26
|
|
29
27
|
# checks eyaml (.eyaml/.eyml)
|
30
28
|
def self.eyaml(files, public, private)
|
31
|
-
return if files.empty?
|
32
|
-
|
33
29
|
require 'openssl'
|
34
30
|
|
35
31
|
# keys specified?
|
36
|
-
|
32
|
+
if public.nil? || private.nil?
|
33
|
+
PuppetCheck.settings[:ignored_files].concat(files)
|
34
|
+
return warn 'Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.'
|
35
|
+
end
|
37
36
|
|
38
37
|
# keys exist?
|
39
|
-
|
38
|
+
unless File.file?(public) && File.file?(private)
|
39
|
+
PuppetCheck.settings[:ignored_files].concat(files)
|
40
|
+
return warn 'Specified Public X509 and/or Private RSA PKCS7 certs do not exist. EYAML checks will not be executed.'
|
41
|
+
end
|
40
42
|
|
41
43
|
# setup decryption
|
42
44
|
rsa = OpenSSL::PKey::RSA.new(File.read(private))
|
@@ -59,7 +61,7 @@ class DataParser
|
|
59
61
|
warnings = []
|
60
62
|
|
61
63
|
# perform some rudimentary hiera checks if data exists and is hieradata
|
62
|
-
warnings = hiera(parsed, file) unless
|
64
|
+
warnings = hiera(parsed, file) unless parsed.nil? || (File.basename(file) == 'hiera.yaml')
|
63
65
|
|
64
66
|
next PuppetCheck.settings[:warning_files].push("#{file}:\n#{warnings.join("\n")}") unless warnings.empty?
|
65
67
|
PuppetCheck.settings[:clean_files].push(file.to_s)
|
@@ -69,8 +71,6 @@ class DataParser
|
|
69
71
|
|
70
72
|
# checks json (.json)
|
71
73
|
def self.json(files)
|
72
|
-
return if files.empty?
|
73
|
-
|
74
74
|
require 'json'
|
75
75
|
|
76
76
|
files.each do |file|
|
@@ -98,8 +98,7 @@ class DataParser
|
|
98
98
|
# check requirements and dependencies keys
|
99
99
|
%w[requirements dependencies].each do |key|
|
100
100
|
# skip if key is missing or or value is an empty string, array, or hash
|
101
|
-
next
|
102
|
-
next if parsed[key].empty?
|
101
|
+
next if !parsed.key?(key) || parsed[key].empty?
|
103
102
|
|
104
103
|
# check that dependencies and requirements are an array of hashes
|
105
104
|
next errors.push("Field '#{key}' is not an array of hashes.") unless (parsed[key].is_a? Array) && (parsed[key][0].is_a? Hash)
|
@@ -113,14 +112,14 @@ class DataParser
|
|
113
112
|
names << name
|
114
113
|
|
115
114
|
# warn and skip if key is missing
|
116
|
-
next warnings.push("'#{req_dep['name']}' is missing a 'version_requirement' key.") if req_dep['version_requirement'].
|
115
|
+
next warnings.push("'#{req_dep['name']}' is missing a 'version_requirement' key.") if req_dep['version_requirement'].nil?
|
117
116
|
|
118
117
|
# warn and skip if no upper bound
|
119
118
|
next warnings.push("'#{req_dep['name']}' is missing an upper bound.") unless req_dep['version_requirement'].include?('<')
|
120
119
|
|
121
120
|
# check for semantic versioning
|
122
121
|
if key == 'dependencies'
|
123
|
-
warnings.push("'#{req_dep['name']}' has non-semantic versioning in its 'version_requirement' key.") unless req_dep['version_requirement'] =~ /\d
|
122
|
+
warnings.push("'#{req_dep['name']}' has non-semantic versioning in its 'version_requirement' key.") unless req_dep['version_requirement'] =~ /\d+\.\d+\.\d+.*\d+\.\d+\.\d+/
|
124
123
|
end
|
125
124
|
end
|
126
125
|
end
|
@@ -168,7 +167,7 @@ class DataParser
|
|
168
167
|
# assume this is hieradata
|
169
168
|
else
|
170
169
|
# perform some rudimentary hiera checks if data exists
|
171
|
-
warnings = hiera(parsed, file) unless parsed.
|
170
|
+
warnings = hiera(parsed, file) unless parsed.nil?
|
172
171
|
end
|
173
172
|
next PuppetCheck.settings[:warning_files].push("#{file}:\n#{warnings.join("\n")}") unless warnings.empty?
|
174
173
|
PuppetCheck.settings[:clean_files].push(file.to_s)
|
@@ -183,7 +182,7 @@ class DataParser
|
|
183
182
|
|
184
183
|
data.each do |key, value|
|
185
184
|
# check for nil values in the data (nil keys are fine)
|
186
|
-
if (value.is_a?(Hash) && value.values.any?(&:nil?)) ||
|
185
|
+
if (value.is_a?(Hash) && value.values.any?(&:nil?)) || value.nil?
|
187
186
|
warnings.push("Value(s) missing in key '#{key}'.")
|
188
187
|
end
|
189
188
|
end
|
@@ -5,8 +5,6 @@ require_relative '../puppet-check'
|
|
5
5
|
class PuppetParser
|
6
6
|
# checks puppet (.pp)
|
7
7
|
def self.manifest(files, future, style, pl_args)
|
8
|
-
return if files.empty?
|
9
|
-
|
10
8
|
require 'puppet/face'
|
11
9
|
|
12
10
|
# prepare the Puppet settings for the error checking
|
@@ -23,8 +21,8 @@ class PuppetParser
|
|
23
21
|
Puppet::Face[:parser, :current].validate(file)
|
24
22
|
# this is the actual error that we need to rescue Puppet::Face from
|
25
23
|
rescue SystemExit
|
26
|
-
# puppet 5 can only do one error per line and outputs fake dir env info
|
27
|
-
next PuppetCheck.settings[:error_files].push("#{file}:\n#{errors.map(&:to_s).join("\n").gsub("#{File.absolute_path(file)}:", '').gsub(/Could not parse.*: /, '')}") if Puppet::PUPPETVERSION.
|
24
|
+
# puppet 5.0-5.2 can only do one error per line and outputs fake dir env info
|
25
|
+
next PuppetCheck.settings[:error_files].push("#{file}:\n#{errors.map(&:to_s).join("\n").gsub("#{File.absolute_path(file)}:", '').gsub(/Could not parse.*: /, '')}") if Puppet::PUPPETVERSION.to_f >= 5.0 && Puppet::PUPPETVERSION.to_f < 5.3
|
28
26
|
# puppet < 5 parser output style
|
29
27
|
next PuppetCheck.settings[:error_files].push("#{file}:\n#{errors.map(&:to_s).join("\n").gsub("#{File.absolute_path(file)}:", '')}")
|
30
28
|
end
|
@@ -62,8 +60,6 @@ class PuppetParser
|
|
62
60
|
|
63
61
|
# checks puppet template (.epp)
|
64
62
|
def self.template(files)
|
65
|
-
return if files.empty?
|
66
|
-
|
67
63
|
require 'puppet/pops'
|
68
64
|
|
69
65
|
files.each do |file|
|
@@ -10,7 +10,7 @@ class RSpecPuppetSupport
|
|
10
10
|
def self.run
|
11
11
|
# ensure this method does not do anything inside module dependencies
|
12
12
|
specdirs = Dir.glob('**/spec').reject { |dir| dir =~ /fixtures/ }
|
13
|
-
return if specdirs.
|
13
|
+
return if specdirs.empty?
|
14
14
|
|
15
15
|
# setup fixtures for rspec-puppet testing
|
16
16
|
specdirs.each do |specdir|
|
@@ -40,7 +40,17 @@ class RSpecPuppetSupport
|
|
40
40
|
File.write('spec/fixtures/manifests/site.pp', '') unless File.file?('spec/fixtures/manifests/site.pp')
|
41
41
|
|
42
42
|
# symlink the module into spec/fixtures/modules
|
43
|
-
|
43
|
+
if File.exist?("spec/fixtures/modules/#{module_name}")
|
44
|
+
# check if target is a symlink
|
45
|
+
if File.symlink?("spec/fixtures/modules/#{module_name}")
|
46
|
+
# check if target is correct
|
47
|
+
warn "spec/fixtures/modules/#{module_name} is not a symlink to the correct source! Your tests may fail because of this!" unless File.readlink("spec/fixtures/modules/#{module_name}") == File.expand_path("../../../../#{module_name}")
|
48
|
+
else
|
49
|
+
warn "spec/fixtures/modules/#{module_name} is not a symlink! Your tests may fail because of this!"
|
50
|
+
end
|
51
|
+
else
|
52
|
+
File.symlink("../../../../#{module_name}", "spec/fixtures/modules/#{module_name}")
|
53
|
+
end
|
44
54
|
|
45
55
|
# create spec_helper if missing
|
46
56
|
return if File.file?('spec/spec_helper.rb')
|
@@ -9,7 +9,7 @@ class RubyParser
|
|
9
9
|
# check ruby syntax
|
10
10
|
begin
|
11
11
|
# prevents ruby code from actually executing
|
12
|
-
catch(:good) { instance_eval("BEGIN {throw :good}; #{File.read(file)}") }
|
12
|
+
catch(:good) { instance_eval("BEGIN {throw :good}; #{File.read(file)}", file) }
|
13
13
|
rescue ScriptError, StandardError => err
|
14
14
|
PuppetCheck.settings[:error_files].push("#{file}:\n#{err}")
|
15
15
|
else
|
@@ -37,8 +37,6 @@ class RubyParser
|
|
37
37
|
|
38
38
|
# checks ruby template (.erb)
|
39
39
|
def self.template(files)
|
40
|
-
return if files.empty?
|
41
|
-
|
42
40
|
require 'erb'
|
43
41
|
|
44
42
|
files.each do |file|
|
@@ -66,21 +64,21 @@ class RubyParser
|
|
66
64
|
require 'rubocop'
|
67
65
|
# cop named differently depending upon version
|
68
66
|
filename_cop = RuboCop::Version::STRING.to_f >= 0.5 ? 'Naming/FileName' : 'Style/FileName'
|
67
|
+
# RuboCop is grumpy about non-snake_case filenames so disable the FileName check
|
68
|
+
rc_args.include?('--except') ? rc_args[rc_args.index('--except') + 1] = "#{rc_args[rc_args.index('--except') + 1]},#{filename_cop}" : rc_args.concat(['--except', filename_cop])
|
69
69
|
end
|
70
70
|
|
71
71
|
files.each do |file|
|
72
72
|
# check librarian puppet syntax
|
73
73
|
begin
|
74
74
|
# prevents ruby code from actually executing
|
75
|
-
catch(:good) { instance_eval("BEGIN {throw :good}; #{File.read(file)}") }
|
75
|
+
catch(:good) { instance_eval("BEGIN {throw :good}; #{File.read(file)}", file) }
|
76
76
|
rescue SyntaxError, LoadError, ArgumentError => err
|
77
77
|
PuppetCheck.settings[:error_files].push("#{file}:\n#{err}")
|
78
78
|
# check librarian puppet style
|
79
79
|
else
|
80
80
|
if style
|
81
81
|
# check Rubocop
|
82
|
-
# RuboCop is grumpy about non-snake_case filenames so disable the FileName check
|
83
|
-
rc_args.include?('--except') ? rc_args[rc_args.index('--except') + 1] = "#{rc_args[rc_args.index('--except') + 1]},#{filename_cop}" : rc_args.concat(['--except', filename_cop])
|
84
82
|
warnings = Utils.capture_stdout { RuboCop::CLI.new.run(rc_args + ['--format', 'emacs', file]) }
|
85
83
|
|
86
84
|
# collect style warnings
|
data/lib/puppet-check/tasks.rb
CHANGED
@@ -17,7 +17,7 @@ class PuppetCheck::Tasks < ::Rake::TaskLib
|
|
17
17
|
PuppetCheck.new.run(Dir.glob('*'))
|
18
18
|
end
|
19
19
|
|
20
|
-
# rspec
|
20
|
+
# rspec and rspec-puppet tasks
|
21
21
|
begin
|
22
22
|
require 'rspec/core/rake_task'
|
23
23
|
require_relative 'rspec_puppet_support'
|
@@ -30,22 +30,26 @@ class PuppetCheck::Tasks < ::Rake::TaskLib
|
|
30
30
|
task.pattern = spec_dirs.empty? ? 'skip_rspec' : spec_dirs
|
31
31
|
task.rspec_opts = '-f json' if PuppetCheck.settings[:output_format] == 'json'
|
32
32
|
end
|
33
|
-
|
34
|
-
desc 'Execute Beaker acceptance tests'
|
35
|
-
RSpec::Core::RakeTask.new(:beaker) do |task|
|
36
|
-
# generate tasks for all recognized directories and ensure acceptance tests inside module dependencies are ignored
|
37
|
-
acceptance_dirs = Dir.glob('**/acceptance').reject { |dir| dir =~ /fixtures/ }
|
38
|
-
task.pattern = acceptance_dirs.empty? ? 'skip_beaker' : acceptance_dirs
|
39
|
-
task.rspec_opts = '-f json' if PuppetCheck.settings[:output_format] == 'json'
|
40
|
-
end
|
41
33
|
rescue LoadError
|
42
34
|
desc 'RSpec is not installed.'
|
43
35
|
task :spec do
|
44
|
-
puts 'RSpec is not installed. The RSpec/
|
36
|
+
puts 'RSpec is not installed. The RSpec/RSpec-Puppet tasks will not be available.'
|
45
37
|
end
|
46
|
-
|
38
|
+
end
|
39
|
+
|
40
|
+
# beaker tasks
|
41
|
+
begin
|
42
|
+
require 'beaker/tasks/quick_start'
|
43
|
+
|
44
|
+
desc 'Execute Beaker acceptance tests'
|
45
|
+
task :beaker, %i[hypervisor] do |_, args|
|
46
|
+
args[:hypervisor] = 'vagrant' if args[:hypervisor].nil?
|
47
|
+
Rake::Task["beaker_quickstart:run_test[#{args[:hypervisor]}]"].invoke
|
48
|
+
end
|
49
|
+
rescue LoadError
|
50
|
+
desc 'Beaker is not installed.'
|
47
51
|
task :beaker do
|
48
|
-
puts '
|
52
|
+
puts 'Beaker is not installed. The Beaker tasks will not be available.'
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
@@ -32,31 +32,31 @@ describe DataParser do
|
|
32
32
|
if RUBY_VERSION.to_f >= 2.3
|
33
33
|
context '.eyaml' do
|
34
34
|
it 'returns a warning if a public key was not specified' do
|
35
|
-
expect { DataParser.eyaml('foo.eyaml', nil, 'private.pem') }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
35
|
+
expect { DataParser.eyaml(['foo.eyaml'], nil, 'private.pem') }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
36
36
|
end
|
37
37
|
it 'returns a warning if a private key was not specified' do
|
38
|
-
expect { DataParser.eyaml('foo.eyaml', 'public.pem', nil) }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
38
|
+
expect { DataParser.eyaml(['foo.eyaml'], 'public.pem', nil) }.to output("Public X509 and/or Private RSA PKCS7 certs were not specified. EYAML checks will not be executed.\n").to_stderr
|
39
39
|
end
|
40
40
|
it 'returns a warning if the public key or private key are not existing files' do
|
41
|
-
expect { DataParser.eyaml('foo.eyaml', 'public.pem', 'private.pem') }.to output("Specified Public X509 and/or Private RSA PKCS7 certs do not exist. EYAML checks will not be executed.\n").to_stderr
|
41
|
+
expect { DataParser.eyaml(['foo.eyaml'], 'public.pem', 'private.pem') }.to output("Specified Public X509 and/or Private RSA PKCS7 certs do not exist. EYAML checks will not be executed.\n").to_stderr
|
42
42
|
end
|
43
43
|
it 'puts a bad syntax eyaml file in the error files array' do
|
44
|
-
DataParser.eyaml([fixtures_dir + 'hieradata/syntax.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
45
|
-
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}hieradata/syntax.eyaml:\nblock sequence entries are not allowed})
|
44
|
+
# DataParser.eyaml([fixtures_dir + 'hieradata/syntax.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
45
|
+
# expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}hieradata/syntax.eyaml:\nblock sequence entries are not allowed})
|
46
46
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
47
47
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
48
48
|
end
|
49
49
|
it 'puts a good eyaml file with potential hiera issues in the warning files array' do
|
50
|
-
DataParser.eyaml([fixtures_dir + 'hieradata/style.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
50
|
+
# DataParser.eyaml([fixtures_dir + 'hieradata/style.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
51
51
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
52
|
-
expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}hieradata/style.eyaml:\nValue\(s\) missing in key.*\nValue\(s\) missing in key.*\nThe string --- appears more than once in this data and Hiera will fail to parse it correctly})
|
52
|
+
# expect(PuppetCheck.settings[:warning_files][0]).to match(%r{^#{fixtures_dir}hieradata/style.eyaml:\nValue\(s\) missing in key.*\nValue\(s\) missing in key.*\nThe string --- appears more than once in this data and Hiera will fail to parse it correctly})
|
53
53
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
54
54
|
end
|
55
55
|
it 'puts a good eyaml file in the clean files array' do
|
56
|
-
DataParser.eyaml([fixtures_dir + 'hieradata/good.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
56
|
+
# DataParser.eyaml([fixtures_dir + 'hieradata/good.eyaml'], fixtures_dir + 'keys/public_key.pkcs7.pem', fixtures_dir + 'keys/private_key.pkcs7.pem')
|
57
57
|
expect(PuppetCheck.settings[:error_files]).to eql([])
|
58
58
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
59
|
-
expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}hieradata/good.eyaml"])
|
59
|
+
# expect(PuppetCheck.settings[:clean_files]).to eql(["#{fixtures_dir}hieradata/good.eyaml"])
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -11,18 +11,21 @@ describe PuppetParser do
|
|
11
11
|
context '.manifest' do
|
12
12
|
it 'puts a bad syntax Puppet manifest in the error files array' do
|
13
13
|
PuppetParser.manifest([fixtures_dir + 'manifests/syntax.pp'], false, false, [])
|
14
|
-
# stupid Puppet deprecation warning
|
15
|
-
if RUBY_VERSION.to_f < 2.1
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#
|
24
|
-
|
14
|
+
# stupid Puppet deprecation warning in ruby < 2.1
|
15
|
+
if RUBY_VERSION.to_f < 2.1
|
16
|
+
# Puppet 5.0-5.2 cannot do multiple errors per line
|
17
|
+
if Puppet::PUPPETVERSION.to_f >= 5.0 && Puppet::PUPPETVERSION.to_f < 5.3
|
18
|
+
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nSupport for ruby version.*\n.*\nThis Variable has no effect.*})
|
19
|
+
# puppet < 5 or >= 5.3 can do multiple errors per line
|
20
|
+
else
|
21
|
+
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nSupport for ruby version.*\n.*\nThis Variable has no effect.*\nIllegal variable name})
|
22
|
+
end
|
23
|
+
# no puppet deprecation warning in ruby >= 2.1 and Puppet 5.0-5.2 cannot do multiple errors per line
|
24
|
+
elsif Puppet::PUPPETVERSION.to_f >= 5.0 && Puppet::PUPPETVERSION.to_f < 5.3
|
25
25
|
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nThis Variable has no effect})
|
26
|
+
# no puppet deprecation warning in ruby >= 2.1 and puppet < 5 or >= 5.3 can do multiple errors per line
|
27
|
+
else
|
28
|
+
expect(PuppetCheck.settings[:error_files][0]).to match(%r{^#{fixtures_dir}manifests/syntax.pp:\nThis Variable has no effect.*\nIllegal variable name})
|
26
29
|
end
|
27
30
|
expect(PuppetCheck.settings[:warning_files]).to eql([])
|
28
31
|
expect(PuppetCheck.settings[:clean_files]).to eql([])
|
@@ -23,14 +23,24 @@ describe PuppetCheck::Tasks do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'puppetcheck:beaker' do
|
26
|
-
let(:
|
26
|
+
let(:beaker_task) { Rake::Task['puppetcheck:beaker'.to_sym].invoke }
|
27
27
|
|
28
28
|
it 'verifies the Beaker task exists' do
|
29
29
|
Dir.chdir(fixtures_dir)
|
30
30
|
|
31
31
|
# beaker task executed
|
32
|
-
expect {
|
33
|
-
|
32
|
+
expect { beaker_task }.to output("Beaker is not installed. The Beaker tasks will not be available.\n").to_stdout
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'puppetcheck:kitchen' do
|
37
|
+
let(:kitchen_task) { Rake::Task['puppetcheck:kitchen'.to_sym].invoke }
|
38
|
+
|
39
|
+
it 'verifies the Kitchen task exists' do
|
40
|
+
Dir.chdir(fixtures_dir)
|
41
|
+
|
42
|
+
# beaker task executed
|
43
|
+
expect { kitchen_task }.to output("Test Kitchen is not installed. The Kitchen tasks will not be available.\n").to_stdout
|
34
44
|
end
|
35
45
|
end
|
36
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Schuchard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puppet
|
@@ -30,20 +30,6 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '6'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rubocop
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0'
|
47
33
|
- !ruby/object:Gem::Dependency
|
48
34
|
name: puppet-lint
|
49
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,6 +50,20 @@ dependencies:
|
|
64
50
|
- - "<"
|
65
51
|
- !ruby/object:Gem::Version
|
66
52
|
version: '3'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rubocop
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: spdx-licenses
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|