puppet-henchman 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c5783240c550c5400d7fa7af55509cd468626303
4
+ data.tar.gz: e5e7e5ba4faeb2322655e438729021b18f40426c
5
+ SHA512:
6
+ metadata.gz: eca27b267728cdaf2e5a10a0cc1ae077b0c17ce34c3d3c7607989f3df7e659925ba26f878c322b3297a3c5dbf8df6b103047b9a7a14a472edd014375032b5320
7
+ data.tar.gz: cab03a8e0b7a34b6598703fca81465c2748091d76e7ff4ca077fdf96c18d7b9a37f45c67d5ff83e4df910e6bc25df8e0a3c11b1408750b4ad233b499ab86669d
@@ -0,0 +1,19 @@
1
+ require 'puppet/version'
2
+
3
+ module Henchman
4
+ module Functions
5
+ def self.puppet_version
6
+ Puppet.version
7
+ end
8
+
9
+ def self.future_applicable?
10
+ tmp_ver = puppet_version
11
+ Gem::Version.new(tmp_ver) >= Gem::Version.new('3.2') &&
12
+ Gem::Version.new(tmp_ver) < Gem::Version.new('4')
13
+ end
14
+
15
+ def self.future?
16
+ ENV['FUTURE_PARSER'] == 'true' && future_applicable?
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ module Henchman
2
+ NAME = 'puppet-henchman'.freeze
3
+ VERSION = '0.1.0'.freeze
4
+
5
+ def self.name
6
+ NAME
7
+ end
8
+
9
+ def self.version
10
+ VERSION
11
+ end
12
+ end
@@ -0,0 +1,280 @@
1
+ require 'henchman/functions'
2
+ require 'rspec/core/rake_task'
3
+ require 'kitchen'
4
+
5
+ task default: :help
6
+
7
+ def print_section(str)
8
+ puts "==> \e[0;34m#{str}\e[0m"
9
+ end
10
+
11
+ desc 'Display the list of available rake tasks'
12
+ task :help do
13
+ system('rake -T')
14
+ end
15
+
16
+ exclude_paths = [
17
+ 'pkg/**/*',
18
+ 'vendor/**/*',
19
+ 'spec/**/*',
20
+ 'test/**/*'
21
+ ]
22
+
23
+ # puppet-lint
24
+ begin
25
+ require 'puppet-lint/tasks/puppet-lint'
26
+ Rake::Task[:lint].clear
27
+ # Relative is not able to be set within the context of PuppetLint::RakeTask
28
+ PuppetLint.configuration.relative = true
29
+ PuppetLint::RakeTask.new(:lint) do |config|
30
+ config.fail_on_warnings = true
31
+ config.ignore_paths = exclude_paths
32
+ config.disable_checks = %w(
33
+ 80chars
34
+ class_parameter_defaults
35
+ class_inherits_from_params_class
36
+ documentation
37
+ single_quote_string_with_variables
38
+ )
39
+ end
40
+ rescue LoadError
41
+ desc 'Not available, install puppet-lint gem'
42
+ task :lint do
43
+ warn('Skipping lint validation, puppet-lint gem missing')
44
+ end
45
+ end
46
+
47
+ Rake::Task[:lint].enhance ['lint:section']
48
+
49
+ namespace :lint do
50
+ task :section do
51
+ print_section('Lint Validation')
52
+ end
53
+ end
54
+
55
+ # puppet-syntax
56
+ begin
57
+ require 'puppet-syntax/tasks/puppet-syntax'
58
+ PuppetSyntax.future_parser = Henchman::Functions.future?
59
+ PuppetSyntax.exclude_paths ||= []
60
+ exclude_paths.each do |p|
61
+ unless PuppetSyntax.exclude_paths.include?(p)
62
+ PuppetSyntax.exclude_paths << p
63
+ end
64
+ end
65
+ PuppetSyntax.hieradata_paths = ['spec/fixtures/hieradata/test.yaml']
66
+ Rake::Task['syntax:manifests'].enhance ['syntax:section']
67
+ Rake::Task['syntax:templates'].enhance ['syntax:section']
68
+ Rake::Task['syntax:hiera:yaml'].enhance ['syntax:section']
69
+ rescue LoadError
70
+ desc 'Not available, install puppet-syntax gem'
71
+ task :syntax do
72
+ warn('Skipping syntax validation, puppet-syntax gem missing')
73
+ end
74
+ Rake::Task[:syntax].enhance ['syntax:section']
75
+ end
76
+
77
+ namespace :syntax do
78
+ task :section do
79
+ title = 'Syntax Validation'
80
+ title << ' (with future parser)' if Henchman::Functions.future?
81
+ print_section(title)
82
+ end
83
+ end
84
+
85
+ # metadata-json-lint
86
+ begin
87
+ require 'metadata_json_lint'
88
+ desc 'Validate metadata.json file'
89
+ task :metadata do
90
+ MetadataJsonLint.parse('metadata.json') if File.exist?('metadata.json')
91
+ end
92
+ rescue LoadError
93
+ desc 'Not available, install metadata-json-lint gem'
94
+ task :metadata do
95
+ warn('Skipping metadata validation, metadata-json-lint gem missing')
96
+ end
97
+ end
98
+
99
+ Rake::Task[:metadata].enhance ['metadata:section']
100
+
101
+ namespace :metadata do
102
+ task :section do
103
+ print_section('Metadata Validation')
104
+ end
105
+ end
106
+
107
+ def source_dir
108
+ Dir.pwd
109
+ end
110
+
111
+ def spec_dir
112
+ File.join(source_dir, 'spec')
113
+ end
114
+
115
+ def unit_dir
116
+ File.join(source_dir, 'test/unit')
117
+ end
118
+
119
+ def modules_dir
120
+ File.join(source_dir, 'test/fixtures/modules')
121
+ end
122
+
123
+ def manifests_dir
124
+ File.join(source_dir, 'test/fixtures/manifests')
125
+ end
126
+
127
+ def module_name
128
+ metadata_file = File.join(source_dir, 'metadata.json')
129
+ if File.exist?(metadata_file)
130
+ require 'json'
131
+ JSON.parse(File.read(metadata_file))['name'].split('-', 2).last
132
+ else
133
+ raise "Unable to find #{metadata_file}, cannot continue"
134
+ end
135
+ end
136
+
137
+ namespace :spec do
138
+ task :clean do
139
+ # clean out all modules
140
+ FileUtils.mkdir_p(modules_dir)
141
+ module_entries = Dir.entries(modules_dir)
142
+ module_entries.reject { |x| ['.', '..'].include?(x) }.each do |entry|
143
+ FileUtils.rm_rf(File.join(modules_dir, entry), secure: true)
144
+ end
145
+ end
146
+
147
+ task :prep do
148
+ FileUtils.mkdir_p(modules_dir)
149
+ # Install dependencies for module
150
+ system("librarian-puppet install --path #{modules_dir} --destructive")
151
+ end
152
+
153
+ namespace :unit do
154
+ task :prep do
155
+ # Setup spec symlink to test/unit for rspec happiness
156
+ FileUtils.rm_f(spec_dir) if File.symlink?(spec_dir)
157
+ if !File.exist?(spec_dir)
158
+ FileUtils.ln_sf(unit_dir, spec_dir)
159
+ else
160
+ raise("#{spec_dir} exists is not symlink, cannot continue")
161
+ end
162
+ # Setup self via symlink (librarian does not do this for us)
163
+ FileUtils.mkdir_p(modules_dir)
164
+ full_module_path = File.join(modules_dir, module_name)
165
+ FileUtils.rm_f(full_module_path) if File.symlink?(full_module_path)
166
+ if !File.exist?(full_module_path)
167
+ FileUtils.ln_sf(source_dir, full_module_path)
168
+ else
169
+ raise("#{full_module_path} exists and is not symlink, cannot continue")
170
+ end
171
+ # Setup manifests
172
+ FileUtils.mkdir_p(manifests_dir)
173
+ FileUtils.touch(File.join(manifests_dir, 'site.pp'))
174
+ end
175
+
176
+ task :clean do
177
+ # clean up spec_dir link to unit_dir
178
+ if File.symlink?(spec_dir)
179
+ FileUtils.rm_f(spec_dir)
180
+ elsif File.exist?(spec_dir)
181
+ raise("#{spec_dir} exists and is not symlink, cannot continue")
182
+ end
183
+ # Clear out self symlink, Kitchen does this for us
184
+ full_module_path = File.join(modules_dir, module_name)
185
+ if File.symlink?(full_module_path)
186
+ FileUtils.rm_f(full_module_path)
187
+ elsif File.exist?(full_module_path)
188
+ raise("#{full_module_path} exists and is not symlink, cannot continue")
189
+ end
190
+ # clean up manifests, if applicable
191
+ if File.zero?(File.join(manifests_dir, 'site.pp'))
192
+ FileUtils.rm_f(File.join(manifests_dir, 'site.pp'))
193
+ end
194
+ end
195
+
196
+ task :section do
197
+ title = 'Unit Tests'
198
+ title << " (Puppet #{Henchman::Functions.puppet_version}"
199
+ title << ' with future parser' if Henchman::Functions.future?
200
+ title << ')'
201
+ print_section(title)
202
+ end
203
+ end # namespace :unit
204
+
205
+ desc '' # Hide this task by default
206
+ RSpec::Core::RakeTask.new(:unit) do |t|
207
+ t.pattern = 'spec/{classes,defines,functions,hosts,types,unit}/**/*_spec.rb'
208
+ end
209
+
210
+ namespace :integration do
211
+ task :section do
212
+ print_section('Integration Tests')
213
+ end
214
+
215
+ task manual: ['spec:prep', 'spec:unit:clean']
216
+ end
217
+
218
+ task :integration, [:destroy] do |_t, args|
219
+ if args[:destroy]
220
+ case args[:destroy].downcase
221
+ when 'never', 'no'
222
+ destroy_opt = :never
223
+ when 'always', 'yes',
224
+ destroy_opt = :always
225
+ else
226
+ destroy_opt = :passing
227
+ end
228
+ else
229
+ destroy_opt = :passing
230
+ end
231
+ Kitchen.logger = Kitchen.default_file_logger
232
+ Kitchen::Config.new.instances.each do |i|
233
+ i.test(destroy_opt)
234
+ end
235
+ end
236
+ end
237
+
238
+ # Prerequisites for spec:unit task
239
+ Rake::Task['spec:unit'].enhance [
240
+ 'spec:unit:section',
241
+ 'spec:prep',
242
+ 'spec:unit:prep'
243
+ ]
244
+
245
+ # Run after spec:unit task
246
+ Rake::Task['spec:unit'].enhance do
247
+ Rake::Task['spec:unit:clean'].invoke
248
+ end
249
+
250
+ # Prerequisites for spec:integration task
251
+ Rake::Task['spec:integration'].enhance [
252
+ 'spec:integration:section',
253
+ 'spec:prep',
254
+ 'spec:unit:clean'
255
+ ]
256
+
257
+ # Prerequisites for spec:clean
258
+ Rake::Task['spec:clean'].enhance ['spec:unit:clean']
259
+
260
+ # Alias for spec:unit
261
+ desc 'Run unit tests'
262
+ task unit: 'spec:unit'
263
+
264
+ # Alias for spec:integration
265
+ desc 'Run integration tests'
266
+ task :integration, [:destroy] => 'spec:integration'
267
+
268
+ namespace :integration do
269
+ # Alias for spec:integration:manual
270
+ desc 'Prepare for integration tests run manually'
271
+ task manual: 'spec:integration:manual'
272
+ end
273
+
274
+ # Alias for spec:clean
275
+ desc 'Clean up after spec tests'
276
+ task clean: 'spec:clean'
277
+
278
+ # Alias for metadata, lint, syntax
279
+ desc 'Run metadata, lint, and syntax tasks'
280
+ task style: [:metadata, :lint, :syntax]
@@ -0,0 +1,16 @@
1
+ require 'rspec-puppet'
2
+
3
+ spec_path = File.expand_path(File.join(Dir.pwd, 'test'))
4
+ fixture_path = File.join(spec_path, 'fixtures')
5
+ module_path = File.join(fixture_path, 'modules')
6
+ manifest_path = File.join(fixture_path, 'manifests')
7
+
8
+ RSpec.configure do |c|
9
+ c.module_path = module_path
10
+ c.manifest_dir = manifest_path
11
+ c.parser = 'future' if ENV['FUTURE_PARSER'] == 'yes'
12
+ c.strict_variables = true if ENV['STRICT_VARIABLES'] == 'yes'
13
+ c.stringify_facts = false if ENV['STRINGIFY_FACTS'] == 'no'
14
+ c.trusted_node_data = true if ENV['TRUSTED_NODE_DATA'] == 'yes'
15
+ c.ordering = ENV['ORDERING'] if ENV['ORDERING']
16
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: puppet-henchman
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jordan Wesolowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.37'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.37'
27
+ - !ruby/object:Gem::Dependency
28
+ name: kitchen-puppet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: librarian-puppet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-puppet
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: test-kitchen
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.6'
97
+ description: Wrapper around Test Kitchen, rspec-puppet, and other tools
98
+ email: jrwesolo@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - lib/henchman/functions.rb
104
+ - lib/henchman/metadata.rb
105
+ - lib/henchman/rake.rb
106
+ - lib/henchman/spec_helper.rb
107
+ homepage: https://github.com/jrwesolo/puppet-henchman
108
+ licenses:
109
+ - MIT
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.4.6
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Unit and Integration test helper for Puppet
131
+ test_files: []