pdk 1.13.0 → 1.14.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 (82) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +41 -0
  4. data/lib/pdk.rb +0 -13
  5. data/lib/pdk/analytics.rb +18 -2
  6. data/lib/pdk/analytics/client/google_analytics.rb +3 -0
  7. data/lib/pdk/answer_file.rb +4 -1
  8. data/lib/pdk/cli.rb +7 -2
  9. data/lib/pdk/cli/build.rb +2 -2
  10. data/lib/pdk/cli/bundle.rb +7 -1
  11. data/lib/pdk/cli/console.rb +148 -0
  12. data/lib/pdk/cli/convert.rb +2 -2
  13. data/lib/pdk/cli/exec.rb +14 -14
  14. data/lib/pdk/cli/exec/command.rb +16 -11
  15. data/lib/pdk/cli/exec/interactive_command.rb +4 -0
  16. data/lib/pdk/cli/exec_group.rb +5 -5
  17. data/lib/pdk/cli/module/build.rb +0 -2
  18. data/lib/pdk/cli/module/generate.rb +1 -2
  19. data/lib/pdk/cli/new.rb +1 -1
  20. data/lib/pdk/cli/new/defined_type.rb +2 -0
  21. data/lib/pdk/cli/new/provider.rb +2 -0
  22. data/lib/pdk/cli/new/task.rb +2 -0
  23. data/lib/pdk/cli/new/{unit_test.rb → test.rb} +16 -12
  24. data/lib/pdk/cli/new/transport.rb +2 -0
  25. data/lib/pdk/cli/test/unit.rb +5 -3
  26. data/lib/pdk/cli/update.rb +2 -3
  27. data/lib/pdk/cli/util.rb +45 -14
  28. data/lib/pdk/cli/util/spinner.rb +2 -2
  29. data/lib/pdk/cli/validate.rb +6 -2
  30. data/lib/pdk/config.rb +20 -8
  31. data/lib/pdk/config/analytics_schema.json +26 -0
  32. data/lib/pdk/config/json.rb +14 -3
  33. data/lib/pdk/config/json_schema_namespace.rb +143 -0
  34. data/lib/pdk/config/json_schema_setting.rb +53 -0
  35. data/lib/pdk/config/json_with_schema.rb +50 -0
  36. data/lib/pdk/config/namespace.rb +84 -76
  37. data/lib/pdk/config/setting.rb +132 -0
  38. data/lib/pdk/config/yaml.rb +15 -3
  39. data/lib/pdk/config/yaml_with_schema.rb +59 -0
  40. data/lib/pdk/generate.rb +0 -2
  41. data/lib/pdk/generate/module.rb +29 -16
  42. data/lib/pdk/generate/puppet_object.rb +31 -28
  43. data/lib/pdk/module.rb +2 -2
  44. data/lib/pdk/module/build.rb +21 -8
  45. data/lib/pdk/module/convert.rb +64 -7
  46. data/lib/pdk/module/metadata.rb +5 -1
  47. data/lib/pdk/module/templatedir.rb +24 -7
  48. data/lib/pdk/module/update.rb +5 -1
  49. data/lib/pdk/module/update_manager.rb +21 -13
  50. data/lib/pdk/report.rb +4 -3
  51. data/lib/pdk/report/event.rb +5 -3
  52. data/lib/pdk/tests/unit.rb +36 -7
  53. data/lib/pdk/util.rb +20 -8
  54. data/lib/pdk/util/bundler.rb +14 -6
  55. data/lib/pdk/util/filesystem.rb +5 -0
  56. data/lib/pdk/util/git.rb +6 -0
  57. data/lib/pdk/util/puppet_strings.rb +24 -2
  58. data/lib/pdk/util/puppet_version.rb +25 -10
  59. data/lib/pdk/util/ruby_version.rb +13 -1
  60. data/lib/pdk/util/template_uri.rb +23 -2
  61. data/lib/pdk/util/vendored_file.rb +28 -24
  62. data/lib/pdk/util/version.rb +5 -5
  63. data/lib/pdk/validate/base_validator.rb +5 -4
  64. data/lib/pdk/validate/metadata/metadata_json_lint.rb +0 -4
  65. data/lib/pdk/validate/metadata/metadata_syntax.rb +5 -3
  66. data/lib/pdk/validate/metadata_validator.rb +0 -2
  67. data/lib/pdk/validate/puppet/puppet_epp.rb +4 -4
  68. data/lib/pdk/validate/puppet/puppet_lint.rb +0 -3
  69. data/lib/pdk/validate/puppet/puppet_syntax.rb +4 -4
  70. data/lib/pdk/validate/puppet_validator.rb +0 -2
  71. data/lib/pdk/validate/ruby/rubocop.rb +0 -5
  72. data/lib/pdk/validate/ruby_validator.rb +0 -2
  73. data/lib/pdk/validate/tasks/metadata_lint.rb +9 -5
  74. data/lib/pdk/validate/tasks/name.rb +4 -2
  75. data/lib/pdk/validate/tasks_validator.rb +0 -2
  76. data/lib/pdk/validate/yaml/syntax.rb +4 -4
  77. data/lib/pdk/validate/yaml_validator.rb +0 -2
  78. data/lib/pdk/version.rb +1 -1
  79. data/locales/pdk.pot +351 -311
  80. metadata +11 -7
  81. data/lib/pdk/config/validator.rb +0 -31
  82. data/lib/pdk/config/value.rb +0 -94
@@ -1,5 +1,3 @@
1
- require 'pdk/util'
2
-
3
1
  module PDK
4
2
  module Util
5
3
  class TemplateURI
@@ -34,6 +32,8 @@ module PDK
34
32
  # /c:/foo#master (internal use only)
35
33
  #
36
34
  def initialize(opts_or_uri)
35
+ require 'addressable'
36
+
37
37
  # If a uri string is passed, skip the valid uri finding code.
38
38
  @uri = if opts_or_uri.is_a?(self.class)
39
39
  opts_or_uri.uri
@@ -81,6 +81,8 @@ module PDK
81
81
  end
82
82
 
83
83
  def self.git_remote(uri)
84
+ require 'addressable'
85
+
84
86
  if uri.is_a?(Addressable::URI) && uri.fragment
85
87
  human_readable(uri.to_s.chomp('#' + uri.fragment))
86
88
  else
@@ -105,6 +107,9 @@ module PDK
105
107
 
106
108
  # @returns PDK::Util::TemplateURI
107
109
  def self.default_template_uri(ref = nil)
110
+ require 'pdk/util'
111
+ require 'addressable'
112
+
108
113
  if PDK::Util.package_install?
109
114
  PDK::Util::TemplateURI.new(Addressable::URI.new(scheme: 'file', host: '', path: File.join(PDK::Util.package_cachedir, 'pdk-templates.git'), fragment: ref))
110
115
  else
@@ -117,6 +122,8 @@ module PDK
117
122
  end
118
123
 
119
124
  def ref_is_tag?
125
+ require 'pdk/util/git'
126
+
120
127
  PDK::Util::Git.git('ls-remote', '--tags', '--exit-code', git_remote, git_ref)[:exit_code].zero?
121
128
  end
122
129
 
@@ -140,6 +147,9 @@ module PDK
140
147
  end
141
148
 
142
149
  def self.parse_scp_url(url)
150
+ require 'pathname'
151
+ require 'addressable'
152
+
143
153
  # Valid URIs to avoid catching:
144
154
  # - absolute local paths
145
155
  # - have :'s in paths when preceeded by a slash
@@ -168,6 +178,10 @@ module PDK
168
178
  # the template file is not in this template directory.
169
179
  #
170
180
  def self.templates(opts)
181
+ require 'pdk/answer_file'
182
+ require 'pdk/util'
183
+ require 'addressable'
184
+
171
185
  explicit_url = opts.fetch(:'template-url', nil)
172
186
  explicit_ref = opts.fetch(:'template-ref', nil)
173
187
 
@@ -208,6 +222,9 @@ module PDK
208
222
 
209
223
  # @returns String
210
224
  def self.default_template_ref(uri = nil)
225
+ require 'pdk/util'
226
+ require 'pdk/version'
227
+
211
228
  return 'master' if PDK::Util.development_mode?
212
229
  return PDK::TEMPLATE_REF if uri.nil?
213
230
 
@@ -228,6 +245,10 @@ module PDK
228
245
  end
229
246
 
230
247
  def self.valid_template?(template)
248
+ require 'addressable'
249
+ require 'pdk/util/git'
250
+ require 'pdk/module/templatedir'
251
+
231
252
  return false if template.nil? || !template.is_a?(Hash)
232
253
  return false if template[:uri].nil? || !template[:uri].is_a?(Addressable::URI)
233
254
 
@@ -1,51 +1,50 @@
1
- require 'pdk/util'
2
- require 'net/https'
3
- require 'openssl'
4
- require 'fileutils'
5
- require 'pdk/util/filesystem'
6
-
7
1
  module PDK
8
2
  module Util
9
3
  class VendoredFile
10
4
  class DownloadError < StandardError; end
11
5
 
12
- HTTP_ERRORS = [
13
- EOFError,
14
- Errno::ECONNRESET,
15
- Errno::EINVAL,
16
- Errno::ECONNREFUSED,
17
- Net::HTTPBadResponse,
18
- Net::HTTPHeaderSyntaxError,
19
- Net::ProtocolError,
20
- Timeout::Error,
21
- ].freeze
22
-
23
6
  attr_reader :file_name
24
7
  attr_reader :url
25
8
 
26
- include PDK::Util::Filesystem
27
-
28
9
  def initialize(file_name, url)
29
10
  @file_name = file_name
30
11
  @url = url
31
12
  end
32
13
 
33
14
  def read
34
- return File.read(package_vendored_path) if PDK::Util.package_install?
35
- return File.read(gem_vendored_path) if File.file?(gem_vendored_path)
15
+ require 'pdk/util'
16
+ require 'pdk/util/filesystem'
17
+
18
+ return PDK::Util::Filesystem.read_file(package_vendored_path) if PDK::Util.package_install?
19
+ return PDK::Util::Filesystem.read_file(gem_vendored_path) if PDK::Util::Filesystem.file?(gem_vendored_path)
36
20
 
37
21
  content = download_file
38
22
 
39
23
  # TODO: should only write if it's valid JSON
40
24
  # TODO: need a way to invalidate if out of date
41
- FileUtils.mkdir_p(File.dirname(gem_vendored_path))
42
- write_file(gem_vendored_path, content)
25
+ PDK::Util::Filesystem.mkdir_p(File.dirname(gem_vendored_path))
26
+ PDK::Util::Filesystem.write_file(gem_vendored_path, content)
43
27
  content
44
28
  end
45
29
 
46
30
  private
47
31
 
48
32
  def download_file
33
+ require 'uri'
34
+ require 'net/https'
35
+ require 'openssl'
36
+
37
+ http_errors = [
38
+ EOFError,
39
+ Errno::ECONNRESET,
40
+ Errno::EINVAL,
41
+ Errno::ECONNREFUSED,
42
+ Net::HTTPBadResponse,
43
+ Net::HTTPHeaderSyntaxError,
44
+ Net::ProtocolError,
45
+ Timeout::Error,
46
+ ]
47
+
49
48
  PDK.logger.debug _('%{file_name} was not found in the cache, downloading it from %{url}.') % {
50
49
  file_name: file_name,
51
50
  url: url,
@@ -69,7 +68,7 @@ module PDK
69
68
  end
70
69
 
71
70
  response.body
72
- rescue *HTTP_ERRORS => e
71
+ rescue *http_errors => e
73
72
  raise DownloadError, _('Unable to download %{url}. Check internet connectivity and try again. %{error}') % {
74
73
  url: url,
75
74
  error: e,
@@ -77,10 +76,15 @@ module PDK
77
76
  end
78
77
 
79
78
  def package_vendored_path
79
+ require 'pdk/util'
80
+
80
81
  @package_vendored_path ||= File.join(PDK::Util.package_cachedir, file_name)
81
82
  end
82
83
 
83
84
  def gem_vendored_path
85
+ require 'pdk/util'
86
+ require 'pdk/version'
87
+
84
88
  @gem_vendored_path ||= File.join(PDK::Util.cachedir, PDK::VERSION, file_name)
85
89
  end
86
90
  end
@@ -1,12 +1,9 @@
1
- require 'pdk/version'
2
- require 'pdk/cli/exec'
3
- require 'pdk/util/git'
4
- require 'pdk/logger'
5
-
6
1
  module PDK
7
2
  module Util
8
3
  module Version
9
4
  def self.version_string
5
+ require 'pdk/version'
6
+
10
7
  "#{PDK::VERSION} #{pdk_ref}".strip.freeze
11
8
  end
12
9
 
@@ -25,6 +22,7 @@ module PDK
25
22
  end
26
23
 
27
24
  def self.git_ref
25
+ require 'pdk/util/git'
28
26
  source_git_dir = File.join(File.expand_path('../../..', File.dirname(__FILE__)), '.git')
29
27
 
30
28
  return unless File.directory?(source_git_dir)
@@ -33,6 +31,8 @@ module PDK
33
31
  end
34
32
 
35
33
  def self.version_file
34
+ require 'pdk/util'
35
+
36
36
  # FIXME: this gets called a LOT and doesn't currently get cached
37
37
  PDK::Util.find_upwards('PDK_VERSION', File.dirname(__FILE__))
38
38
  end
@@ -1,7 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
- require 'pdk/module'
4
-
5
1
  module PDK
6
2
  module Validate
7
3
  class BaseValidator
@@ -82,6 +78,8 @@ module PDK
82
78
  end
83
79
 
84
80
  def self.ignore_pathspec
81
+ require 'pdk/module'
82
+
85
83
  ignore_pathspec = PDK::Module.default_ignored_pathspec(ignore_dotfiles?)
86
84
 
87
85
  if respond_to?(:pattern_ignore)
@@ -136,6 +134,8 @@ module PDK
136
134
  end
137
135
 
138
136
  def self.invoke(report, options = {})
137
+ require 'pdk/cli/exec/command'
138
+
139
139
  targets, skipped, invalid = parse_targets(options)
140
140
 
141
141
  process_skipped(report, skipped)
@@ -154,6 +154,7 @@ module PDK
154
154
  if self::INVOKE_STYLE == :per_target
155
155
  targets = targets.combination(1).to_a
156
156
  else
157
+ require 'pdk/cli/exec_group'
157
158
  targets = targets.each_slice(1000).to_a
158
159
  options[:split_exec] = PDK::CLI::ExecGroup.new(spinner_text(targets), parallel: false)
159
160
  end
@@ -1,8 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
- require 'pdk/util/bundler'
5
- require 'pathname'
6
2
 
7
3
  module PDK
8
4
  module Validate
@@ -1,7 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
- require 'pathname'
5
2
 
6
3
  module PDK
7
4
  module Validate
@@ -21,13 +18,18 @@ module PDK
21
18
  end
22
19
 
23
20
  def self.create_spinner(targets = [], options = {})
21
+ require 'pdk/cli/util'
22
+
24
23
  return unless PDK::CLI::Util.interactive?
24
+
25
25
  options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
26
26
 
27
27
  exec_group = options[:exec_group]
28
28
  @spinner = if exec_group
29
29
  exec_group.add_spinner(spinner_text(targets), options)
30
30
  else
31
+ require 'pdk/cli/util/spinner'
32
+
31
33
  TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
32
34
  end
33
35
  @spinner.auto_spin
@@ -1,5 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
2
  require 'pdk/validate/metadata/metadata_json_lint'
5
3
  require 'pdk/validate/metadata/metadata_syntax'
@@ -1,8 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
- require 'fileutils'
5
- require 'tmpdir'
6
2
 
7
3
  module PDK
8
4
  module Validate
@@ -63,6 +59,8 @@ module PDK
63
59
  end
64
60
 
65
61
  def self.validate_tmpdir
62
+ require 'tmpdir'
63
+
66
64
  @validate_tmpdir ||= Dir.mktmpdir('puppet-epp-validate')
67
65
  end
68
66
 
@@ -70,6 +68,8 @@ module PDK
70
68
  return unless @validate_tmpdir
71
69
  return unless File.directory?(@validate_tmpdir)
72
70
 
71
+ require 'fileutils'
72
+
73
73
  FileUtils.remove_entry_secure(@validate_tmpdir)
74
74
  @validate_tmpdir = nil
75
75
  end
@@ -1,6 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/util'
3
- require 'pdk/cli/exec'
4
1
  require 'pdk/validate/base_validator'
5
2
 
6
3
  module PDK
@@ -1,8 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
- require 'fileutils'
5
- require 'tmpdir'
6
2
 
7
3
  module PDK
8
4
  module Validate
@@ -63,6 +59,8 @@ module PDK
63
59
  end
64
60
 
65
61
  def self.validate_tmpdir
62
+ require 'tmpdir'
63
+
66
64
  @validate_tmpdir ||= Dir.mktmpdir('puppet-parser-validate')
67
65
  end
68
66
 
@@ -70,6 +68,8 @@ module PDK
70
68
  return unless @validate_tmpdir
71
69
  return unless File.directory?(@validate_tmpdir)
72
70
 
71
+ require 'fileutils'
72
+
73
73
  FileUtils.remove_entry_secure(@validate_tmpdir)
74
74
  @validate_tmpdir = nil
75
75
  end
@@ -1,5 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
2
  require 'pdk/validate/puppet/puppet_lint'
5
3
  require 'pdk/validate/puppet/puppet_syntax'
@@ -1,9 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
- require 'pdk/util'
4
- require 'pdk/util/bundler'
5
1
  require 'pdk/validate/base_validator'
6
- require 'pdk/validate/ruby_validator'
7
2
 
8
3
  module PDK
9
4
  module Validate
@@ -1,5 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
2
  require 'pdk/validate/ruby/rubocop'
5
3
 
@@ -1,9 +1,4 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
- require 'pdk/util'
5
- require 'pathname'
6
- require 'json-schema'
7
2
 
8
3
  module PDK
9
4
  module Validate
@@ -26,13 +21,18 @@ module PDK
26
21
  end
27
22
 
28
23
  def self.create_spinner(targets = [], options = {})
24
+ require 'pdk/cli/util'
25
+
29
26
  return unless PDK::CLI::Util.interactive?
27
+
30
28
  options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
31
29
 
32
30
  exec_group = options[:exec_group]
33
31
  @spinner = if exec_group
34
32
  exec_group.add_spinner(spinner_text(targets), options)
35
33
  else
34
+ require 'pdk/cli/util/spinner'
35
+
36
36
  TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
37
37
  end
38
38
  @spinner.auto_spin
@@ -47,6 +47,8 @@ module PDK
47
47
  end
48
48
 
49
49
  def self.schema_file
50
+ require 'pdk/util/vendored_file'
51
+
50
52
  schema = PDK::Util::VendoredFile.new('task.json', FORGE_SCHEMA_URL).read
51
53
 
52
54
  JSON.parse(schema)
@@ -67,6 +69,8 @@ module PDK
67
69
  return_val = 0
68
70
  create_spinner(targets, options)
69
71
 
72
+ require 'json-schema'
73
+
70
74
  targets.each do |target|
71
75
  unless File.readable?(target)
72
76
  report.add_event(
@@ -1,6 +1,4 @@
1
- require 'pdk'
2
1
  require 'pdk/validate/base_validator'
3
- require 'pdk/util'
4
2
 
5
3
  module PDK
6
4
  module Validate
@@ -26,6 +24,8 @@ module PDK
26
24
  end
27
25
 
28
26
  def self.create_spinner(targets = [], options = {})
27
+ require 'pdk/cli/util'
28
+
29
29
  return unless PDK::CLI::Util.interactive?
30
30
  options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
31
31
 
@@ -33,6 +33,8 @@ module PDK
33
33
  @spinner = if exec_group
34
34
  exec_group.add_spinner(spinner_text(targets), options)
35
35
  else
36
+ require 'pdk/cli/util/spinner'
37
+
36
38
  TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
37
39
  end
38
40
  @spinner.auto_spin
@@ -1,5 +1,3 @@
1
- require 'pdk'
2
- require 'pdk/cli/exec'
3
1
  require 'pdk/validate/base_validator'
4
2
  require 'pdk/validate/tasks/metadata_lint'
5
3
  require 'pdk/validate/tasks/name'