pdk 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +53 -0
- data/README.md +7 -29
- data/lib/pdk/cli.rb +6 -0
- data/lib/pdk/cli/bundle.rb +11 -5
- data/lib/pdk/cli/exec.rb +37 -26
- data/lib/pdk/cli/test/unit.rb +11 -1
- data/lib/pdk/cli/util.rb +107 -10
- data/lib/pdk/cli/validate.rb +9 -2
- data/lib/pdk/generate/module.rb +1 -1
- data/lib/pdk/generate/provider.rb +11 -9
- data/lib/pdk/generate/puppet_object.rb +12 -4
- data/lib/pdk/module/convert.rb +20 -11
- data/lib/pdk/module/metadata.rb +19 -0
- data/lib/pdk/module/templatedir.rb +66 -42
- data/lib/pdk/module/update.rb +7 -7
- data/lib/pdk/tests/unit.rb +3 -4
- data/lib/pdk/util.rb +37 -2
- data/lib/pdk/util/bundler.rb +149 -52
- data/lib/pdk/util/git.rb +20 -3
- data/lib/pdk/util/puppet_version.rb +182 -0
- data/lib/pdk/util/ruby_version.rb +136 -0
- data/lib/pdk/util/vendored_file.rb +87 -0
- data/lib/pdk/util/version.rb +2 -0
- data/lib/pdk/validate/base_validator.rb +1 -1
- data/lib/pdk/validate/metadata/task_metadata_lint.rb +3 -28
- data/lib/pdk/version.rb +1 -1
- data/locales/pdk.pot +225 -133
- metadata +8 -5
data/lib/pdk/cli/validate.rb
CHANGED
@@ -13,6 +13,7 @@ module PDK::CLI
|
|
13
13
|
'If not specified, validators are run against all applicable files in the module.',
|
14
14
|
)
|
15
15
|
|
16
|
+
PDK::CLI.puppet_version_options(self)
|
16
17
|
flag nil, :list, _('List all available validators.')
|
17
18
|
flag :a, 'auto-correct', _('Automatically correct problems where possible.')
|
18
19
|
flag nil, :parallel, _('Run validations in parallel.')
|
@@ -32,11 +33,15 @@ module PDK::CLI
|
|
32
33
|
exit 0
|
33
34
|
end
|
34
35
|
|
36
|
+
PDK::CLI::Util.validate_puppet_version_opts(opts)
|
37
|
+
|
35
38
|
PDK::CLI::Util.ensure_in_module!(
|
36
39
|
message: _('Code validation can only be run from inside a valid module directory'),
|
37
40
|
log_level: :info,
|
38
41
|
)
|
39
42
|
|
43
|
+
PDK::CLI::Util.module_version_check
|
44
|
+
|
40
45
|
if args[0]
|
41
46
|
# This may be a single validator, a list of validators, or a target.
|
42
47
|
if Util::OptionValidator.comma_separated_list?(args[0])
|
@@ -80,8 +85,10 @@ module PDK::CLI
|
|
80
85
|
options = targets.empty? ? {} : { targets: targets }
|
81
86
|
options[:auto_correct] = true if opts.key?(:'auto-correct')
|
82
87
|
|
83
|
-
# Ensure that the
|
84
|
-
PDK::Util
|
88
|
+
# Ensure that the bundled gems are up to date and correct Ruby is activated before running any validations.
|
89
|
+
puppet_env = PDK::CLI::Util.puppet_from_opts_or_env(opts)
|
90
|
+
PDK::Util::RubyVersion.use(puppet_env[:ruby_version])
|
91
|
+
PDK::Util::Bundler.ensure_bundle!(puppet_env[:gemset])
|
85
92
|
|
86
93
|
exit_code = 0
|
87
94
|
if opts[:parallel]
|
data/lib/pdk/generate/module.rb
CHANGED
@@ -286,7 +286,7 @@ module PDK
|
|
286
286
|
if opts[:only_ask]
|
287
287
|
questions.reject! do |question|
|
288
288
|
if %w[module_name forge_username].include?(question[:name])
|
289
|
-
metadata.data['name'] && metadata.data['name'] =~ %r{\A[a-z0-9]+-[a-z0-
|
289
|
+
metadata.data['name'] && metadata.data['name'] =~ %r{\A[a-z0-9]+-[a-z][a-z0-9_]*\Z}i
|
290
290
|
else
|
291
291
|
!opts[:only_ask].include?(question[:name])
|
292
292
|
end
|
@@ -52,25 +52,27 @@ module PDK
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
# @return [String] the path where the new
|
55
|
+
# @return [String] the path where the new provider will be written.
|
56
56
|
def target_object_path
|
57
|
-
@target_object_path ||= File.join(module_dir, 'lib', 'puppet', '
|
57
|
+
@target_object_path ||= File.join(module_dir, 'lib', 'puppet', 'provider', object_name, object_name) + '.rb'
|
58
58
|
end
|
59
59
|
|
60
|
-
# @return [String] the path where the new
|
61
|
-
def
|
62
|
-
@
|
60
|
+
# @return [String] the path where the new type will be written.
|
61
|
+
def target_type_path
|
62
|
+
@target_type_path ||= File.join(module_dir, 'lib', 'puppet', 'type', object_name) + '.rb'
|
63
63
|
end
|
64
64
|
|
65
|
-
#
|
66
|
-
# type will be written.
|
67
|
-
#
|
68
|
-
# @return [String] the path where the tests for the new defined type
|
65
|
+
# @return [String] the path where the tests for the new provider
|
69
66
|
# will be written.
|
70
67
|
def target_spec_path
|
71
68
|
@target_spec_path ||= File.join(module_dir, 'spec', 'unit', 'puppet', 'provider', object_name, object_name) + '_spec.rb'
|
72
69
|
end
|
73
70
|
|
71
|
+
# @return [String] the path where the tests for the new type will be written.
|
72
|
+
def target_type_spec_path
|
73
|
+
@target_type_spec_path ||= File.join(module_dir, 'spec', 'unit', 'puppet', 'type', object_name) + '_spec.rb'
|
74
|
+
end
|
75
|
+
|
74
76
|
# transform a object name into a ruby class name
|
75
77
|
def self.class_name_from_object_name(object_name)
|
76
78
|
object_name.to_s.split('_').map(&:capitalize).join
|
@@ -58,11 +58,11 @@ module PDK
|
|
58
58
|
raise NotImplementedError
|
59
59
|
end
|
60
60
|
|
61
|
-
# @abstract Subclass and implement {#
|
61
|
+
# @abstract Subclass and implement {#target_type_path}. Implementations
|
62
62
|
# of this method should return a String containing the destination path
|
63
63
|
# of the additional object file being generated.
|
64
64
|
# @return [String] returns nil if there is no additional object file
|
65
|
-
def
|
65
|
+
def target_type_path
|
66
66
|
nil
|
67
67
|
end
|
68
68
|
|
@@ -73,6 +73,13 @@ module PDK
|
|
73
73
|
raise NotImplementedError
|
74
74
|
end
|
75
75
|
|
76
|
+
# @abstract Subclass and implement {#target_type_spec_path}. Implementations
|
77
|
+
# of this method should return a String containing the destination path
|
78
|
+
# of the tests for the object being generated.
|
79
|
+
def target_type_spec_path
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
|
76
83
|
# Retrieves the type of the object being generated, e.g. :class,
|
77
84
|
# :defined_type, etc. This is specified in the subclass' OBJECT_TYPE
|
78
85
|
# constant.
|
@@ -91,7 +98,7 @@ module PDK
|
|
91
98
|
#
|
92
99
|
# @api public
|
93
100
|
def check_preconditions
|
94
|
-
[target_object_path,
|
101
|
+
[target_object_path, target_type_path, target_spec_path, target_type_spec_path].compact.each do |target_file|
|
95
102
|
next unless File.exist?(target_file)
|
96
103
|
|
97
104
|
raise PDK::CLI::ExitWithError, _("Unable to generate %{object_type}; '%{file}' already exists.") % {
|
@@ -116,8 +123,9 @@ module PDK
|
|
116
123
|
data = template_data.merge(configs: config_hash)
|
117
124
|
|
118
125
|
render_file(target_object_path, template_path[:object], data)
|
119
|
-
render_file(
|
126
|
+
render_file(target_type_path, template_path[:type], data) if template_path[:type]
|
120
127
|
render_file(target_spec_path, template_path[:spec], data) if template_path[:spec]
|
128
|
+
render_file(target_type_spec_path, template_path[:type_spec], data) if template_path[:type_spec]
|
121
129
|
end
|
122
130
|
end
|
123
131
|
|
data/lib/pdk/module/convert.rb
CHANGED
@@ -66,22 +66,31 @@ module PDK
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def stage_changes!
|
69
|
+
metadata_path = 'metadata.json'
|
70
|
+
|
69
71
|
PDK::Module::TemplateDir.new(template_url, nil, false) do |templates|
|
70
|
-
new_metadata = update_metadata(
|
72
|
+
new_metadata = update_metadata(metadata_path, templates.metadata)
|
73
|
+
templates.module_metadata = new_metadata.data unless new_metadata.nil?
|
71
74
|
|
72
75
|
if options[:noop] && new_metadata.nil?
|
73
|
-
update_manager.add_file(
|
74
|
-
elsif File.file?(
|
75
|
-
update_manager.modify_file(
|
76
|
+
update_manager.add_file(metadata_path, '')
|
77
|
+
elsif File.file?(metadata_path)
|
78
|
+
update_manager.modify_file(metadata_path, new_metadata.to_json)
|
76
79
|
else
|
77
|
-
update_manager.add_file(
|
80
|
+
update_manager.add_file(metadata_path, new_metadata.to_json)
|
78
81
|
end
|
79
82
|
|
80
|
-
templates.render do |file_path, file_content|
|
81
|
-
if
|
82
|
-
|
83
|
-
|
84
|
-
update_manager.
|
83
|
+
templates.render do |file_path, file_content, file_status|
|
84
|
+
if file_status == :unmanage
|
85
|
+
PDK.logger.debug(_("skipping '%{path}'") % { path: file_path })
|
86
|
+
elsif file_status == :delete
|
87
|
+
update_manager.remove_file(file_path)
|
88
|
+
elsif file_status == :manage
|
89
|
+
if File.exist? file_path
|
90
|
+
update_manager.modify_file(file_path, file_content)
|
91
|
+
else
|
92
|
+
update_manager.add_file(file_path, file_content)
|
93
|
+
end
|
85
94
|
end
|
86
95
|
end
|
87
96
|
end
|
@@ -126,7 +135,7 @@ module PDK
|
|
126
135
|
end
|
127
136
|
|
128
137
|
metadata.update!(template_metadata)
|
129
|
-
metadata
|
138
|
+
metadata
|
130
139
|
end
|
131
140
|
|
132
141
|
def summary
|
data/lib/pdk/module/metadata.rb
CHANGED
@@ -87,6 +87,25 @@ module PDK
|
|
87
87
|
PDK::Generate::Module.module_interview(self, only_ask: missing_fields)
|
88
88
|
end
|
89
89
|
|
90
|
+
def validate_puppet_version_requirement!
|
91
|
+
msgs = {
|
92
|
+
no_reqs: _('Module metadata does not contain any requirements.'),
|
93
|
+
no_puppet_req: _('Module metadata does not contain a "puppet" requirement.'),
|
94
|
+
no_puppet_ver: _('The "puppet" requirement in module metadata does not specify a "version_requirement".'),
|
95
|
+
}
|
96
|
+
|
97
|
+
raise ArgumentError, msgs[:no_reqs] unless @data.key?('requirements')
|
98
|
+
raise ArgumentError, msgs[:no_puppet_req] if puppet_requirement.nil?
|
99
|
+
raise ArgumentError, msgs[:no_puppet_ver] unless puppet_requirement.key?('version_requirement')
|
100
|
+
raise ArgumentError, msgs[:no_puppet_ver] if puppet_requirement['version_requirement'].empty?
|
101
|
+
end
|
102
|
+
|
103
|
+
def puppet_requirement
|
104
|
+
@data['requirements'].find do |r|
|
105
|
+
r.key?('name') && r['name'] == 'puppet'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
90
109
|
private
|
91
110
|
|
92
111
|
def missing_fields
|
@@ -8,6 +8,8 @@ require 'pdk/template_file'
|
|
8
8
|
module PDK
|
9
9
|
module Module
|
10
10
|
class TemplateDir
|
11
|
+
attr_accessor :module_metadata
|
12
|
+
|
11
13
|
# Initialises the TemplateDir object with the path or URL to the template
|
12
14
|
# and the block of code to run to be run while the template is available.
|
13
15
|
#
|
@@ -30,43 +32,21 @@ module PDK
|
|
30
32
|
# end
|
31
33
|
# end
|
32
34
|
#
|
33
|
-
# @raise [
|
34
|
-
#
|
35
|
-
# @raise [PDK::CLI::FatalError] If the template is a git repository and
|
36
|
-
# the git clone operation fails.
|
35
|
+
# @raise [ArgumentError] If no block is given to this method.
|
36
|
+
# @raise [PDK::CLI::FatalError] (see #clone_repo)
|
37
37
|
# @raise [ArgumentError] (see #validate_module_template!)
|
38
38
|
#
|
39
39
|
# @api public
|
40
40
|
def initialize(path_or_url, module_metadata = {}, init = false)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
# If path_or_url isn't a directory on disk, we assume that it is
|
45
|
-
# a remote git repository.
|
46
|
-
|
47
|
-
# @todo When switching this over to using rugged, cache the cloned
|
48
|
-
# template repo in `%AppData%` or `$XDG_CACHE_DIR` and update before
|
49
|
-
# use.
|
50
|
-
temp_dir = PDK::Util.make_tmpdir_name('pdk-templates')
|
51
|
-
git_ref = (path_or_url == PDK::Util.default_template_url) ? PDK::Util.default_template_ref : 'origin/master'
|
52
|
-
|
53
|
-
clone_result = PDK::Util::Git.git('clone', path_or_url, temp_dir)
|
54
|
-
|
55
|
-
if clone_result[:exit_code].zero?
|
56
|
-
reset_result = PDK::Util::Git.git('-C', temp_dir, 'reset', '--hard', git_ref)
|
57
|
-
unless reset_result[:exit_code].zero?
|
58
|
-
PDK.logger.error reset_result[:stdout]
|
59
|
-
PDK.logger.error reset_result[:stderr]
|
60
|
-
raise PDK::CLI::FatalError, _("Unable to set git repository '%{repo}' to ref:'%{ref}'.") % { repo: temp_dir, ref: git_ref }
|
61
|
-
end
|
62
|
-
else
|
63
|
-
PDK.logger.error clone_result[:stdout]
|
64
|
-
PDK.logger.error clone_result[:stderr]
|
65
|
-
raise PDK::CLI::FatalError, _("Unable to clone git repository '%{repo}' to '%{dest}'.") % { repo: path_or_url, dest: temp_dir }
|
66
|
-
end
|
41
|
+
unless block_given?
|
42
|
+
raise ArgumentError, _('%{class_name} must be initialized with a block.') % { class_name: self.class.name }
|
43
|
+
end
|
67
44
|
|
68
|
-
|
45
|
+
if PDK::Util::Git.repo?(path_or_url)
|
46
|
+
@path = self.class.clone_template_repo(path_or_url)
|
69
47
|
@repo = path_or_url
|
48
|
+
else
|
49
|
+
@path = path_or_url
|
70
50
|
end
|
71
51
|
|
72
52
|
@init = init
|
@@ -75,6 +55,7 @@ module PDK
|
|
75
55
|
@dirs = [@moduleroot_dir]
|
76
56
|
@dirs << @moduleroot_init if @init
|
77
57
|
@object_dir = File.join(@path, 'object_templates')
|
58
|
+
|
78
59
|
validate_module_template!
|
79
60
|
|
80
61
|
@module_metadata = module_metadata
|
@@ -127,16 +108,26 @@ module PDK
|
|
127
108
|
template_file = template_file.to_s
|
128
109
|
PDK.logger.debug(_("Rendering '%{template}'...") % { template: template_file })
|
129
110
|
dest_path = template_file.sub(%r{\.erb\Z}, '')
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
111
|
+
config = config_for(dest_path)
|
112
|
+
dest_status = :manage
|
113
|
+
|
114
|
+
if config['unmanaged']
|
115
|
+
dest_status = :unmanage
|
116
|
+
elsif config['delete']
|
117
|
+
dest_status = :delete
|
118
|
+
else
|
119
|
+
begin
|
120
|
+
dest_content = PDK::TemplateFile.new(File.join(template_loc, template_file), configs: config).render
|
121
|
+
rescue => e
|
122
|
+
error_msg = _(
|
123
|
+
"Failed to render template '%{template}'\n" \
|
124
|
+
'%{exception}: %{message}',
|
125
|
+
) % { template: template_file, exception: e.class, message: e.message }
|
126
|
+
raise PDK::CLI::FatalError, error_msg
|
127
|
+
end
|
138
128
|
end
|
139
|
-
|
129
|
+
|
130
|
+
yield dest_path, dest_content, dest_status
|
140
131
|
end
|
141
132
|
end
|
142
133
|
|
@@ -155,13 +146,15 @@ module PDK
|
|
155
146
|
# @api public
|
156
147
|
def object_template_for(object_type)
|
157
148
|
object_path = File.join(@object_dir, "#{object_type}.erb")
|
158
|
-
|
149
|
+
type_path = File.join(@object_dir, "#{object_type}_type.erb")
|
159
150
|
spec_path = File.join(@object_dir, "#{object_type}_spec.erb")
|
151
|
+
type_spec_path = File.join(@object_dir, "#{object_type}_type_spec.erb")
|
160
152
|
|
161
153
|
if File.file?(object_path) && File.readable?(object_path)
|
162
154
|
result = { object: object_path }
|
163
|
-
result[:
|
155
|
+
result[:type] = type_path if File.file?(type_path) && File.readable?(type_path)
|
164
156
|
result[:spec] = spec_path if File.file?(spec_path) && File.readable?(spec_path)
|
157
|
+
result[:type_spec] = type_spec_path if File.file?(type_spec_path) && File.readable?(type_spec_path)
|
165
158
|
result
|
166
159
|
else
|
167
160
|
nil
|
@@ -282,6 +275,37 @@ module PDK
|
|
282
275
|
{}
|
283
276
|
end
|
284
277
|
end
|
278
|
+
|
279
|
+
# @return [String] Path to working directory into which template repo has been cloned and reset
|
280
|
+
#
|
281
|
+
# @raise [PDK::CLI::FatalError] If unable to clone the given origin_repo into a tempdir.
|
282
|
+
# @raise [PDK::CLI::FatalError] If reset HEAD of the cloned repo to desired ref.
|
283
|
+
#
|
284
|
+
# @api private
|
285
|
+
def self.clone_template_repo(origin_repo)
|
286
|
+
# @todo When switching this over to using rugged, cache the cloned
|
287
|
+
# template repo in `%AppData%` or `$XDG_CACHE_DIR` and update before
|
288
|
+
# use.
|
289
|
+
temp_dir = PDK::Util.make_tmpdir_name('pdk-templates')
|
290
|
+
git_ref = (origin_repo == PDK::Util.default_template_url) ? PDK::Util.default_template_ref : 'origin/master'
|
291
|
+
|
292
|
+
clone_result = PDK::Util::Git.git('clone', origin_repo, temp_dir)
|
293
|
+
|
294
|
+
if clone_result[:exit_code].zero?
|
295
|
+
reset_result = PDK::Util::Git.git('-C', temp_dir, 'reset', '--hard', git_ref)
|
296
|
+
unless reset_result[:exit_code].zero?
|
297
|
+
PDK.logger.error reset_result[:stdout]
|
298
|
+
PDK.logger.error reset_result[:stderr]
|
299
|
+
raise PDK::CLI::FatalError, _("Unable to set HEAD of git repository at '%{repo}' to ref:'%{ref}'.") % { repo: temp_dir, ref: git_ref }
|
300
|
+
end
|
301
|
+
else
|
302
|
+
PDK.logger.error clone_result[:stdout]
|
303
|
+
PDK.logger.error clone_result[:stderr]
|
304
|
+
raise PDK::CLI::FatalError, _("Unable to clone git repository at '%{repo}' into '%{dest}'.") % { repo: origin_repo, dest: temp_dir }
|
305
|
+
end
|
306
|
+
|
307
|
+
PDK::Util.canonical_path(temp_dir)
|
308
|
+
end
|
285
309
|
end
|
286
310
|
end
|
287
311
|
end
|
data/lib/pdk/module/update.rb
CHANGED
@@ -8,14 +8,14 @@ module PDK
|
|
8
8
|
def run
|
9
9
|
stage_changes!
|
10
10
|
|
11
|
+
if current_version == new_version
|
12
|
+
PDK.logger.debug _('This module is already up to date with version %{version} of the template.') % {
|
13
|
+
version: new_version,
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
11
17
|
unless update_manager.changes?
|
12
|
-
|
13
|
-
PDK.logger.info _('This module is already up to date with version %{version} of the template.') % {
|
14
|
-
version: new_version,
|
15
|
-
}
|
16
|
-
else
|
17
|
-
PDK::Report.default_target.puts(_('No changes required.'))
|
18
|
-
end
|
18
|
+
PDK::Report.default_target.puts(_('No changes required.'))
|
19
19
|
return
|
20
20
|
end
|
21
21
|
|
data/lib/pdk/tests/unit.rb
CHANGED
@@ -18,7 +18,7 @@ module PDK
|
|
18
18
|
|
19
19
|
def self.rake(task, spinner_text, environment = {})
|
20
20
|
argv = [rake_bin, task]
|
21
|
-
argv.unshift('ruby') if Gem.win_platform?
|
21
|
+
argv.unshift(File.join(PDK::Util::RubyVersion.bin_path, 'ruby.exe')) if Gem.win_platform?
|
22
22
|
|
23
23
|
command = PDK::CLI::Exec::Command.new(*argv).tap do |c|
|
24
24
|
c.context = :module
|
@@ -62,7 +62,6 @@ module PDK
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.invoke(report, options = {})
|
65
|
-
PDK::Util::Bundler.ensure_bundle!
|
66
65
|
PDK::Util::Bundler.ensure_binstubs!('rake')
|
67
66
|
|
68
67
|
setup
|
@@ -181,11 +180,11 @@ module PDK
|
|
181
180
|
|
182
181
|
# @return array of { :id, :full_description }
|
183
182
|
def self.list
|
184
|
-
PDK::Util::Bundler.ensure_bundle!
|
185
183
|
PDK::Util::Bundler.ensure_binstubs!('rake')
|
186
184
|
|
187
185
|
command_argv = [File.join(PDK::Util.module_root, 'bin', 'rake'), 'spec_list_json']
|
188
|
-
command_argv.unshift('ruby') if Gem.win_platform?
|
186
|
+
command_argv.unshift(File.join(PDK::Util::RubyVersion.bin_path, 'ruby.exe')) if Gem.win_platform?
|
187
|
+
|
189
188
|
list_command = PDK::CLI::Exec::Command.new(*command_argv)
|
190
189
|
list_command.context = :module
|
191
190
|
output = list_command.execute!
|
data/lib/pdk/util.rb
CHANGED
@@ -3,9 +3,19 @@ require 'tempfile'
|
|
3
3
|
|
4
4
|
require 'pdk/util/version'
|
5
5
|
require 'pdk/util/windows'
|
6
|
+
require 'pdk/util/vendored_file'
|
6
7
|
|
7
8
|
module PDK
|
8
9
|
module Util
|
10
|
+
MODULE_FOLDERS = %w[
|
11
|
+
manifests
|
12
|
+
lib
|
13
|
+
tasks
|
14
|
+
facts.d
|
15
|
+
functions
|
16
|
+
types
|
17
|
+
].freeze
|
18
|
+
|
9
19
|
# Searches upwards from current working directory for the given target file.
|
10
20
|
#
|
11
21
|
# @param target [String] Name of file to search for.
|
@@ -32,7 +42,9 @@ module PDK
|
|
32
42
|
#
|
33
43
|
# @return [String] The temporary directory path.
|
34
44
|
def make_tmpdir_name(base)
|
35
|
-
|
45
|
+
t = Time.now.strftime('%Y%m%d')
|
46
|
+
name = "#{base}#{t}-#{Process.pid}-#{rand(0x100000000).to_s(36)}"
|
47
|
+
File.join(Dir.tmpdir, name)
|
36
48
|
end
|
37
49
|
module_function :make_tmpdir_name
|
38
50
|
|
@@ -100,12 +112,24 @@ module PDK
|
|
100
112
|
metadata_path = find_upwards('metadata.json')
|
101
113
|
if metadata_path
|
102
114
|
File.dirname(metadata_path)
|
115
|
+
elsif in_module_root?
|
116
|
+
Dir.pwd
|
103
117
|
else
|
104
118
|
nil
|
105
119
|
end
|
106
120
|
end
|
107
121
|
module_function :module_root
|
108
122
|
|
123
|
+
# Returns true or false depending on if any of the common directories in a module
|
124
|
+
# are found in the current directory
|
125
|
+
#
|
126
|
+
# @return [boolean] True if any folders from MODULE_FOLDERS are found in the current dir,
|
127
|
+
# false otherwise.
|
128
|
+
def in_module_root?
|
129
|
+
PDK::Util::MODULE_FOLDERS.any? { |dir| File.directory?(dir) }
|
130
|
+
end
|
131
|
+
module_function :in_module_root?
|
132
|
+
|
109
133
|
# Iterate through possible JSON documents until we find one that is valid.
|
110
134
|
#
|
111
135
|
# @param [String] text the text in which to find a JSON document
|
@@ -181,7 +205,7 @@ module PDK
|
|
181
205
|
return puppetlabs_template_url if answer_file_url == 'https://github.com/puppetlabs/pdk-module-template'
|
182
206
|
return puppetlabs_template_url if answer_file_url == puppetlabs_template_url
|
183
207
|
|
184
|
-
unless PDK::Util::Git.
|
208
|
+
unless PDK::Util::Git.repo?(answer_file_url)
|
185
209
|
PDK.logger.warn(_("Unable to access the previously used template '%{template}', using the default template instead.") % { template: answer_file_url })
|
186
210
|
PDK.answers.update!('template-url' => nil)
|
187
211
|
return puppetlabs_template_url
|
@@ -228,5 +252,16 @@ module PDK
|
|
228
252
|
['pdk-version', 'template-url'].any? { |key| module_metadata.key?(key) }
|
229
253
|
end
|
230
254
|
module_function :module_pdk_compatible?
|
255
|
+
|
256
|
+
def module_pdk_version
|
257
|
+
metadata = module_metadata
|
258
|
+
|
259
|
+
if !metadata.nil? && metadata.include?('pdk-version')
|
260
|
+
metadata['pdk-version'].split.first
|
261
|
+
else
|
262
|
+
nil
|
263
|
+
end
|
264
|
+
end
|
265
|
+
module_function :module_pdk_version
|
231
266
|
end
|
232
267
|
end
|