pdk 2.7.1 → 3.0.0

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.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +2 -48
  4. data/lib/pdk/analytics/client/google_analytics.rb +22 -26
  5. data/lib/pdk/analytics/util.rb +0 -1
  6. data/lib/pdk/analytics.rb +1 -1
  7. data/lib/pdk/bolt.rb +1 -0
  8. data/lib/pdk/cli/build.rb +53 -56
  9. data/lib/pdk/cli/bundle.rb +34 -33
  10. data/lib/pdk/cli/console.rb +136 -134
  11. data/lib/pdk/cli/convert.rb +39 -41
  12. data/lib/pdk/cli/env.rb +49 -47
  13. data/lib/pdk/cli/errors.rb +1 -2
  14. data/lib/pdk/cli/exec/command.rb +23 -29
  15. data/lib/pdk/cli/exec/interactive_command.rb +7 -12
  16. data/lib/pdk/cli/exec.rb +4 -11
  17. data/lib/pdk/cli/exec_group.rb +3 -2
  18. data/lib/pdk/cli/get/config.rb +21 -19
  19. data/lib/pdk/cli/get.rb +15 -13
  20. data/lib/pdk/cli/new/class.rb +22 -22
  21. data/lib/pdk/cli/new/defined_type.rb +22 -22
  22. data/lib/pdk/cli/new/fact.rb +19 -19
  23. data/lib/pdk/cli/new/function.rb +20 -20
  24. data/lib/pdk/cli/new/module.rb +40 -38
  25. data/lib/pdk/cli/new/provider.rb +19 -19
  26. data/lib/pdk/cli/new/task.rb +23 -23
  27. data/lib/pdk/cli/new/test.rb +50 -48
  28. data/lib/pdk/cli/new/transport.rb +18 -18
  29. data/lib/pdk/cli/new.rb +11 -9
  30. data/lib/pdk/cli/release/prep.rb +27 -25
  31. data/lib/pdk/cli/release/publish.rb +39 -37
  32. data/lib/pdk/cli/release.rb +152 -149
  33. data/lib/pdk/cli/remove/config.rb +63 -60
  34. data/lib/pdk/cli/remove.rb +15 -13
  35. data/lib/pdk/cli/set/config.rb +91 -89
  36. data/lib/pdk/cli/set.rb +15 -13
  37. data/lib/pdk/cli/test/unit.rb +71 -69
  38. data/lib/pdk/cli/test.rb +9 -7
  39. data/lib/pdk/cli/update.rb +33 -38
  40. data/lib/pdk/cli/util/command_redirector.rb +10 -1
  41. data/lib/pdk/cli/util/interview.rb +11 -4
  42. data/lib/pdk/cli/util/option_normalizer.rb +2 -4
  43. data/lib/pdk/cli/util/option_validator.rb +7 -9
  44. data/lib/pdk/cli/util/update_manager_printer.rb +4 -4
  45. data/lib/pdk/cli/util.rb +32 -48
  46. data/lib/pdk/cli/validate.rb +98 -96
  47. data/lib/pdk/cli.rb +124 -120
  48. data/lib/pdk/config/ini_file.rb +4 -3
  49. data/lib/pdk/config/ini_file_setting.rb +6 -10
  50. data/lib/pdk/config/json.rb +1 -0
  51. data/lib/pdk/config/json_schema_namespace.rb +5 -10
  52. data/lib/pdk/config/json_schema_setting.rb +3 -5
  53. data/lib/pdk/config/json_with_schema.rb +2 -4
  54. data/lib/pdk/config/namespace.rb +19 -13
  55. data/lib/pdk/config/setting.rb +5 -6
  56. data/lib/pdk/config/task_schema.json +116 -0
  57. data/lib/pdk/config/validator.rb +4 -4
  58. data/lib/pdk/config/yaml.rb +3 -8
  59. data/lib/pdk/config/yaml_with_schema.rb +4 -12
  60. data/lib/pdk/config.rb +47 -51
  61. data/lib/pdk/context/control_repo.rb +3 -2
  62. data/lib/pdk/context/module.rb +2 -2
  63. data/lib/pdk/context/none.rb +2 -2
  64. data/lib/pdk/context.rb +4 -5
  65. data/lib/pdk/control_repo.rb +3 -4
  66. data/lib/pdk/generate/defined_type.rb +3 -3
  67. data/lib/pdk/generate/fact.rb +3 -2
  68. data/lib/pdk/generate/function.rb +5 -4
  69. data/lib/pdk/generate/module.rb +91 -106
  70. data/lib/pdk/generate/provider.rb +5 -4
  71. data/lib/pdk/generate/puppet_class.rb +3 -3
  72. data/lib/pdk/generate/puppet_object.rb +9 -12
  73. data/lib/pdk/generate/task.rb +11 -10
  74. data/lib/pdk/generate/transport.rb +8 -7
  75. data/lib/pdk/generate.rb +1 -1
  76. data/lib/pdk/logger.rb +3 -2
  77. data/lib/pdk/module/build.rb +34 -49
  78. data/lib/pdk/module/convert.rb +13 -22
  79. data/lib/pdk/module/metadata.rb +53 -61
  80. data/lib/pdk/module/release.rb +19 -25
  81. data/lib/pdk/module/update.rb +4 -13
  82. data/lib/pdk/module/update_manager.rb +18 -25
  83. data/lib/pdk/module.rb +1 -1
  84. data/lib/pdk/monkey_patches.rb +268 -0
  85. data/lib/pdk/report/event.rb +12 -37
  86. data/lib/pdk/report.rb +4 -4
  87. data/lib/pdk/template/fetcher/git.rb +7 -8
  88. data/lib/pdk/template/fetcher/local.rb +1 -0
  89. data/lib/pdk/template/fetcher.rb +4 -2
  90. data/lib/pdk/template/renderer/v1/legacy_template_dir.rb +4 -9
  91. data/lib/pdk/template/renderer/v1/renderer.rb +19 -20
  92. data/lib/pdk/template/renderer/v1/template_file.rb +4 -8
  93. data/lib/pdk/template/renderer/v1.rb +1 -1
  94. data/lib/pdk/template/renderer.rb +1 -0
  95. data/lib/pdk/template/template_dir.rb +3 -3
  96. data/lib/pdk/template.rb +2 -6
  97. data/lib/pdk/tests/unit.rb +36 -25
  98. data/lib/pdk/util/bundler.rb +10 -14
  99. data/lib/pdk/util/changelog_generator.rb +15 -12
  100. data/lib/pdk/util/env.rb +1 -0
  101. data/lib/pdk/util/filesystem.rb +18 -17
  102. data/lib/pdk/util/git.rb +16 -21
  103. data/lib/pdk/util/json_finder.rb +7 -6
  104. data/lib/pdk/util/puppet_strings.rb +1 -1
  105. data/lib/pdk/util/puppet_version.rb +16 -67
  106. data/lib/pdk/util/ruby_version.rb +9 -13
  107. data/lib/pdk/util/template_uri.rb +17 -29
  108. data/lib/pdk/util/vendored_file.rb +5 -18
  109. data/lib/pdk/util/windows/api_types.rb +70 -64
  110. data/lib/pdk/util/windows/file.rb +31 -27
  111. data/lib/pdk/util/windows/process.rb +59 -61
  112. data/lib/pdk/util/windows/string.rb +19 -12
  113. data/lib/pdk/util.rb +12 -20
  114. data/lib/pdk/validate/control_repo/control_repo_validator_group.rb +1 -1
  115. data/lib/pdk/validate/control_repo/environment_conf_validator.rb +25 -25
  116. data/lib/pdk/validate/external_command_validator.rb +6 -1
  117. data/lib/pdk/validate/internal_ruby_validator.rb +5 -4
  118. data/lib/pdk/validate/invokable_validator.rb +30 -20
  119. data/lib/pdk/validate/metadata/metadata_json_lint_validator.rb +12 -14
  120. data/lib/pdk/validate/metadata/metadata_syntax_validator.rb +13 -15
  121. data/lib/pdk/validate/metadata/metadata_validator_group.rb +1 -1
  122. data/lib/pdk/validate/puppet/puppet_epp_validator.rb +16 -18
  123. data/lib/pdk/validate/puppet/puppet_lint_validator.rb +14 -14
  124. data/lib/pdk/validate/puppet/puppet_plan_syntax_validator.rb +1 -1
  125. data/lib/pdk/validate/puppet/puppet_syntax_validator.rb +16 -18
  126. data/lib/pdk/validate/puppet/puppet_validator_group.rb +1 -1
  127. data/lib/pdk/validate/ruby/ruby_rubocop_validator.rb +10 -11
  128. data/lib/pdk/validate/ruby/ruby_validator_group.rb +1 -1
  129. data/lib/pdk/validate/tasks/tasks_metadata_lint_validator.rb +19 -24
  130. data/lib/pdk/validate/tasks/tasks_name_validator.rb +11 -13
  131. data/lib/pdk/validate/tasks/tasks_validator_group.rb +1 -1
  132. data/lib/pdk/validate/validator.rb +4 -2
  133. data/lib/pdk/validate/validator_group.rb +6 -3
  134. data/lib/pdk/validate/yaml/yaml_syntax_validator.rb +27 -36
  135. data/lib/pdk/validate/yaml/yaml_validator_group.rb +1 -1
  136. data/lib/pdk/validate.rb +6 -6
  137. data/lib/pdk/version.rb +2 -2
  138. data/lib/pdk.rb +12 -12
  139. metadata +27 -35
  140. data/lib/pdk/cli/config/get.rb +0 -26
  141. data/lib/pdk/cli/config.rb +0 -22
  142. data/lib/pdk/cli/module/build.rb +0 -12
  143. data/lib/pdk/cli/module/generate.rb +0 -47
  144. data/lib/pdk/cli/module.rb +0 -14
@@ -7,8 +7,7 @@ module PDK
7
7
  new(options).build
8
8
  end
9
9
 
10
- attr_reader :module_dir
11
- attr_reader :target_dir
10
+ attr_reader :module_dir, :target_dir
12
11
 
13
12
  def initialize(options = {})
14
13
  @module_dir = PDK::Util::Filesystem.expand_path(options[:module_dir] || Dir.pwd)
@@ -86,7 +85,7 @@ module PDK
86
85
  def release_name
87
86
  @release_name ||= [
88
87
  metadata['name'],
89
- metadata['version'],
88
+ metadata['version']
90
89
  ].join('-')
91
90
  end
92
91
 
@@ -126,8 +125,8 @@ module PDK
126
125
  PDK::Util::Filesystem.cp(path, dest_path, preserve: true)
127
126
  end
128
127
  rescue ArgumentError => e
129
- raise PDK::CLI::ExitWithError, '%{message} Rename the file or exclude it from the package ' \
130
- 'by adding it to the .pdkignore file in your module.' % { message: e.message }
128
+ raise PDK::CLI::ExitWithError, format('%{message} Rename the file or exclude it from the package ' \
129
+ 'by adding it to the .pdkignore file in your module.', message: e.message)
131
130
  end
132
131
 
133
132
  # Check if the given path matches one of the patterns listed in the
@@ -137,7 +136,7 @@ module PDK
137
136
  #
138
137
  # @return [Boolean] true if the path matches and should be ignored.
139
138
  def ignored_path?(path)
140
- path = path.to_s + '/' if PDK::Util::Filesystem.directory?(path)
139
+ path = "#{path}/" if PDK::Util::Filesystem.directory?(path)
141
140
 
142
141
  !ignored_files.match_paths([path], module_dir).empty?
143
142
  end
@@ -154,10 +153,8 @@ module PDK
154
153
  symlink_path = Pathname.new(path)
155
154
  module_path = Pathname.new(module_dir)
156
155
 
157
- PDK.logger.warn 'Symlinks in modules are not supported and will not be included in the package. Please investigate symlink %{from} -> %{to}.' % {
158
- from: symlink_path.relative_path_from(module_path),
159
- to: symlink_path.realpath.relative_path_from(module_path),
160
- }
156
+ PDK.logger.warn format('Symlinks in modules are not supported and will not be included in the package. Please investigate symlink %{from} -> %{to}.',
157
+ from: symlink_path.relative_path_from(module_path), to: symlink_path.realpath.relative_path_from(module_path))
161
158
  end
162
159
 
163
160
  # Checks if the path length will fit into the POSIX.1-1998 (ustar) tar
@@ -180,11 +177,7 @@ module PDK
180
177
  #
181
178
  # @return [nil]
182
179
  def validate_ustar_path!(path)
183
- if path.bytesize > 256
184
- raise ArgumentError, "The path '%{path}' is longer than 256 bytes." % {
185
- path: path,
186
- }
187
- end
180
+ raise ArgumentError, format("The path '%{path}' is longer than 256 bytes.", path: path) if path.bytesize > 256
188
181
 
189
182
  if path.bytesize <= 100
190
183
  prefix = ''
@@ -196,6 +189,7 @@ module PDK
196
189
  loop do
197
190
  nxt = parts.pop || ''
198
191
  break if newpath.bytesize + 1 + nxt.bytesize >= 100
192
+
199
193
  newpath = File.join(nxt, newpath)
200
194
  end
201
195
 
@@ -206,9 +200,9 @@ module PDK
206
200
  return unless path.bytesize > 100 || prefix.bytesize > 155
207
201
 
208
202
  raise ArgumentError,
209
- "'%{path}' could not be split at a directory separator into two " \
210
- 'parts, the first having a maximum length of 155 bytes and the ' \
211
- 'second having a maximum length of 100 bytes.' % { path: path }
203
+ format("'%{path}' could not be split at a directory separator into two " \
204
+ 'parts, the first having a maximum length of 155 bytes and the ' \
205
+ 'second having a maximum length of 100 bytes.', path: path)
212
206
  end
213
207
 
214
208
  # Checks if the path contains any non-ASCII characters.
@@ -224,10 +218,10 @@ module PDK
224
218
  #
225
219
  # @return [nil]
226
220
  def validate_path_encoding!(path)
227
- return unless path =~ %r{[^\x00-\x7F]}
221
+ return unless /[^\x00-\x7F]/.match?(path)
228
222
 
229
- raise ArgumentError, "'%{path}' can only include ASCII characters in its path or " \
230
- 'filename in order to be compatible with a wide range of hosts.' % { path: path }
223
+ raise ArgumentError, format("'%{path}' can only include ASCII characters in its path or " \
224
+ 'filename in order to be compatible with a wide range of hosts.', path: path)
231
225
  end
232
226
 
233
227
  # Creates a gzip compressed tarball of the build directory.
@@ -244,31 +238,24 @@ module PDK
244
238
  PDK::Util::Filesystem.rm_f(package_file)
245
239
 
246
240
  Dir.chdir(target_dir) do
247
- begin
248
- gz = Zlib::GzipWriter.new(File.open(package_file, 'wb')) # rubocop:disable PDK/FileOpen
249
- tar = Minitar::Output.new(gz)
250
- Find.find(release_name) do |entry|
251
- entry_meta = {
252
- name: entry,
253
- }
254
-
255
- orig_mode = PDK::Util::Filesystem.stat(entry).mode
256
- min_mode = Minitar.dir?(entry) ? 0o755 : 0o644
257
-
258
- entry_meta[:mode] = orig_mode | min_mode
259
-
260
- if entry_meta[:mode] != orig_mode
261
- PDK.logger.debug('Updated permissions of packaged \'%{entry}\' to %{new_mode}' % {
262
- entry: entry,
263
- new_mode: (entry_meta[:mode] & 0o7777).to_s(8),
264
- })
265
- end
266
-
267
- Minitar.pack_file(entry_meta, tar)
268
- end
269
- ensure
270
- tar.close
241
+ gz = Zlib::GzipWriter.new(File.open(package_file, 'wb')) # rubocop:disable PDK/FileOpen
242
+ tar = Minitar::Output.new(gz)
243
+ Find.find(release_name) do |entry|
244
+ entry_meta = {
245
+ name: entry
246
+ }
247
+
248
+ orig_mode = PDK::Util::Filesystem.stat(entry).mode
249
+ min_mode = Minitar.dir?(entry) ? 0o755 : 0o644
250
+
251
+ entry_meta[:mode] = orig_mode | min_mode
252
+
253
+ PDK.logger.debug(format('Updated permissions of packaged \'%{entry}\' to %{new_mode}', entry: entry, new_mode: (entry_meta[:mode] & 0o7777).to_s(8))) if entry_meta[:mode] != orig_mode
254
+
255
+ Minitar.pack_file(entry_meta, tar)
271
256
  end
257
+ ensure
258
+ tar.close
272
259
  end
273
260
  end
274
261
 
@@ -283,7 +270,7 @@ module PDK
283
270
  @ignore_file ||= [
284
271
  File.join(module_dir, '.pdkignore'),
285
272
  File.join(module_dir, '.pmtignore'),
286
- File.join(module_dir, '.gitignore'),
273
+ File.join(module_dir, '.gitignore')
287
274
  ].find { |file| PDK::Util::Filesystem.file?(file) && PDK::Util::Filesystem.readable?(file) }
288
275
  end
289
276
 
@@ -303,9 +290,7 @@ module PDK
303
290
  PathSpec.new(PDK::Util::Filesystem.read_file(ignore_file, open_args: 'rb:UTF-8'))
304
291
  end
305
292
 
306
- if File.realdirpath(target_dir).start_with?(File.realdirpath(module_dir))
307
- ignored = ignored.add("\/#{File.basename(target_dir)}\/")
308
- end
293
+ ignored = ignored.add("/#{File.basename(target_dir)}/") if File.realdirpath(target_dir).start_with?(File.realdirpath(module_dir))
309
294
 
310
295
  PDK::Module::DEFAULT_IGNORED.each { |r| ignored.add(r) }
311
296
 
@@ -7,9 +7,7 @@ module PDK
7
7
  new(module_dir, options).run
8
8
  end
9
9
 
10
- attr_reader :module_dir
11
-
12
- attr_reader :options
10
+ attr_reader :module_dir, :options
13
11
 
14
12
  def initialize(module_dir, options = {})
15
13
  @module_dir = module_dir
@@ -100,6 +98,7 @@ module PDK
100
98
 
101
99
  def test_generators(context = PDK.context)
102
100
  return @test_generators unless @test_generators.nil?
101
+
103
102
  require 'pdk/util/puppet_strings'
104
103
 
105
104
  test_gens = PDK::Util::PuppetStrings.all_objects.map do |generator, objects|
@@ -153,13 +152,11 @@ module PDK
153
152
  absolute_file_path = File.join(module_dir, relative_file_path)
154
153
  case file_status
155
154
  when :unmanage
156
- PDK.logger.debug("skipping '%{path}'" % { path: absolute_file_path })
155
+ PDK.logger.debug(format("skipping '%{path}'", path: absolute_file_path))
157
156
  when :delete
158
157
  update_manager.remove_file(absolute_file_path)
159
158
  when :init
160
- if convert? && !PDK::Util::Filesystem.exist?(absolute_file_path)
161
- update_manager.add_file(absolute_file_path, file_content)
162
- end
159
+ update_manager.add_file(absolute_file_path, file_content) if convert? && !PDK::Util::Filesystem.exist?(absolute_file_path)
163
160
  when :manage
164
161
  if PDK::Util::Filesystem.exist?(absolute_file_path)
165
162
  update_manager.modify_file(absolute_file_path, file_content)
@@ -191,11 +188,7 @@ module PDK
191
188
  require 'pdk/module/metadata'
192
189
 
193
190
  if PDK::Util::Filesystem.file?(metadata_path)
194
- unless PDK::Util::Filesystem.readable?(metadata_path)
195
- raise PDK::CLI::ExitWithError, 'Unable to update module metadata; %{path} exists but it is not readable.' % {
196
- path: metadata_path,
197
- }
198
- end
191
+ raise PDK::CLI::ExitWithError, format('Unable to update module metadata; %{path} exists but it is not readable.', path: metadata_path) unless PDK::Util::Filesystem.readable?(metadata_path)
199
192
 
200
193
  begin
201
194
  metadata = PDK::Module::Metadata.from_file(metadata_path)
@@ -208,9 +201,7 @@ module PDK
208
201
  metadata = PDK::Generate::Module.prepare_metadata(options) unless options[:noop]
209
202
  end
210
203
  elsif PDK::Util::Filesystem.exist?(metadata_path)
211
- raise PDK::CLI::ExitWithError, 'Unable to update module metadata; %{path} exists but it is not a file.' % {
212
- path: metadata_path,
213
- }
204
+ raise PDK::CLI::ExitWithError, format('Unable to update module metadata; %{path} exists but it is not a file.', path: metadata_path)
214
205
  else
215
206
  return if options[:noop]
216
207
 
@@ -250,23 +241,23 @@ module PDK
250
241
 
251
242
  footer = false
252
243
 
253
- summary.keys.each do |category|
244
+ summary.each_key do |category|
254
245
  next if summary[category].empty?
255
246
 
256
- PDK::Report.default_target.puts("\n%{banner}" % { banner: generate_banner("Files to be #{category}", 40) })
247
+ PDK::Report.default_target.puts(format("\n%{banner}", banner: generate_banner("Files to be #{category}", 40)))
257
248
  PDK::Report.default_target.puts(summary[category])
258
249
  footer = true
259
250
  end
260
251
 
261
- PDK::Report.default_target.puts("\n%{banner}" % { banner: generate_banner('', 40) }) if footer
252
+ PDK::Report.default_target.puts(format("\n%{banner}", banner: generate_banner('', 40))) if footer
262
253
  end
263
254
 
264
255
  def print_result(banner_text)
265
256
  require 'pdk/report'
266
257
 
267
- PDK::Report.default_target.puts("\n%{banner}" % { banner: generate_banner(banner_text, 40) })
268
- summary_to_print = summary.map { |k, v| "#{v.length} files #{k}" unless v.empty? }.compact
269
- PDK::Report.default_target.puts("\n%{summary}\n\n" % { summary: "#{summary_to_print.join(', ')}." })
258
+ PDK::Report.default_target.puts(format("\n%{banner}", banner: generate_banner(banner_text, 40)))
259
+ summary_to_print = summary.filter_map { |k, v| "#{v.length} files #{k}" unless v.empty? }
260
+ PDK::Report.default_target.puts(format("\n%{summary}\n\n", summary: "#{summary_to_print.join(', ')}."))
270
261
  end
271
262
 
272
263
  def full_report(path)
@@ -275,7 +266,7 @@ module PDK
275
266
  report = ["/* Report generated by PDK at #{Time.now} */"]
276
267
  report.concat(update_manager.changes[:modified].map { |_, diff| "\n\n\n#{diff}" })
277
268
  PDK::Util::Filesystem.write_file(path, report.join)
278
- PDK::Report.default_target.puts("\nYou can find a report of differences in %{path}.\n\n" % { path: path })
269
+ PDK::Report.default_target.puts(format("\nYou can find a report of differences in %{path}.\n\n", path: path))
279
270
  end
280
271
 
281
272
  def generate_banner(text, width = 80)
@@ -8,81 +8,79 @@ module PDK
8
8
  OPERATING_SYSTEMS = {
9
9
  'RedHat based Linux' => [
10
10
  {
11
- 'operatingsystem' => 'CentOS',
12
- 'operatingsystemrelease' => ['7'],
11
+ 'operatingsystem' => 'CentOS',
12
+ 'operatingsystemrelease' => ['7']
13
13
  },
14
14
  {
15
- 'operatingsystem' => 'OracleLinux',
16
- 'operatingsystemrelease' => ['7'],
15
+ 'operatingsystem' => 'OracleLinux',
16
+ 'operatingsystemrelease' => ['7']
17
17
  },
18
18
  {
19
- 'operatingsystem' => 'RedHat',
20
- 'operatingsystemrelease' => ['8'],
19
+ 'operatingsystem' => 'RedHat',
20
+ 'operatingsystemrelease' => ['8']
21
21
  },
22
22
  {
23
- 'operatingsystem' => 'Scientific',
24
- 'operatingsystemrelease' => ['7'],
25
- },
23
+ 'operatingsystem' => 'Scientific',
24
+ 'operatingsystemrelease' => ['7']
25
+ }
26
26
  ],
27
27
  'Debian based Linux' => [
28
28
  {
29
- 'operatingsystem' => 'Debian',
30
- 'operatingsystemrelease' => ['10'],
29
+ 'operatingsystem' => 'Debian',
30
+ 'operatingsystemrelease' => ['10']
31
31
  },
32
32
  {
33
- 'operatingsystem' => 'Ubuntu',
34
- 'operatingsystemrelease' => ['18.04'],
35
- },
33
+ 'operatingsystem' => 'Ubuntu',
34
+ 'operatingsystemrelease' => ['18.04']
35
+ }
36
36
  ],
37
37
  'Fedora' => {
38
- 'operatingsystem' => 'Fedora',
39
- 'operatingsystemrelease' => ['29'],
38
+ 'operatingsystem' => 'Fedora',
39
+ 'operatingsystemrelease' => ['29']
40
40
  },
41
41
  'OSX' => {
42
- 'operatingsystem' => 'Darwin',
43
- 'operatingsystemrelease' => ['16'],
42
+ 'operatingsystem' => 'Darwin',
43
+ 'operatingsystemrelease' => ['16']
44
44
  },
45
45
  'SLES' => {
46
- 'operatingsystem' => 'SLES',
47
- 'operatingsystemrelease' => ['15'],
46
+ 'operatingsystem' => 'SLES',
47
+ 'operatingsystemrelease' => ['15']
48
48
  },
49
49
  'Solaris' => {
50
- 'operatingsystem' => 'Solaris',
51
- 'operatingsystemrelease' => ['11'],
50
+ 'operatingsystem' => 'Solaris',
51
+ 'operatingsystemrelease' => ['11']
52
52
  },
53
53
  'Windows' => {
54
- 'operatingsystem' => 'windows',
55
- 'operatingsystemrelease' => %w[2019 10],
54
+ 'operatingsystem' => 'windows',
55
+ 'operatingsystemrelease' => ['2019', '10']
56
56
  },
57
57
  'AIX' => {
58
- 'operatingsystem' => 'AIX',
59
- 'operatingsystemrelease' => %w[6.1 7.1 7.2],
60
- },
58
+ 'operatingsystem' => 'AIX',
59
+ 'operatingsystemrelease' => ['6.1', '7.1', '7.2']
60
+ }
61
61
  }.freeze
62
62
 
63
63
  DEFAULT_OPERATING_SYSTEMS = [
64
64
  'RedHat based Linux',
65
65
  'Debian based Linux',
66
- 'Windows',
66
+ 'Windows'
67
67
  ].freeze
68
68
 
69
69
  DEFAULTS = {
70
- 'name' => nil,
71
- 'version' => '0.1.0',
72
- 'author' => nil,
73
- 'summary' => '',
74
- 'license' => 'Apache-2.0',
75
- 'source' => '',
76
- 'project_page' => nil,
77
- 'issues_url' => nil,
78
- 'dependencies' => [],
70
+ 'name' => nil,
71
+ 'version' => '0.1.0',
72
+ 'author' => nil,
73
+ 'summary' => '',
74
+ 'license' => 'Apache-2.0',
75
+ 'source' => '',
76
+ 'project_page' => nil,
77
+ 'issues_url' => nil,
78
+ 'dependencies' => [],
79
79
  'data_provider' => nil,
80
- 'operatingsystem_support' => DEFAULT_OPERATING_SYSTEMS.map { |os_name|
81
- OPERATING_SYSTEMS[os_name]
82
- }.flatten,
80
+ 'operatingsystem_support' => DEFAULT_OPERATING_SYSTEMS.dup,
83
81
  'requirements' => [
84
- { 'name' => 'puppet', 'version_requirement' => '>= 6.21.0 < 8.0.0' },
85
- ],
82
+ { 'name' => 'puppet', 'version_requirement' => '>= 7.24 < 9.0.0' }
83
+ ]
86
84
  }.freeze
87
85
 
88
86
  def initialize(params = {})
@@ -91,23 +89,17 @@ module PDK
91
89
  end
92
90
 
93
91
  def self.from_file(metadata_json_path)
94
- if metadata_json_path.nil?
95
- raise ArgumentError, 'Cannot read metadata from file: no path to file was given.'
96
- end
92
+ raise ArgumentError, 'Cannot read metadata from file: no path to file was given.' if metadata_json_path.nil?
97
93
 
98
- unless PDK::Util::Filesystem.file?(metadata_json_path)
99
- raise ArgumentError, "'%{file}' does not exist or is not a file." % { file: metadata_json_path }
100
- end
94
+ raise ArgumentError, format("'%{file}' does not exist or is not a file.", file: metadata_json_path) unless PDK::Util::Filesystem.file?(metadata_json_path)
101
95
 
102
- unless PDK::Util::Filesystem.readable?(metadata_json_path)
103
- raise ArgumentError, "Unable to open '%{file}' for reading." % { file: metadata_json_path }
104
- end
96
+ raise ArgumentError, format("Unable to open '%{file}' for reading.", file: metadata_json_path) unless PDK::Util::Filesystem.readable?(metadata_json_path)
105
97
 
106
98
  require 'json'
107
99
  begin
108
100
  data = JSON.parse(PDK::Util::Filesystem.read_file(metadata_json_path))
109
101
  rescue JSON::JSONError => e
110
- raise ArgumentError, 'Invalid JSON in metadata.json: %{msg}' % { msg: e.message }
102
+ raise ArgumentError, format('Invalid JSON in metadata.json: %{msg}', msg: e.message)
111
103
  end
112
104
 
113
105
  require 'pdk/util'
@@ -122,10 +114,10 @@ module PDK
122
114
  self
123
115
  end
124
116
 
125
- def to_json
117
+ def to_json(*_args)
126
118
  require 'json'
127
119
 
128
- JSON.pretty_generate(@data.dup.delete_if { |_key, value| value.nil? })
120
+ JSON.pretty_generate(@data.dup.delete_if { |_key, value| value.nil? }) # rubocop:disable Style/CollectionCompact
129
121
  end
130
122
 
131
123
  def write!(path)
@@ -144,9 +136,9 @@ module PDK
144
136
 
145
137
  def validate_puppet_version_requirement!
146
138
  msgs = {
147
- no_reqs: 'Module metadata does not contain any requirements.',
139
+ no_reqs: 'Module metadata does not contain any requirements.',
148
140
  no_puppet_req: 'Module metadata does not contain a "puppet" requirement.',
149
- no_puppet_ver: 'The "puppet" requirement in module metadata does not specify a "version_requirement".',
141
+ no_puppet_ver: 'The "puppet" requirement in module metadata does not specify a "version_requirement".'
150
142
  }
151
143
 
152
144
  raise ArgumentError, msgs[:no_reqs] unless @data.key?('requirements')
@@ -162,7 +154,7 @@ module PDK
162
154
  end
163
155
 
164
156
  def missing_fields
165
- fields = DEFAULTS.keys - %w[data_provider requirements dependencies]
157
+ fields = DEFAULTS.keys - ['data_provider', 'requirements', 'dependencies']
166
158
  fields.select { |key| @data[key].nil? || @data[key].empty? }
167
159
  end
168
160
 
@@ -179,7 +171,7 @@ module PDK
179
171
 
180
172
  # Validates that the given module name is both namespaced and well-formed.
181
173
  def validate_name(name)
182
- return if name =~ %r{\A[a-z0-9]+[-\/][a-z][a-z0-9_]*\Z}i
174
+ return if %r{\A[a-z0-9]+[-/][a-z][a-z0-9_]*\Z}i.match?(name)
183
175
 
184
176
  namespace, modname = name.split(%r{[-/]}, 2)
185
177
  modname = :namespace_missing if namespace == ''
@@ -187,15 +179,15 @@ module PDK
187
179
  err = case modname
188
180
  when nil, '', :namespace_missing
189
181
  'Field must be a dash-separated user name and module name.'
190
- when %r{[^a-z0-9_]}i
182
+ when /[^a-z0-9_]/i
191
183
  'Module name must contain only alphanumeric or underscore characters.'
192
- when %r{^[^a-z]}i
184
+ when /^[^a-z]/i
193
185
  'Module name must begin with a letter.'
194
186
  else
195
187
  'Namespace must contain only alphanumeric characters.'
196
188
  end
197
189
 
198
- raise ArgumentError, "Invalid 'name' field in metadata.json: %{err}" % { err: err }
190
+ raise ArgumentError, format("Invalid 'name' field in metadata.json: %{err}", err: err)
199
191
  end
200
192
  end
201
193
  end
@@ -8,9 +8,7 @@ module PDK
8
8
  new(module_path, options).run
9
9
  end
10
10
 
11
- attr_reader :options
12
-
13
- attr_reader :module_path
11
+ attr_reader :options, :module_path
14
12
 
15
13
  def initialize(module_path, options = {})
16
14
  @options = options
@@ -21,9 +19,10 @@ module PDK
21
19
 
22
20
  if module_path.nil?
23
21
  module_path = PDK::Util.module_root
24
- raise PDK::CLI::ExitWithError, 'The module release process requires a valid module path' % { module_path: module_path } if module_path.nil?
22
+ raise PDK::CLI::ExitWithError, 'The module release process requires a valid module path' if module_path.nil?
25
23
  end
26
- raise PDK::CLI::ExitWithError, '%{module_path} is not a valid module' % { module_path: module_path } unless PDK::Util.in_module_root?(module_path)
24
+ raise PDK::CLI::ExitWithError, format('%{module_path} is not a valid module', module_path: module_path) unless PDK::Util.in_module_root?(module_path)
25
+
27
26
  @module_path = module_path
28
27
  end
29
28
 
@@ -41,24 +40,17 @@ module PDK
41
40
 
42
41
  run_validations(options) unless skip_validation?
43
42
 
44
- PDK.logger.info 'Releasing %{module_name} - from version %{module_version}' % {
45
- module_name: module_metadata.data['name'],
46
- module_version: module_metadata.data['version'],
47
- }
43
+ PDK.logger.info format('Releasing %{module_name} - from version %{module_version}', module_name: module_metadata.data['name'], module_version: module_metadata.data['version'])
48
44
 
49
45
  PDK::Util::ChangelogGenerator.generate_changelog unless skip_changelog?
50
46
 
51
47
  # Calculate the new module version
52
48
  new_version = specified_version
53
- if new_version.nil? && !skip_changelog?
54
- new_version = PDK::Util::ChangelogGenerator.compute_next_version(module_metadata.data['version'])
55
- end
49
+ new_version = PDK::Util::ChangelogGenerator.compute_next_version(module_metadata.data['version']) if new_version.nil? && !skip_changelog?
56
50
  new_version = module_metadata.data['version'] if new_version.nil?
57
51
 
58
52
  if new_version != module_metadata.data['version']
59
- PDK.logger.info 'Updating version to %{module_version}' % {
60
- module_version: new_version,
61
- }
53
+ PDK.logger.info format('Updating version to %{module_version}', module_version: new_version)
62
54
 
63
55
  # Set the new version in metadata file
64
56
  module_metadata.data['version'] = new_version
@@ -69,8 +61,8 @@ module PDK
69
61
 
70
62
  # Check if the versions match
71
63
  latest_version = PDK::Util::ChangelogGenerator.latest_version
72
- unless latest_version
73
- raise PDK::CLI::ExitWithError, '%{new_version} does not match %{latest_version}' % { new_version: new_version, latest_version: latest_version } if new_version != latest_version
64
+ if !latest_version && (new_version != latest_version)
65
+ raise PDK::CLI::ExitWithError, format('%{new_version} does not match %{latest_version}', new_version: new_version, latest_version: latest_version)
74
66
  end
75
67
  end
76
68
 
@@ -102,6 +94,7 @@ module PDK
102
94
 
103
95
  def default_package_filename
104
96
  return @default_tarball_filename unless @default_tarball_filename.nil?
97
+
105
98
  builder = PDK::Module::Build.new(module_dir: module_path)
106
99
  @default_tarball_filename = builder.package_file
107
100
  end
@@ -127,7 +120,7 @@ module PDK
127
120
  docs_command = PDK::CLI::Exec::InteractiveCommand.new(PDK::CLI::Exec.bundle_bin, 'exec', 'puppet', 'strings', 'generate', '--format', 'markdown', '--out', 'REFERENCE.md')
128
121
  docs_command.context = :module
129
122
  result = docs_command.execute!
130
- raise PDK::CLI::ExitWithError, 'An error occured generating the module documentation: %{stdout}' % { stdout: result[:stdout] } unless result[:exit_code].zero?
123
+ raise PDK::CLI::ExitWithError, format('An error occured generating the module documentation: %{stdout}', stdout: result[:stdout]) unless result[:exit_code].zero?
131
124
  end
132
125
 
133
126
  def run_dependency_checker(_opts)
@@ -138,7 +131,7 @@ module PDK
138
131
  dep_command.context = :module
139
132
  result = dep_command.execute!
140
133
 
141
- raise PDK::CLI::ExitWithError, 'An error occured checking the module dependencies: %{stdout}' % { stdout: result[:stdout] } unless result[:exit_code].zero?
134
+ raise PDK::CLI::ExitWithError, format('An error occured checking the module dependencies: %{stdout}', stdout: result[:stdout]) unless result[:exit_code].zero?
142
135
  end
143
136
 
144
137
  # @return [String] Path to the built tarball
@@ -148,7 +141,7 @@ module PDK
148
141
 
149
142
  def run_publish(_opts, tarball_path)
150
143
  validate_publish_options!
151
- raise PDK::CLI::ExitWithError, 'Module tarball %{tarball_path} does not exist' % { tarball_path: tarball_path } unless PDK::Util::Filesystem.file?(tarball_path)
144
+ raise PDK::CLI::ExitWithError, format('Module tarball %{tarball_path} does not exist', tarball_path: tarball_path) unless PDK::Util::Filesystem.file?(tarball_path)
152
145
 
153
146
  # TODO: Replace this code when the upload functionality is added to the forge ruby gem
154
147
  require 'base64'
@@ -158,19 +151,20 @@ module PDK
158
151
  uri = URI(forge_upload_url)
159
152
  require 'net/http'
160
153
  request = Net::HTTP::Post.new(uri.path)
161
- request['Authorization'] = 'Bearer ' + forge_token
154
+ request['Authorization'] = "Bearer #{forge_token}"
162
155
  request['Content-Type'] = 'application/json'
163
156
  data = { file: file_data }
164
157
 
165
158
  request.body = data.to_json
166
159
 
167
160
  require 'openssl'
168
- use_ssl = uri.class == URI::HTTPS
161
+ use_ssl = uri.instance_of?(URI::HTTPS)
169
162
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
170
163
  http.request(request)
171
164
  end
172
165
 
173
- raise PDK::CLI::ExitWithError, 'Error uploading to Puppet Forge: %{result}' % { result: response.body } unless response.is_a?(Net::HTTPSuccess)
166
+ raise PDK::CLI::ExitWithError, format('Error uploading to Puppet Forge: %{result}', result: response.body) unless response.is_a?(Net::HTTPSuccess)
167
+
174
168
  PDK.logger.info 'Publish to Forge was successful'
175
169
  end
176
170
 
@@ -235,7 +229,7 @@ module PDK
235
229
  !skip_publish?
236
230
  end
237
231
 
238
- #:nocov:
232
+ # :nocov:
239
233
  # These are just convenience methods and are tested elsewhere
240
234
  def forge_compatible?
241
235
  module_metadata.forge_ready?
@@ -247,7 +241,7 @@ module PDK
247
241
  builder = PDK::Module::Build.new(module_dir: module_path)
248
242
  @pdk_compatible = builder.module_pdk_compatible?
249
243
  end
250
- #:nocov:
244
+ # :nocov:
251
245
 
252
246
  private
253
247
 
@@ -3,18 +3,14 @@ require 'pdk'
3
3
  module PDK
4
4
  module Module
5
5
  class Update < Convert
6
- GIT_DESCRIBE_PATTERN = %r{\A(?<base>.+?)-(?<additional_commits>\d+)-g(?<sha>.+)\Z}
6
+ GIT_DESCRIBE_PATTERN = /\A(?<base>.+?)-(?<additional_commits>\d+)-g(?<sha>.+)\Z/.freeze
7
7
 
8
8
  def run
9
9
  template_uri.uri_fragment = new_template_version
10
10
 
11
11
  stage_changes!
12
12
 
13
- if current_version == new_version
14
- PDK.logger.debug 'This module is already up to date with version %{version} of the template.' % {
15
- version: new_version,
16
- }
17
- end
13
+ PDK.logger.debug format('This module is already up to date with version %{version} of the template.', version: new_version) if current_version == new_version
18
14
 
19
15
  unless update_manager.changes?
20
16
  PDK::Report.default_target.puts('No changes required.')
@@ -97,7 +93,7 @@ module PDK
97
93
 
98
94
  return data if data.nil?
99
95
 
100
- if data[:base] =~ %r{^(?:heads|remotes)/}
96
+ if %r{^(?:heads|remotes)/}.match?(data[:base])
101
97
  "#{data[:base].gsub(%r{^(heads/|remotes/\w+?/)}, '')}@#{data[:sha]}"
102
98
  else
103
99
  data[:base]
@@ -119,12 +115,7 @@ module PDK
119
115
  'Updating %{module_name} using the template at %{template_url}, from %{current_version} to %{new_version}'
120
116
  end
121
117
 
122
- format_string % {
123
- module_name: module_metadata.data['name'],
124
- template_url: template_uri.bare_uri,
125
- current_version: current_version,
126
- new_version: new_version,
127
- }
118
+ format(format_string, module_name: module_metadata.data['name'], template_url: template_uri.bare_uri, current_version: current_version, new_version: new_version)
128
119
  end
129
120
  end
130
121
  end