pdk 1.16.0 → 1.17.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/lib/pdk.rb +25 -18
- data/lib/pdk/answer_file.rb +2 -93
- data/lib/pdk/cli.rb +1 -5
- data/lib/pdk/cli/config.rb +3 -1
- data/lib/pdk/cli/config/get.rb +3 -1
- data/lib/pdk/cli/convert.rb +1 -1
- data/lib/pdk/cli/exec/command.rb +13 -0
- data/lib/pdk/cli/exec_group.rb +78 -43
- data/lib/pdk/cli/get.rb +20 -0
- data/lib/pdk/cli/get/config.rb +24 -0
- data/lib/pdk/cli/util.rb +6 -3
- data/lib/pdk/cli/validate.rb +26 -44
- data/lib/pdk/config.rb +178 -4
- data/lib/pdk/config/ini_file.rb +183 -0
- data/lib/pdk/config/ini_file_setting.rb +39 -0
- data/lib/pdk/config/namespace.rb +25 -5
- data/lib/pdk/config/setting.rb +3 -2
- data/lib/pdk/context.rb +96 -0
- data/lib/pdk/context/control_repo.rb +60 -0
- data/lib/pdk/context/module.rb +28 -0
- data/lib/pdk/context/none.rb +22 -0
- data/lib/pdk/control_repo.rb +40 -0
- data/lib/pdk/generate/module.rb +8 -12
- data/lib/pdk/module/release.rb +2 -8
- data/lib/pdk/util.rb +35 -5
- data/lib/pdk/util/bundler.rb +1 -0
- data/lib/pdk/util/changelog_generator.rb +6 -1
- data/lib/pdk/util/template_uri.rb +4 -3
- data/lib/pdk/validate.rb +72 -25
- data/lib/pdk/validate/external_command_validator.rb +208 -0
- data/lib/pdk/validate/internal_ruby_validator.rb +100 -0
- data/lib/pdk/validate/invokable_validator.rb +216 -0
- data/lib/pdk/validate/metadata/metadata_json_lint_validator.rb +86 -0
- data/lib/pdk/validate/metadata/metadata_syntax_validator.rb +78 -0
- data/lib/pdk/validate/metadata/metadata_validator_group.rb +20 -0
- data/lib/pdk/validate/puppet/puppet_epp_validator.rb +133 -0
- data/lib/pdk/validate/puppet/puppet_lint_validator.rb +66 -0
- data/lib/pdk/validate/puppet/puppet_syntax_validator.rb +137 -0
- data/lib/pdk/validate/puppet/puppet_validator_group.rb +21 -0
- data/lib/pdk/validate/ruby/ruby_rubocop_validator.rb +80 -0
- data/lib/pdk/validate/ruby/ruby_validator_group.rb +19 -0
- data/lib/pdk/validate/tasks/tasks_metadata_lint_validator.rb +88 -0
- data/lib/pdk/validate/tasks/tasks_name_validator.rb +50 -0
- data/lib/pdk/validate/tasks/tasks_validator_group.rb +20 -0
- data/lib/pdk/validate/validator.rb +111 -0
- data/lib/pdk/validate/validator_group.rb +103 -0
- data/lib/pdk/validate/yaml/yaml_syntax_validator.rb +95 -0
- data/lib/pdk/validate/yaml/yaml_validator_group.rb +19 -0
- data/lib/pdk/version.rb +1 -1
- data/locales/pdk.pot +161 -125
- metadata +29 -17
- data/lib/pdk/validate/base_validator.rb +0 -215
- data/lib/pdk/validate/metadata/metadata_json_lint.rb +0 -82
- data/lib/pdk/validate/metadata/metadata_syntax.rb +0 -111
- data/lib/pdk/validate/metadata_validator.rb +0 -26
- data/lib/pdk/validate/puppet/puppet_epp.rb +0 -135
- data/lib/pdk/validate/puppet/puppet_lint.rb +0 -64
- data/lib/pdk/validate/puppet/puppet_syntax.rb +0 -135
- data/lib/pdk/validate/puppet_validator.rb +0 -26
- data/lib/pdk/validate/ruby/rubocop.rb +0 -72
- data/lib/pdk/validate/ruby_validator.rb +0 -26
- data/lib/pdk/validate/tasks/metadata_lint.rb +0 -130
- data/lib/pdk/validate/tasks/name.rb +0 -90
- data/lib/pdk/validate/tasks_validator.rb +0 -29
- data/lib/pdk/validate/yaml/syntax.rb +0 -125
- data/lib/pdk/validate/yaml_validator.rb +0 -28
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class RubyValidator < BaseValidator
|
6
|
-
def self.name
|
7
|
-
'ruby'
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.ruby_validators
|
11
|
-
[Rubocop]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.invoke(report, options = {})
|
15
|
-
exit_code = 0
|
16
|
-
|
17
|
-
ruby_validators.each do |validator|
|
18
|
-
exit_code = validator.invoke(report, options)
|
19
|
-
break if exit_code != 0
|
20
|
-
end
|
21
|
-
|
22
|
-
exit_code
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class Tasks
|
6
|
-
class MetadataLint < BaseValidator
|
7
|
-
FORGE_SCHEMA_URL = 'https://forgeapi.puppet.com/schemas/task.json'.freeze
|
8
|
-
|
9
|
-
def self.name
|
10
|
-
'task-metadata-lint'
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.pattern
|
14
|
-
'tasks/*.json'
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.spinner_text(_targets = [])
|
18
|
-
_('Checking task metadata style (%{targets}).') % {
|
19
|
-
targets: pattern,
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.create_spinner(targets = [], options = {})
|
24
|
-
require 'pdk/cli/util'
|
25
|
-
|
26
|
-
return unless PDK::CLI::Util.interactive?
|
27
|
-
|
28
|
-
options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
|
29
|
-
|
30
|
-
exec_group = options[:exec_group]
|
31
|
-
@spinner = if exec_group
|
32
|
-
exec_group.add_spinner(spinner_text(targets), options)
|
33
|
-
else
|
34
|
-
require 'pdk/cli/util/spinner'
|
35
|
-
|
36
|
-
TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
|
37
|
-
end
|
38
|
-
@spinner.auto_spin
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.stop_spinner(exit_code)
|
42
|
-
if exit_code.zero? && @spinner
|
43
|
-
@spinner.success
|
44
|
-
elsif @spinner
|
45
|
-
@spinner.error
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.schema_file
|
50
|
-
require 'pdk/util/vendored_file'
|
51
|
-
|
52
|
-
schema = PDK::Util::VendoredFile.new('task.json', FORGE_SCHEMA_URL).read
|
53
|
-
|
54
|
-
JSON.parse(schema)
|
55
|
-
rescue PDK::Util::VendoredFile::DownloadError => e
|
56
|
-
raise PDK::CLI::FatalError, e.message
|
57
|
-
rescue JSON::ParserError
|
58
|
-
raise PDK::CLI::FatalError, _('Failed to parse Task Metadata Schema file.')
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.invoke(report, options = {})
|
62
|
-
targets, skipped, invalid = parse_targets(options)
|
63
|
-
|
64
|
-
process_skipped(report, skipped)
|
65
|
-
process_invalid(report, invalid)
|
66
|
-
|
67
|
-
return 0 if targets.empty?
|
68
|
-
|
69
|
-
return_val = 0
|
70
|
-
create_spinner(targets, options)
|
71
|
-
|
72
|
-
require 'json-schema'
|
73
|
-
|
74
|
-
targets.each do |target|
|
75
|
-
unless PDK::Util::Filesystem.readable?(target)
|
76
|
-
report.add_event(
|
77
|
-
file: target,
|
78
|
-
source: name,
|
79
|
-
state: :failure,
|
80
|
-
severity: 'error',
|
81
|
-
message: _('Could not be read.'),
|
82
|
-
)
|
83
|
-
return_val = 1
|
84
|
-
next
|
85
|
-
end
|
86
|
-
|
87
|
-
begin
|
88
|
-
# Need to set the JSON Parser and State Generator to the Native one to be
|
89
|
-
# compatible with the multi_json adapter.
|
90
|
-
JSON.parser = JSON::Ext::Parser if defined?(JSON::Ext::Parser)
|
91
|
-
JSON.generator = JSON::Ext::Generator
|
92
|
-
|
93
|
-
begin
|
94
|
-
errors = JSON::Validator.fully_validate(schema_file, PDK::Util::Filesystem.read_file(target)) || []
|
95
|
-
rescue JSON::Schema::SchemaError => e
|
96
|
-
raise PDK::CLI::FatalError, _('Unable to validate Task Metadata. %{error}.') % { error: e.message }
|
97
|
-
end
|
98
|
-
|
99
|
-
if errors.empty?
|
100
|
-
report.add_event(
|
101
|
-
file: target,
|
102
|
-
source: name,
|
103
|
-
state: :passed,
|
104
|
-
severity: 'ok',
|
105
|
-
)
|
106
|
-
else
|
107
|
-
errors.each do |error|
|
108
|
-
# strip off the trailing parts that aren't relevant
|
109
|
-
error = error.split('in schema').first if error.include? 'in schema'
|
110
|
-
|
111
|
-
report.add_event(
|
112
|
-
file: target,
|
113
|
-
source: name,
|
114
|
-
state: :failure,
|
115
|
-
severity: 'error',
|
116
|
-
message: error,
|
117
|
-
)
|
118
|
-
end
|
119
|
-
return_val = 1
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
stop_spinner(return_val)
|
125
|
-
return_val
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class Tasks
|
6
|
-
class Name < BaseValidator
|
7
|
-
INVALID_TASK_MSG = _(
|
8
|
-
'Invalid task name. Task names must start with a lowercase letter ' \
|
9
|
-
'and can only contain lowercase letters, numbers, and underscores.',
|
10
|
-
)
|
11
|
-
|
12
|
-
def self.name
|
13
|
-
'task-name'
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.pattern
|
17
|
-
'tasks/**/*'
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.spinner_text(_targets = [])
|
21
|
-
_('Checking task names (%{targets}).') % {
|
22
|
-
targets: pattern,
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.create_spinner(targets = [], options = {})
|
27
|
-
require 'pdk/cli/util'
|
28
|
-
|
29
|
-
return unless PDK::CLI::Util.interactive?
|
30
|
-
options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
|
31
|
-
|
32
|
-
exec_group = options[:exec_group]
|
33
|
-
@spinner = if exec_group
|
34
|
-
exec_group.add_spinner(spinner_text(targets), options)
|
35
|
-
else
|
36
|
-
require 'pdk/cli/util/spinner'
|
37
|
-
|
38
|
-
TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
|
39
|
-
end
|
40
|
-
@spinner.auto_spin
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.stop_spinner(exit_code)
|
44
|
-
if exit_code.zero? && @spinner
|
45
|
-
@spinner.success
|
46
|
-
elsif @spinner
|
47
|
-
@spinner.error
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.invoke(report, options = {})
|
52
|
-
targets, skipped, invalid = parse_targets(options)
|
53
|
-
|
54
|
-
process_skipped(report, skipped)
|
55
|
-
process_invalid(report, invalid)
|
56
|
-
|
57
|
-
return 0 if targets.empty?
|
58
|
-
|
59
|
-
return_val = 0
|
60
|
-
create_spinner(targets, options)
|
61
|
-
|
62
|
-
targets.each do |target|
|
63
|
-
task_name = File.basename(target, File.extname(target))
|
64
|
-
if PDK::CLI::Util::OptionValidator.valid_task_name?(task_name)
|
65
|
-
report.add_event(
|
66
|
-
file: target,
|
67
|
-
source: name,
|
68
|
-
state: :passed,
|
69
|
-
severity: 'ok',
|
70
|
-
)
|
71
|
-
else
|
72
|
-
report.add_event(
|
73
|
-
file: target,
|
74
|
-
source: name,
|
75
|
-
state: :failure,
|
76
|
-
severity: 'error',
|
77
|
-
message: INVALID_TASK_MSG,
|
78
|
-
)
|
79
|
-
|
80
|
-
return_val = 1
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
stop_spinner(return_val)
|
85
|
-
return_val
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class TasksValidator < BaseValidator
|
6
|
-
def self.name
|
7
|
-
'tasks'
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.metadata_validators
|
11
|
-
[
|
12
|
-
Tasks::Name,
|
13
|
-
Tasks::MetadataLint,
|
14
|
-
]
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.invoke(report, options = {})
|
18
|
-
exit_code = 0
|
19
|
-
|
20
|
-
metadata_validators.each do |validator|
|
21
|
-
exit_code = validator.invoke(report, options)
|
22
|
-
break if exit_code != 0
|
23
|
-
end
|
24
|
-
|
25
|
-
exit_code
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class YAML
|
6
|
-
class Syntax < BaseValidator
|
7
|
-
IGNORE_DOTFILES = false
|
8
|
-
YAML_WHITELISTED_CLASSES = [Symbol].freeze
|
9
|
-
|
10
|
-
def self.name
|
11
|
-
'yaml-syntax'
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.pattern
|
15
|
-
[
|
16
|
-
'**/*.yaml',
|
17
|
-
'*.yaml',
|
18
|
-
'**/*.yml',
|
19
|
-
'*.yml',
|
20
|
-
]
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.spinner_text(_targets = [])
|
24
|
-
_('Checking YAML syntax (%{targets}).') % {
|
25
|
-
targets: pattern,
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.create_spinner(targets = [], options = {})
|
30
|
-
require 'pdk/cli/util'
|
31
|
-
|
32
|
-
return unless PDK::CLI::Util.interactive?
|
33
|
-
options = options.merge(PDK::CLI::Util.spinner_opts_for_platform)
|
34
|
-
|
35
|
-
exec_group = options[:exec_group]
|
36
|
-
@spinner = if exec_group
|
37
|
-
exec_group.add_spinner(spinner_text(targets), options)
|
38
|
-
else
|
39
|
-
require 'pdk/cli/util/spinner'
|
40
|
-
|
41
|
-
TTY::Spinner.new("[:spinner] #{spinner_text(targets)}", options)
|
42
|
-
end
|
43
|
-
@spinner.auto_spin
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.stop_spinner(exit_code)
|
47
|
-
if exit_code.zero? && @spinner
|
48
|
-
@spinner.success
|
49
|
-
elsif @spinner
|
50
|
-
@spinner.error
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.invoke(report, options = {})
|
55
|
-
targets, skipped, invalid = parse_targets(options)
|
56
|
-
|
57
|
-
process_skipped(report, skipped)
|
58
|
-
process_invalid(report, invalid)
|
59
|
-
|
60
|
-
return 0 if targets.empty?
|
61
|
-
|
62
|
-
return_val = 0
|
63
|
-
create_spinner(targets, options)
|
64
|
-
|
65
|
-
PDK.logger.debug(_('Validating yaml content of %{parsed_targets}') % { parsed_targets: targets.to_s })
|
66
|
-
|
67
|
-
targets.each do |target|
|
68
|
-
next unless PDK::Util::Filesystem.file?(target)
|
69
|
-
|
70
|
-
unless PDK::Util::Filesystem.readable?(target)
|
71
|
-
report.add_event(
|
72
|
-
file: target,
|
73
|
-
source: name,
|
74
|
-
state: :failure,
|
75
|
-
severity: 'error',
|
76
|
-
message: _('Could not be read.'),
|
77
|
-
)
|
78
|
-
return_val = 1
|
79
|
-
next
|
80
|
-
end
|
81
|
-
|
82
|
-
begin
|
83
|
-
::YAML.safe_load(PDK::Util::Filesystem.read_file(target), YAML_WHITELISTED_CLASSES, [], true)
|
84
|
-
|
85
|
-
report.add_event(
|
86
|
-
file: target,
|
87
|
-
source: name,
|
88
|
-
state: :passed,
|
89
|
-
severity: 'ok',
|
90
|
-
)
|
91
|
-
rescue Psych::SyntaxError => e
|
92
|
-
report.add_event(
|
93
|
-
file: target,
|
94
|
-
source: name,
|
95
|
-
state: :failure,
|
96
|
-
severity: 'error',
|
97
|
-
line: e.line,
|
98
|
-
column: e.column,
|
99
|
-
message: _('%{problem} %{context}') % {
|
100
|
-
problem: e.problem,
|
101
|
-
context: e.context,
|
102
|
-
},
|
103
|
-
)
|
104
|
-
return_val = 1
|
105
|
-
rescue Psych::DisallowedClass => e
|
106
|
-
report.add_event(
|
107
|
-
file: target,
|
108
|
-
source: name,
|
109
|
-
state: :failure,
|
110
|
-
severity: 'error',
|
111
|
-
message: _('Unsupported class: %{message}') % {
|
112
|
-
message: e.message,
|
113
|
-
},
|
114
|
-
)
|
115
|
-
return_val = 1
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
stop_spinner(return_val)
|
120
|
-
return_val
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'pdk'
|
2
|
-
|
3
|
-
module PDK
|
4
|
-
module Validate
|
5
|
-
class YAMLValidator < BaseValidator
|
6
|
-
def self.name
|
7
|
-
'yaml'
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.validators
|
11
|
-
[
|
12
|
-
PDK::Validate::YAML::Syntax,
|
13
|
-
]
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.invoke(report, options = {})
|
17
|
-
exit_code = 0
|
18
|
-
|
19
|
-
validators.each do |validator|
|
20
|
-
exit_code = validator.invoke(report, options)
|
21
|
-
break if exit_code != 0
|
22
|
-
end
|
23
|
-
|
24
|
-
exit_code
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|