pdk 1.13.0 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
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'