Class: PDK::Module::Metadata
- Inherits:
-
Object
- Object
- PDK::Module::Metadata
show all
- Includes:
- Util::Filesystem
- Defined in:
- lib/pdk/module/metadata.rb
Constant Summary
collapse
- OPERATING_SYSTEMS =
{
'RedHat based Linux' => [
{
'operatingsystem' => 'CentOS',
'operatingsystemrelease' => ['7'],
},
{
'operatingsystem' => 'OracleLinux',
'operatingsystemrelease' => ['7'],
},
{
'operatingsystem' => 'RedHat',
'operatingsystemrelease' => ['8'],
},
{
'operatingsystem' => 'Scientific',
'operatingsystemrelease' => ['7'],
},
],
'Debian based Linux' => [
{
'operatingsystem' => 'Debian',
'operatingsystemrelease' => ['9'],
},
{
'operatingsystem' => 'Ubuntu',
'operatingsystemrelease' => ['18.04'],
},
],
'Fedora' => {
'operatingsystem' => 'Fedora',
'operatingsystemrelease' => ['29'],
},
'OSX' => {
'operatingsystem' => 'Darwin',
'operatingsystemrelease' => ['16'],
},
'SLES' => {
'operatingsystem' => 'SLES',
'operatingsystemrelease' => ['15'],
},
'Solaris' => {
'operatingsystem' => 'Solaris',
'operatingsystemrelease' => ['11'],
},
'Windows' => {
'operatingsystem' => 'windows',
'operatingsystemrelease' => %w[2019 10],
},
}.freeze
- DEFAULT_OPERATING_SYSTEMS =
[
'RedHat based Linux',
'Debian based Linux',
'Windows',
].freeze
- DEFAULTS =
{
'name' => nil,
'version' => '0.1.0',
'author' => nil,
'summary' => '',
'license' => 'Apache-2.0',
'source' => '',
'project_page' => nil,
'issues_url' => nil,
'dependencies' => [],
'data_provider' => nil,
'operatingsystem_support' => DEFAULT_OPERATING_SYSTEMS.map { |os_name|
OPERATING_SYSTEMS[os_name]
}.flatten,
'requirements' => [
{ 'name' => 'puppet', 'version_requirement' => '>= 4.10.0 < 7.0.0' },
],
}.freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
directory?, exist?, expand_path, file?, fnmatch, glob, mkdir_p, read_file, readable?, rm, write_file
Constructor Details
#initialize(params = {}) ⇒ Metadata
Returns a new instance of Metadata.
86
87
88
89
|
# File 'lib/pdk/module/metadata.rb', line 86
def initialize(params = {})
@data = DEFAULTS.dup
update!(params) if params
end
|
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
6
7
8
|
# File 'lib/pdk/module/metadata.rb', line 6
def data
@data
end
|
Class Method Details
.from_file(metadata_json_path) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/pdk/module/metadata.rb', line 91
def self.from_file(metadata_json_path)
if metadata_json_path.nil?
raise ArgumentError, _('Cannot read metadata from file: no path to file was given.')
end
unless PDK::Util::Filesystem.file?(metadata_json_path)
raise ArgumentError, _("'%{file}' does not exist or is not a file.") % { file: metadata_json_path }
end
unless PDK::Util::Filesystem.readable?(metadata_json_path)
raise ArgumentError, _("Unable to open '%{file}' for reading.") % { file: metadata_json_path }
end
require 'json'
begin
data = JSON.parse(PDK::Util::Filesystem.read_file(metadata_json_path))
rescue JSON::JSONError => e
raise ArgumentError, _('Invalid JSON in metadata.json: %{msg}') % { msg: e.message }
end
data['template-url'] = PDK::Util::TemplateURI.default_template_uri.metadata_format if PDK::Util.package_install? && data['template-url'] == PDK::Util::TemplateURI::PACKAGED_TEMPLATE_KEYWORD
new(data)
end
|
Instance Method Details
#forge_ready? ⇒ Boolean
132
133
134
|
# File 'lib/pdk/module/metadata.rb', line 132
def forge_ready?
missing_fields.empty?
end
|
#interview_for_forge! ⇒ Object
136
137
138
139
140
|
# File 'lib/pdk/module/metadata.rb', line 136
def interview_for_forge!
require 'pdk/generate/module'
PDK::Generate::Module.module_interview(self, only_ask: missing_fields)
end
|
#missing_fields ⇒ Object
161
162
163
164
|
# File 'lib/pdk/module/metadata.rb', line 161
def missing_fields
fields = DEFAULTS.keys - %w[data_provider requirements dependencies]
fields.select { |key| @data[key].nil? || @data[key].empty? }
end
|
#puppet_requirement ⇒ Object
155
156
157
158
159
|
# File 'lib/pdk/module/metadata.rb', line 155
def puppet_requirement
@data['requirements'].find do |r|
r.key?('name') && r['name'] == 'puppet'
end
end
|
#to_json ⇒ Object
122
123
124
125
126
|
# File 'lib/pdk/module/metadata.rb', line 122
def to_json
require 'json'
JSON.pretty_generate(@data.dup.delete_if { |_key, value| value.nil? })
end
|
#update!(data) ⇒ Object
115
116
117
118
119
120
|
# File 'lib/pdk/module/metadata.rb', line 115
def update!(data)
process_name(data) if data['name']
@data.merge!(data)
self
end
|
#validate_puppet_version_requirement! ⇒ Object
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/pdk/module/metadata.rb', line 142
def validate_puppet_version_requirement!
msgs = {
no_reqs: _('Module metadata does not contain any requirements.'),
no_puppet_req: _('Module metadata does not contain a "puppet" requirement.'),
no_puppet_ver: _('The "puppet" requirement in module metadata does not specify a "version_requirement".'),
}
raise ArgumentError, msgs[:no_reqs] unless @data.key?('requirements')
raise ArgumentError, msgs[:no_puppet_req] if puppet_requirement.nil?
raise ArgumentError, msgs[:no_puppet_ver] unless puppet_requirement.key?('version_requirement')
raise ArgumentError, msgs[:no_puppet_ver] if puppet_requirement['version_requirement'].empty?
end
|
#write!(path) ⇒ Object
128
129
130
|
# File 'lib/pdk/module/metadata.rb', line 128
def write!(path)
write_file(path, to_json)
end
|