pdk 1.17.0 → 2.1.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 +148 -11
- data/README.md +1 -1
- data/lib/pdk.rb +1 -1
- data/lib/pdk/cli.rb +7 -1
- data/lib/pdk/cli/convert.rb +7 -9
- data/lib/pdk/cli/env.rb +52 -0
- data/lib/pdk/cli/exec/command.rb +11 -1
- data/lib/pdk/cli/new.rb +2 -0
- data/lib/pdk/cli/new/class.rb +2 -1
- data/lib/pdk/cli/new/defined_type.rb +2 -1
- data/lib/pdk/cli/new/fact.rb +29 -0
- data/lib/pdk/cli/new/function.rb +29 -0
- data/lib/pdk/cli/new/provider.rb +2 -1
- data/lib/pdk/cli/new/task.rb +2 -1
- data/lib/pdk/cli/new/test.rb +2 -1
- data/lib/pdk/cli/new/transport.rb +2 -1
- data/lib/pdk/cli/release.rb +1 -1
- data/lib/pdk/cli/release/publish.rb +11 -1
- data/lib/pdk/cli/remove.rb +20 -0
- data/lib/pdk/cli/remove/config.rb +80 -0
- data/lib/pdk/cli/set.rb +20 -0
- data/lib/pdk/cli/set/config.rb +119 -0
- data/lib/pdk/cli/update.rb +6 -8
- data/lib/pdk/cli/util.rb +1 -0
- data/lib/pdk/cli/util/option_validator.rb +6 -0
- data/lib/pdk/cli/util/update_manager_printer.rb +82 -0
- data/lib/pdk/config.rb +96 -13
- data/lib/pdk/context.rb +8 -5
- data/lib/pdk/generate/defined_type.rb +25 -32
- data/lib/pdk/generate/fact.rb +25 -0
- data/lib/pdk/generate/function.rb +48 -0
- data/lib/pdk/generate/module.rb +11 -10
- data/lib/pdk/generate/provider.rb +15 -64
- data/lib/pdk/generate/puppet_class.rb +25 -31
- data/lib/pdk/generate/puppet_object.rb +83 -187
- data/lib/pdk/generate/task.rb +28 -46
- data/lib/pdk/generate/transport.rb +20 -74
- data/lib/pdk/module.rb +1 -1
- data/lib/pdk/module/convert.rb +43 -23
- data/lib/pdk/module/metadata.rb +6 -2
- data/lib/pdk/module/release.rb +8 -2
- data/lib/pdk/module/update.rb +7 -11
- data/lib/pdk/module/update_manager.rb +7 -0
- data/lib/pdk/report.rb +3 -3
- data/lib/pdk/report/event.rb +8 -2
- data/lib/pdk/template.rb +59 -0
- data/lib/pdk/template/fetcher.rb +98 -0
- data/lib/pdk/template/fetcher/git.rb +85 -0
- data/lib/pdk/template/fetcher/local.rb +28 -0
- data/lib/pdk/template/renderer.rb +96 -0
- data/lib/pdk/template/renderer/v1.rb +25 -0
- data/lib/pdk/template/renderer/v1/legacy_template_dir.rb +116 -0
- data/lib/pdk/template/renderer/v1/renderer.rb +132 -0
- data/lib/pdk/template/renderer/v1/template_file.rb +102 -0
- data/lib/pdk/template/template_dir.rb +67 -0
- data/lib/pdk/tests/unit.rb +8 -1
- data/lib/pdk/util.rb +4 -35
- data/lib/pdk/util/bundler.rb +1 -1
- data/lib/pdk/util/changelog_generator.rb +20 -3
- data/lib/pdk/util/json_finder.rb +85 -0
- data/lib/pdk/util/puppet_strings.rb +3 -3
- data/lib/pdk/util/puppet_version.rb +2 -2
- data/lib/pdk/util/ruby_version.rb +5 -1
- data/lib/pdk/util/template_uri.rb +9 -11
- data/lib/pdk/util/vendored_file.rb +1 -2
- data/lib/pdk/validate.rb +17 -10
- data/lib/pdk/validate/control_repo/control_repo_validator_group.rb +23 -0
- data/lib/pdk/validate/control_repo/environment_conf_validator.rb +98 -0
- data/lib/pdk/validate/invokable_validator.rb +8 -4
- data/lib/pdk/validate/tasks/tasks_metadata_lint_validator.rb +1 -1
- data/lib/pdk/validate/validator.rb +7 -0
- data/lib/pdk/validate/validator_group.rb +1 -0
- data/lib/pdk/validate/yaml/yaml_syntax_validator.rb +2 -2
- data/lib/pdk/version.rb +1 -1
- data/locales/pdk.pot +356 -228
- metadata +65 -28
- data/lib/pdk/module/template_dir.rb +0 -115
- data/lib/pdk/module/template_dir/base.rb +0 -268
- data/lib/pdk/module/template_dir/git.rb +0 -91
- data/lib/pdk/module/template_dir/local.rb +0 -21
- data/lib/pdk/template_file.rb +0 -96
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.
|
39
|
+
version: 4.0.0
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: 4.0.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cri
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,30 +62,42 @@ dependencies:
|
|
62
62
|
name: diff-lcs
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.4.4
|
68
|
+
- - "<"
|
66
69
|
- !ruby/object:Gem::Version
|
67
|
-
version: '1.
|
70
|
+
version: '1.5'
|
68
71
|
type: :runtime
|
69
72
|
prerelease: false
|
70
73
|
version_requirements: !ruby/object:Gem::Requirement
|
71
74
|
requirements:
|
72
|
-
- -
|
75
|
+
- - ">="
|
73
76
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
77
|
+
version: 1.4.4
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '1.5'
|
75
81
|
- !ruby/object:Gem::Dependency
|
76
82
|
name: ffi
|
77
83
|
requirement: !ruby/object:Gem::Requirement
|
78
84
|
requirements:
|
79
|
-
- - "
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 1.9.25
|
88
|
+
- - "<"
|
80
89
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
90
|
+
version: 2.0.0
|
82
91
|
type: :runtime
|
83
92
|
prerelease: false
|
84
93
|
version_requirements: !ruby/object:Gem::Requirement
|
85
94
|
requirements:
|
86
|
-
- - "
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 1.9.25
|
98
|
+
- - "<"
|
87
99
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
100
|
+
version: 2.0.0
|
89
101
|
- !ruby/object:Gem::Dependency
|
90
102
|
name: gettext-setup
|
91
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,14 +118,14 @@ dependencies:
|
|
106
118
|
requirements:
|
107
119
|
- - '='
|
108
120
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
121
|
+
version: 2.0.0
|
110
122
|
type: :runtime
|
111
123
|
prerelease: false
|
112
124
|
version_requirements: !ruby/object:Gem::Requirement
|
113
125
|
requirements:
|
114
126
|
- - '='
|
115
127
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
128
|
+
version: 2.0.0
|
117
129
|
- !ruby/object:Gem::Dependency
|
118
130
|
name: json-schema
|
119
131
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,14 +188,14 @@ dependencies:
|
|
176
188
|
requirements:
|
177
189
|
- - "~>"
|
178
190
|
- !ruby/object:Gem::Version
|
179
|
-
version: '0.
|
191
|
+
version: '0.22'
|
180
192
|
type: :runtime
|
181
193
|
prerelease: false
|
182
194
|
version_requirements: !ruby/object:Gem::Requirement
|
183
195
|
requirements:
|
184
196
|
- - "~>"
|
185
197
|
- !ruby/object:Gem::Version
|
186
|
-
version: '0.
|
198
|
+
version: '0.22'
|
187
199
|
- !ruby/object:Gem::Dependency
|
188
200
|
name: tty-spinner
|
189
201
|
requirement: !ruby/object:Gem::Requirement
|
@@ -230,16 +242,22 @@ dependencies:
|
|
230
242
|
name: facter
|
231
243
|
requirement: !ruby/object:Gem::Requirement
|
232
244
|
requirements:
|
233
|
-
- - "
|
245
|
+
- - ">="
|
234
246
|
- !ruby/object:Gem::Version
|
235
247
|
version: 2.5.1
|
248
|
+
- - "<"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 5.0.0
|
236
251
|
type: :runtime
|
237
252
|
prerelease: false
|
238
253
|
version_requirements: !ruby/object:Gem::Requirement
|
239
254
|
requirements:
|
240
|
-
- - "
|
255
|
+
- - ">="
|
241
256
|
- !ruby/object:Gem::Version
|
242
257
|
version: 2.5.1
|
258
|
+
- - "<"
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: 5.0.0
|
243
261
|
- !ruby/object:Gem::Dependency
|
244
262
|
name: httpclient
|
245
263
|
requirement: !ruby/object:Gem::Requirement
|
@@ -294,6 +312,7 @@ files:
|
|
294
312
|
- lib/pdk/cli/config/get.rb
|
295
313
|
- lib/pdk/cli/console.rb
|
296
314
|
- lib/pdk/cli/convert.rb
|
315
|
+
- lib/pdk/cli/env.rb
|
297
316
|
- lib/pdk/cli/errors.rb
|
298
317
|
- lib/pdk/cli/exec.rb
|
299
318
|
- lib/pdk/cli/exec/command.rb
|
@@ -307,6 +326,8 @@ files:
|
|
307
326
|
- lib/pdk/cli/new.rb
|
308
327
|
- lib/pdk/cli/new/class.rb
|
309
328
|
- lib/pdk/cli/new/defined_type.rb
|
329
|
+
- lib/pdk/cli/new/fact.rb
|
330
|
+
- lib/pdk/cli/new/function.rb
|
310
331
|
- lib/pdk/cli/new/module.rb
|
311
332
|
- lib/pdk/cli/new/provider.rb
|
312
333
|
- lib/pdk/cli/new/task.rb
|
@@ -315,6 +336,10 @@ files:
|
|
315
336
|
- lib/pdk/cli/release.rb
|
316
337
|
- lib/pdk/cli/release/prep.rb
|
317
338
|
- lib/pdk/cli/release/publish.rb
|
339
|
+
- lib/pdk/cli/remove.rb
|
340
|
+
- lib/pdk/cli/remove/config.rb
|
341
|
+
- lib/pdk/cli/set.rb
|
342
|
+
- lib/pdk/cli/set/config.rb
|
318
343
|
- lib/pdk/cli/test.rb
|
319
344
|
- lib/pdk/cli/test/unit.rb
|
320
345
|
- lib/pdk/cli/update.rb
|
@@ -324,6 +349,7 @@ files:
|
|
324
349
|
- lib/pdk/cli/util/option_normalizer.rb
|
325
350
|
- lib/pdk/cli/util/option_validator.rb
|
326
351
|
- lib/pdk/cli/util/spinner.rb
|
352
|
+
- lib/pdk/cli/util/update_manager_printer.rb
|
327
353
|
- lib/pdk/cli/validate.rb
|
328
354
|
- lib/pdk/config.rb
|
329
355
|
- lib/pdk/config/analytics_schema.json
|
@@ -346,6 +372,8 @@ files:
|
|
346
372
|
- lib/pdk/control_repo.rb
|
347
373
|
- lib/pdk/generate.rb
|
348
374
|
- lib/pdk/generate/defined_type.rb
|
375
|
+
- lib/pdk/generate/fact.rb
|
376
|
+
- lib/pdk/generate/function.rb
|
349
377
|
- lib/pdk/generate/module.rb
|
350
378
|
- lib/pdk/generate/provider.rb
|
351
379
|
- lib/pdk/generate/puppet_class.rb
|
@@ -359,15 +387,20 @@ files:
|
|
359
387
|
- lib/pdk/module/convert.rb
|
360
388
|
- lib/pdk/module/metadata.rb
|
361
389
|
- lib/pdk/module/release.rb
|
362
|
-
- lib/pdk/module/template_dir.rb
|
363
|
-
- lib/pdk/module/template_dir/base.rb
|
364
|
-
- lib/pdk/module/template_dir/git.rb
|
365
|
-
- lib/pdk/module/template_dir/local.rb
|
366
390
|
- lib/pdk/module/update.rb
|
367
391
|
- lib/pdk/module/update_manager.rb
|
368
392
|
- lib/pdk/report.rb
|
369
393
|
- lib/pdk/report/event.rb
|
370
|
-
- lib/pdk/
|
394
|
+
- lib/pdk/template.rb
|
395
|
+
- lib/pdk/template/fetcher.rb
|
396
|
+
- lib/pdk/template/fetcher/git.rb
|
397
|
+
- lib/pdk/template/fetcher/local.rb
|
398
|
+
- lib/pdk/template/renderer.rb
|
399
|
+
- lib/pdk/template/renderer/v1.rb
|
400
|
+
- lib/pdk/template/renderer/v1/legacy_template_dir.rb
|
401
|
+
- lib/pdk/template/renderer/v1/renderer.rb
|
402
|
+
- lib/pdk/template/renderer/v1/template_file.rb
|
403
|
+
- lib/pdk/template/template_dir.rb
|
371
404
|
- lib/pdk/tests/unit.rb
|
372
405
|
- lib/pdk/util.rb
|
373
406
|
- lib/pdk/util/bundler.rb
|
@@ -375,6 +408,7 @@ files:
|
|
375
408
|
- lib/pdk/util/env.rb
|
376
409
|
- lib/pdk/util/filesystem.rb
|
377
410
|
- lib/pdk/util/git.rb
|
411
|
+
- lib/pdk/util/json_finder.rb
|
378
412
|
- lib/pdk/util/puppet_strings.rb
|
379
413
|
- lib/pdk/util/puppet_version.rb
|
380
414
|
- lib/pdk/util/ruby_version.rb
|
@@ -387,6 +421,8 @@ files:
|
|
387
421
|
- lib/pdk/util/windows/process.rb
|
388
422
|
- lib/pdk/util/windows/string.rb
|
389
423
|
- lib/pdk/validate.rb
|
424
|
+
- lib/pdk/validate/control_repo/control_repo_validator_group.rb
|
425
|
+
- lib/pdk/validate/control_repo/environment_conf_validator.rb
|
390
426
|
- lib/pdk/validate/external_command_validator.rb
|
391
427
|
- lib/pdk/validate/internal_ruby_validator.rb
|
392
428
|
- lib/pdk/validate/invokable_validator.rb
|
@@ -412,7 +448,7 @@ files:
|
|
412
448
|
homepage: https://github.com/puppetlabs/pdk
|
413
449
|
licenses: []
|
414
450
|
metadata: {}
|
415
|
-
post_install_message:
|
451
|
+
post_install_message:
|
416
452
|
rdoc_options: []
|
417
453
|
require_paths:
|
418
454
|
- lib
|
@@ -420,15 +456,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
420
456
|
requirements:
|
421
457
|
- - ">="
|
422
458
|
- !ruby/object:Gem::Version
|
423
|
-
version: 2.
|
459
|
+
version: 2.4.0
|
424
460
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
425
461
|
requirements:
|
426
462
|
- - ">="
|
427
463
|
- !ruby/object:Gem::Version
|
428
464
|
version: '0'
|
429
465
|
requirements: []
|
430
|
-
|
431
|
-
|
466
|
+
rubyforge_project:
|
467
|
+
rubygems_version: 2.7.6.2
|
468
|
+
signing_key:
|
432
469
|
specification_version: 4
|
433
470
|
summary: A key part of the Puppet Development Kit, the shortest path to better modules
|
434
471
|
test_files: []
|
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Module
|
5
|
-
module TemplateDir
|
6
|
-
# Creates a TemplateDir object with the path or URL to the template
|
7
|
-
# and the block of code to run to be run while the template is available.
|
8
|
-
#
|
9
|
-
# The template directory is only guaranteed to be available on disk
|
10
|
-
# within the scope of the block passed to this method.
|
11
|
-
#
|
12
|
-
# @param uri [PDK::Util::TemplateURI] The path to a directory to use as the
|
13
|
-
# template or a URI to a git repository.
|
14
|
-
# @param module_metadata [Hash] A Hash containing the module metadata.
|
15
|
-
# Defaults to an empty Hash.
|
16
|
-
# @yieldparam self [PDK::Module::TemplateDir] The initialised object with
|
17
|
-
# the template available on disk.
|
18
|
-
#
|
19
|
-
# @example Using a git repository as a template
|
20
|
-
# PDK::Module::TemplateDir.with('https://github.com/puppetlabs/pdk-templates') do |t|
|
21
|
-
# t.render do |filename, content|
|
22
|
-
# File.open(filename, 'w') do |file|
|
23
|
-
# file.write(content)
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# @raise [ArgumentError] If no block is given to this method.
|
29
|
-
# @raise [PDK::CLI::FatalError] (see #clone_repo)
|
30
|
-
# @raise [ArgumentError] (see #validate_module_template!)
|
31
|
-
#
|
32
|
-
# @api public
|
33
|
-
def self.with(uri, module_metadata = {}, init = false)
|
34
|
-
unless block_given?
|
35
|
-
raise ArgumentError, _('%{class_name}.with must be passed a block.') % { class_name: name }
|
36
|
-
end
|
37
|
-
unless uri.is_a? PDK::Util::TemplateURI
|
38
|
-
raise ArgumentError, _('%{class_name}.with must be passed a PDK::Util::TemplateURI, got a %{uri_type}') % { uri_type: uri.class, class_name: name }
|
39
|
-
end
|
40
|
-
|
41
|
-
if PDK::Util::Git.repo?(uri.bare_uri)
|
42
|
-
require 'pdk/module/template_dir/git'
|
43
|
-
PDK::Module::TemplateDir::Git.new(uri, module_metadata, init) { |value| yield value }
|
44
|
-
else
|
45
|
-
require 'pdk/module/template_dir/local'
|
46
|
-
PDK::Module::TemplateDir::Local.new(uri, module_metadata, init) { |value| yield value }
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.moduleroot_dir(template_root_dir)
|
51
|
-
File.join(template_root_dir, 'moduleroot')
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.moduleroot_init(template_root_dir)
|
55
|
-
File.join(template_root_dir, 'moduleroot_init')
|
56
|
-
end
|
57
|
-
|
58
|
-
# Validate the content of the template directory.
|
59
|
-
#
|
60
|
-
# @raise [ArgumentError] If the specified path is not a directory.
|
61
|
-
# @raise [ArgumentError] If the template directory does not contain
|
62
|
-
# a directory called 'moduleroot'.
|
63
|
-
#
|
64
|
-
# @return [void]
|
65
|
-
#
|
66
|
-
# @api public
|
67
|
-
def self.validate_module_template!(template_root_dir)
|
68
|
-
# rubocop:disable Style/GuardClause
|
69
|
-
unless PDK::Util::Filesystem.directory?(template_root_dir)
|
70
|
-
require 'pdk/util'
|
71
|
-
|
72
|
-
if PDK::Util.package_install? && PDK::Util::Filesystem.fnmatch?(File.join(PDK::Util.package_cachedir, '*'), template_root_dir)
|
73
|
-
raise ArgumentError, _('The built-in template has substantially changed. Please run "pdk convert" on your module to continue.')
|
74
|
-
else
|
75
|
-
raise ArgumentError, _("The specified template '%{path}' is not a directory.") % { path: template_root_dir }
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
unless PDK::Util::Filesystem.directory?(moduleroot_dir(template_root_dir))
|
80
|
-
raise ArgumentError, _("The template at '%{path}' does not contain a 'moduleroot/' directory.") % { path: template_root_dir }
|
81
|
-
end
|
82
|
-
|
83
|
-
unless PDK::Util::Filesystem.directory?(moduleroot_init(template_root_dir))
|
84
|
-
# rubocop:disable Metrics/LineLength
|
85
|
-
raise ArgumentError, _("The template at '%{path}' does not contain a 'moduleroot_init/' directory, which indicates you are using an older style of template. Before continuing please use the --template-url flag when running the pdk new commands to pass a new style template.") % { path: template_root_dir }
|
86
|
-
# rubocop:enable Metrics/LineLength
|
87
|
-
end
|
88
|
-
# rubocop:enable Style/GuardClause
|
89
|
-
end
|
90
|
-
|
91
|
-
# Get a list of template files in the template directory.
|
92
|
-
#
|
93
|
-
# @return [Hash{String=>String}] A hash of key file names and
|
94
|
-
# value locations.
|
95
|
-
#
|
96
|
-
# @api public
|
97
|
-
def self.files_in_template(dirs)
|
98
|
-
temp_paths = []
|
99
|
-
dirlocs = []
|
100
|
-
dirs.each do |dir|
|
101
|
-
raise ArgumentError, _("The directory '%{dir}' doesn't exist") % { dir: dir } unless PDK::Util::Filesystem.directory?(dir)
|
102
|
-
temp_paths += PDK::Util::Filesystem.glob(File.join(dir, '**', '*'), File::FNM_DOTMATCH).select do |template_path|
|
103
|
-
if PDK::Util::Filesystem.file?(template_path) && !PDK::Util::Filesystem.symlink?(template_path)
|
104
|
-
dirlocs << dir
|
105
|
-
end
|
106
|
-
end
|
107
|
-
temp_paths.map do |template_path|
|
108
|
-
template_path.sub!(%r{\A#{Regexp.escape(dir)}#{Regexp.escape(File::SEPARATOR)}}, '')
|
109
|
-
end
|
110
|
-
end
|
111
|
-
Hash[temp_paths.zip dirlocs]
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,268 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Module
|
5
|
-
module TemplateDir
|
6
|
-
class Base
|
7
|
-
attr_accessor :module_metadata
|
8
|
-
attr_reader :uri
|
9
|
-
|
10
|
-
# Initialises the TemplateDir object with the path or URL to the template
|
11
|
-
# and the block of code to run to be run while the template is available.
|
12
|
-
#
|
13
|
-
# The template directory is only guaranteed to be available on disk
|
14
|
-
# within the scope of the block passed to this method.
|
15
|
-
#
|
16
|
-
# @param uri [PDK::Util::TemplateURI] The path to a directory to use as the
|
17
|
-
# template or a URI to a git repository.
|
18
|
-
# @param module_metadata [Hash] A Hash containing the module metadata.
|
19
|
-
# Defaults to an empty Hash.
|
20
|
-
# @yieldparam self [PDK::Module::TemplateDir] The initialised object with
|
21
|
-
# the template available on disk.
|
22
|
-
#
|
23
|
-
# @example Using a git repository as a template
|
24
|
-
# PDK::Module::TemplateDir::Base.new('https://github.com/puppetlabs/pdk-templates') do |t|
|
25
|
-
# t.render do |filename, content|
|
26
|
-
# File.open(filename, 'w') do |file|
|
27
|
-
# file.write(content)
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
# end
|
31
|
-
#
|
32
|
-
# @raise [ArgumentError] If no block is given to this method.
|
33
|
-
# @raise [PDK::CLI::FatalError] (see #clone_repo)
|
34
|
-
# @raise [ArgumentError] (see #validate_module_template!)
|
35
|
-
#
|
36
|
-
# @api public
|
37
|
-
def initialize(uri, module_metadata = {}, init = false)
|
38
|
-
unless block_given?
|
39
|
-
raise ArgumentError, _('%{class_name} must be initialized with a block.') % { class_name: self.class.name }
|
40
|
-
end
|
41
|
-
unless uri.is_a? PDK::Util::TemplateURI
|
42
|
-
raise ArgumentError, _('%{class_name} must be initialized with a PDK::Util::TemplateURI, got a %{uri_type}') % { uri_type: uri.class, class_name: self.class.name }
|
43
|
-
end
|
44
|
-
|
45
|
-
@path, @is_temporary_path = template_path(uri)
|
46
|
-
@uri = uri
|
47
|
-
|
48
|
-
@init = init
|
49
|
-
@moduleroot_dir = PDK::Module::TemplateDir.moduleroot_dir(@path)
|
50
|
-
@moduleroot_init = PDK::Module::TemplateDir.moduleroot_init(@path)
|
51
|
-
@dirs = [@moduleroot_dir]
|
52
|
-
@dirs << @moduleroot_init if @init
|
53
|
-
@object_dir = File.join(@path, 'object_templates')
|
54
|
-
|
55
|
-
PDK::Module::TemplateDir.validate_module_template!(@path)
|
56
|
-
|
57
|
-
@module_metadata = module_metadata
|
58
|
-
|
59
|
-
template_type = uri.default? ? 'default' : 'custom'
|
60
|
-
PDK.analytics.event('TemplateDir', 'initialize', label: template_type)
|
61
|
-
|
62
|
-
yield self
|
63
|
-
ensure
|
64
|
-
# If the the path is temporary, clean it up
|
65
|
-
if @is_temporary_path
|
66
|
-
PDK::Util::Filesystem.rm_rf(@path)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Retrieve identifying metadata for the template.
|
71
|
-
#
|
72
|
-
# For git repositories, this will return the URL to the repository and
|
73
|
-
# a reference to the HEAD.
|
74
|
-
#
|
75
|
-
# For plain fileystem directories, this will return the URL to the repository only.
|
76
|
-
#
|
77
|
-
# @return [Hash{String => String}] A hash of identifying metadata.
|
78
|
-
#
|
79
|
-
# @api public
|
80
|
-
# @abstract
|
81
|
-
def metadata
|
82
|
-
{
|
83
|
-
'pdk-version' => PDK::Util::Version.version_string,
|
84
|
-
'template-url' => nil,
|
85
|
-
'template-ref' => nil,
|
86
|
-
}
|
87
|
-
end
|
88
|
-
|
89
|
-
# Loop through the files in the template, yielding each rendered file to
|
90
|
-
# the supplied block.
|
91
|
-
#
|
92
|
-
# @yieldparam dest_path [String] The path of the destination file,
|
93
|
-
# relative to the root of the module.
|
94
|
-
# @yieldparam dest_content [String] The rendered content of the
|
95
|
-
# destination file.
|
96
|
-
#
|
97
|
-
# @raise [PDK::CLI::FatalError] If the template fails to render.
|
98
|
-
#
|
99
|
-
# @return [void]
|
100
|
-
#
|
101
|
-
# @api public
|
102
|
-
def render
|
103
|
-
require 'pdk/template_file'
|
104
|
-
|
105
|
-
PDK::Module::TemplateDir.files_in_template(@dirs).each do |template_file, template_loc|
|
106
|
-
template_file = template_file.to_s
|
107
|
-
PDK.logger.debug(_("Rendering '%{template}'...") % { template: template_file })
|
108
|
-
dest_path = template_file.sub(%r{\.erb\Z}, '')
|
109
|
-
config = config_for(dest_path)
|
110
|
-
|
111
|
-
dest_status = if template_loc.start_with?(@moduleroot_init)
|
112
|
-
:init
|
113
|
-
else
|
114
|
-
:manage
|
115
|
-
end
|
116
|
-
|
117
|
-
if config['unmanaged']
|
118
|
-
dest_status = :unmanage
|
119
|
-
elsif config['delete']
|
120
|
-
dest_status = :delete
|
121
|
-
else
|
122
|
-
begin
|
123
|
-
dest_content = PDK::TemplateFile.new(File.join(template_loc, template_file), configs: config, template_dir: self).render
|
124
|
-
rescue => error
|
125
|
-
error_msg = _(
|
126
|
-
"Failed to render template '%{template}'\n" \
|
127
|
-
'%{exception}: %{message}',
|
128
|
-
) % { template: template_file, exception: error.class, message: error.message }
|
129
|
-
raise PDK::CLI::FatalError, error_msg
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
yield dest_path, dest_content, dest_status
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
# Searches the template directory for template files that can be used to
|
138
|
-
# render files for the specified object type.
|
139
|
-
#
|
140
|
-
# @param object_type [Symbol] The object type, e.g. (`:class`,
|
141
|
-
# `:defined_type`, `:fact`, etc).
|
142
|
-
#
|
143
|
-
# @return [Hash{Symbol => String}] if the templates are available in the
|
144
|
-
# template dir, otherwise `nil`. The returned hash can contain two keys,
|
145
|
-
# :object contains the path on disk to the template for the object, :spec
|
146
|
-
# contains the path on disk to the template for the object's spec file
|
147
|
-
# (if available).
|
148
|
-
#
|
149
|
-
# @api public
|
150
|
-
def object_template_for(object_type)
|
151
|
-
object_path = File.join(@object_dir, "#{object_type}.erb")
|
152
|
-
type_path = File.join(@object_dir, "#{object_type}_type.erb")
|
153
|
-
device_path = File.join(@object_dir, "#{object_type}_device.erb")
|
154
|
-
spec_path = File.join(@object_dir, "#{object_type}_spec.erb")
|
155
|
-
type_spec_path = File.join(@object_dir, "#{object_type}_type_spec.erb")
|
156
|
-
|
157
|
-
if PDK::Util::Filesystem.file?(object_path) && PDK::Util::Filesystem.readable?(object_path)
|
158
|
-
result = { object: object_path }
|
159
|
-
result[:type] = type_path if PDK::Util::Filesystem.file?(type_path) && PDK::Util::Filesystem.readable?(type_path)
|
160
|
-
result[:spec] = spec_path if PDK::Util::Filesystem.file?(spec_path) && PDK::Util::Filesystem.readable?(spec_path)
|
161
|
-
result[:device] = device_path if PDK::Util::Filesystem.file?(device_path) && PDK::Util::Filesystem.readable?(device_path)
|
162
|
-
result[:type_spec] = type_spec_path if PDK::Util::Filesystem.file?(type_spec_path) && PDK::Util::Filesystem.readable?(type_spec_path)
|
163
|
-
result
|
164
|
-
else
|
165
|
-
nil
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
# Generate a hash of data to be used when rendering object templates.
|
170
|
-
#
|
171
|
-
# Read `config_defaults.yml` from the root of the template directory (if
|
172
|
-
# it exists) build a hash of values from the value of the `:global`
|
173
|
-
# key.
|
174
|
-
#
|
175
|
-
# @return [Hash] The data that will be available to the template via the
|
176
|
-
# `@configs` instance variable.
|
177
|
-
#
|
178
|
-
# @api private
|
179
|
-
def object_config
|
180
|
-
config_for(nil)
|
181
|
-
end
|
182
|
-
|
183
|
-
# Generate a hash of data to be used when rendering the specified
|
184
|
-
# template.
|
185
|
-
#
|
186
|
-
# @param dest_path [String] The destination path of the file that the
|
187
|
-
# data is for, relative to the root of the module.
|
188
|
-
#
|
189
|
-
# @return [Hash] The data that will be available to the template via the
|
190
|
-
# `@configs` instance variable.
|
191
|
-
#
|
192
|
-
# @api private
|
193
|
-
def config_for(dest_path, sync_config_path = nil)
|
194
|
-
require 'pdk/util'
|
195
|
-
require 'pdk/analytics'
|
196
|
-
|
197
|
-
module_root = PDK::Util.module_root
|
198
|
-
sync_config_path ||= File.join(module_root, '.sync.yml') unless module_root.nil?
|
199
|
-
config_path = File.join(@path, 'config_defaults.yml')
|
200
|
-
|
201
|
-
if @config.nil?
|
202
|
-
require 'deep_merge'
|
203
|
-
conf_defaults = read_config(config_path)
|
204
|
-
@sync_config = read_config(sync_config_path) unless sync_config_path.nil?
|
205
|
-
@config = conf_defaults
|
206
|
-
@config.deep_merge!(@sync_config, knockout_prefix: '---') unless @sync_config.nil?
|
207
|
-
end
|
208
|
-
file_config = @config.fetch(:global, {})
|
209
|
-
file_config['module_metadata'] = @module_metadata
|
210
|
-
file_config.merge!(@config.fetch(dest_path, {})) unless dest_path.nil?
|
211
|
-
file_config.merge!(@config).tap do |c|
|
212
|
-
if uri.default?
|
213
|
-
file_value = if c['unmanaged']
|
214
|
-
'unmanaged'
|
215
|
-
elsif c['delete']
|
216
|
-
'deleted'
|
217
|
-
elsif @sync_config && @sync_config.key?(dest_path)
|
218
|
-
'customized'
|
219
|
-
else
|
220
|
-
'default'
|
221
|
-
end
|
222
|
-
|
223
|
-
PDK.analytics.event('TemplateDir', 'file', label: dest_path, value: file_value)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
# Generates a hash of data from a given yaml file location.
|
229
|
-
#
|
230
|
-
# @param loc [String] The path of the yaml config file.
|
231
|
-
#
|
232
|
-
# @warn If the specified path is not a valid yaml file. Returns an empty Hash
|
233
|
-
# if so.
|
234
|
-
#
|
235
|
-
# @return [Hash] The data that has been read in from the given yaml file.
|
236
|
-
#
|
237
|
-
# @api private
|
238
|
-
def read_config(loc)
|
239
|
-
if PDK::Util::Filesystem.file?(loc) && PDK::Util::Filesystem.readable?(loc)
|
240
|
-
require 'yaml'
|
241
|
-
|
242
|
-
begin
|
243
|
-
YAML.safe_load(PDK::Util::Filesystem.read_file(loc), [], [], true)
|
244
|
-
rescue Psych::SyntaxError => e
|
245
|
-
PDK.logger.warn _("'%{file}' is not a valid YAML file: %{problem} %{context} at line %{line} column %{column}") % {
|
246
|
-
file: loc,
|
247
|
-
problem: e.problem,
|
248
|
-
context: e.context,
|
249
|
-
line: e.line,
|
250
|
-
column: e.column,
|
251
|
-
}
|
252
|
-
{}
|
253
|
-
end
|
254
|
-
else
|
255
|
-
{}
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
# @return [Path, Boolean] The path to the Template and whether this path is temporary. Temporary paths
|
260
|
-
# are deleted once the object has yielded
|
261
|
-
# @api private
|
262
|
-
def template_path(uri)
|
263
|
-
[uri.shell_path, false]
|
264
|
-
end
|
265
|
-
end
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|