simp-metadata 0.4.4 → 0.5.2

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 (61) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +494 -0
  3. data/Rakefile +19 -22
  4. data/exe/simp-install +1 -1
  5. data/exe/simp-media +1 -1
  6. data/exe/simp-metadata +1 -1
  7. data/lib/simp/install/command.rb +34 -35
  8. data/lib/simp/media.rb +0 -1
  9. data/lib/simp/media/command.rb +34 -35
  10. data/lib/simp/media/engine.rb +29 -35
  11. data/lib/simp/media/type.rb +1 -2
  12. data/lib/simp/media/type/base.rb +12 -4
  13. data/lib/simp/media/type/control-repo.rb +96 -107
  14. data/lib/simp/media/type/internet.rb +8 -8
  15. data/lib/simp/media/type/iso.rb +0 -1
  16. data/lib/simp/media/type/local.rb +18 -19
  17. data/lib/simp/media/type/tar.rb +37 -37
  18. data/lib/simp/metadata.rb +240 -258
  19. data/lib/simp/metadata/bootstrap_source.rb +93 -89
  20. data/lib/simp/metadata/buildinfo.rb +23 -23
  21. data/lib/simp/metadata/command.rb +60 -58
  22. data/lib/simp/metadata/commands.rb +1 -1
  23. data/lib/simp/metadata/commands/base.rb +28 -25
  24. data/lib/simp/metadata/commands/clone.rb +3 -5
  25. data/lib/simp/metadata/commands/component.rb +128 -90
  26. data/lib/simp/metadata/commands/delete.rb +4 -5
  27. data/lib/simp/metadata/commands/pry.rb +1 -3
  28. data/lib/simp/metadata/commands/release.rb +22 -23
  29. data/lib/simp/metadata/commands/releases.rb +1 -3
  30. data/lib/simp/metadata/commands/save.rb +10 -13
  31. data/lib/simp/metadata/commands/script.rb +11 -14
  32. data/lib/simp/metadata/commands/search.rb +15 -20
  33. data/lib/simp/metadata/commands/set-write-url.rb +1 -3
  34. data/lib/simp/metadata/commands/set-write.rb +1 -3
  35. data/lib/simp/metadata/commands/update.rb +9 -10
  36. data/lib/simp/metadata/component.rb +310 -154
  37. data/lib/simp/metadata/components.rb +15 -16
  38. data/lib/simp/metadata/engine.rb +31 -39
  39. data/lib/simp/metadata/fake_uri.rb +2 -0
  40. data/lib/simp/metadata/location.rb +99 -105
  41. data/lib/simp/metadata/locations.rb +19 -21
  42. data/lib/simp/metadata/release.rb +30 -39
  43. data/lib/simp/metadata/releases.rb +14 -15
  44. data/lib/simp/metadata/source.rb +69 -79
  45. data/lib/simp/metadata/version.rb +9 -0
  46. data/spec/simp/media/command_spec.rb +4 -5
  47. data/spec/simp/media/engine_spec.rb +14 -14
  48. data/spec/simp/media/type/control_repo_spec.rb +10 -12
  49. data/spec/simp/media/type/internet_spec.rb +11 -11
  50. data/spec/simp/media/type/iso_spec.rb +6 -7
  51. data/spec/simp/media/type/local_spec.rb +6 -8
  52. data/spec/simp/media/type/tar_spec.rb +6 -8
  53. data/spec/simp/metadata/buildinfo_spec.rb +19 -17
  54. data/spec/simp/metadata/commands/clone_spec.rb +4 -3
  55. data/spec/simp/metadata/component_spec.rb +43 -54
  56. data/spec/simp/metadata/engine_spec.rb +38 -41
  57. data/spec/simp/metadata/release_spec.rb +72 -79
  58. data/spec/simp/metadata/source_spec.rb +8 -6
  59. data/spec/simp/metadata_spec.rb +95 -98
  60. data/spec/spec_helper.rb +33 -21
  61. metadata +5 -3
@@ -5,9 +5,7 @@ module Simp
5
5
  module Metadata
6
6
  module Commands
7
7
  class Search < Simp::Metadata::Commands::Base
8
-
9
8
  def run(argv, engine = nil)
10
-
11
9
  options = defaults(argv) do |opts|
12
10
  opts.banner = "Usage: simp-metadata search <attribute>=<value>\n(supports multiple attributes as well as encoded URLs)"
13
11
  end
@@ -16,43 +14,41 @@ module Simp
16
14
  begin
17
15
  data = {}
18
16
  argv.each do |argument|
19
- splitted = argument.split("=")
17
+ splitted = argument.split('=')
20
18
  name = splitted[0]
21
19
  value = splitted[1]
22
20
  case name
23
- when name
24
- data[name] = value
21
+ when name
22
+ data[name] = value
25
23
  end
26
24
  end
27
- unless (data == {}) or data.nil?
25
+
26
+ if (data == {}) || data.nil?
27
+ puts 'No search parameters specified'
28
+ else
28
29
  data.each do |key, value|
29
- if value == "" or value.nil?
30
+ if value == '' || value.nil?
30
31
  puts "No value specified for #{key}"
31
32
  exit
32
33
  end
33
34
  end
34
- engine.components.each do |component|
35
35
 
36
+ engine.components.each do |component|
36
37
  result = data.all? do |key, value|
37
- if key == "url"
38
+ if key == 'url'
38
39
  component.locations.any? do |location|
39
- location.url == value or location.url == CGI.unescape(value)
40
+ location.url == value || location.url == CGI.unescape(value)
40
41
  end
41
42
  else
42
- component[key] == value or component[key] == CGI.unescape(value)
43
+ component[key] == value || component[key] == CGI.unescape(value)
43
44
  end
44
45
  end
45
46
 
46
- if result
47
- puts component.name
48
- end
47
+ puts component.name if result
49
48
  end
50
- else
51
- puts "No search parameters specified"
52
- end
53
- if (root == true)
54
- engine.save
55
49
  end
50
+
51
+ engine.save if root
56
52
  rescue RuntimeError => e
57
53
  Simp::Metadata.critical(e.message)
58
54
  exit 5
@@ -62,4 +58,3 @@ module Simp
62
58
  end
63
59
  end
64
60
  end
65
-
@@ -4,12 +4,10 @@ module Simp
4
4
  module Commands
5
5
  class Set_write_url < Simp::Metadata::Commands::Base
6
6
  def run(argv, engine = nil)
7
-
8
7
  options = defaults(argv) do |opts|
9
- opts.banner = "Usage: simp-metadata set-write-url <repo_name> <url>"
8
+ opts.banner = 'Usage: simp-metadata set-write-url <repo_name> <url>'
10
9
  end
11
10
 
12
-
13
11
  engine, root = get_engine(engine, options)
14
12
  engine.writable_url(argv[0], argv[1])
15
13
  end
@@ -4,12 +4,10 @@ module Simp
4
4
  module Commands
5
5
  class Set_write < Simp::Metadata::Commands::Base
6
6
  def run(argv, engine = nil)
7
-
8
7
  options = defaults(argv) do |opts|
9
- opts.banner = "Usage: simp-metadata set-write [options]"
8
+ opts.banner = 'Usage: simp-metadata set-write [options]'
10
9
  end
11
10
 
12
-
13
11
  engine, root = get_engine(engine, options)
14
12
  engine.writable_source_name = argv[0]
15
13
  end
@@ -3,28 +3,29 @@ module Simp
3
3
  module Metadata
4
4
  module Commands
5
5
  class Update < Simp::Metadata::Commands::Base
6
-
7
6
  def run(argv, engine = nil)
8
-
9
7
  options = defaults(argv) do |opts|
10
- opts.banner = "Usage: simp-metadata update <component> <setting> <value>"
8
+ opts.banner = 'Usage: simp-metadata update <component> <setting> <value>'
11
9
  end
12
10
 
13
-
14
11
  engine, root = get_engine(engine, options)
12
+
15
13
  begin
16
14
  component = argv[0]
17
15
  setting = argv[1]
18
16
  value = argv[2]
19
- if (options["release"] == nil)
17
+
18
+ if options['release'].nil?
20
19
  object = engine.components[component]
21
20
  else
22
- object = engine.releases[options["release"]].components[component]
21
+ object = engine.releases[options['release']].components[component]
23
22
  end
24
- unless (object.methods.include?(setting.to_sym))
23
+
24
+ unless object.methods.include?(setting.to_sym)
25
25
  Simp::Metadata.critical("#{setting} is not a valid setting")
26
26
  exit 7
27
27
  end
28
+
28
29
  begin
29
30
  object.send("#{setting}=".to_sym, value)
30
31
  rescue NoMethodError => ex
@@ -32,9 +33,7 @@ module Simp
32
33
  exit 6
33
34
  end
34
35
 
35
- if (root == true)
36
- engine.save((["simp-metadata", "update"] + argv).join(" "))
37
- end
36
+ engine.save((['simp-metadata', 'update'] + argv).join(' ')) if root
38
37
  rescue RuntimeError => e
39
38
  Simp::Metadata.critical(e.message)
40
39
  exit 5
@@ -12,53 +12,54 @@ module Simp
12
12
  end
13
13
 
14
14
  def to_s
15
- self.name
15
+ name
16
16
  end
17
17
 
18
- def name(type = "component")
18
+ def name(type = 'component')
19
19
  case type
20
- when "component"
20
+ when 'component'
21
+ @name
22
+ when 'puppetfile'
23
+ if component_type == 'rubygem'
24
+ "rubygem-#{@name.tr('-', '_')}"
25
+ elsif component_type == 'puppet-module'
26
+ @name.gsub(/pupmod-/, '')
27
+ else
21
28
  @name
22
- when "puppetfile"
23
- if (component_type == "rubygem")
24
- "rubygem-#{@name.gsub(/\-/, '_')}"
25
- elsif (component_type == "puppet-module")
26
- @name.gsub(/pupmod\-/, '')
27
- else
28
- @name
29
- end
29
+ end
30
+ else
31
+ abort(Simp::Metadata.critical("Expected type to be 'component' or 'puppetfile'")[0])
30
32
  end
31
33
  end
32
34
 
33
- def component_source()
34
- retval = engine.sources["bootstrap_metadata"]
35
- engine.sources.each do |name, source|
36
- if (source.components != nil)
37
- if (source.components.key?(self.name))
38
- retval = source
39
- break
40
- end
35
+ def component_source
36
+ retval = engine.sources['bootstrap_metadata']
37
+ engine.sources.each do |_name, source|
38
+ next if source.components.nil?
39
+ if source.components.key?(name)
40
+ retval = source
41
+ break
41
42
  end
42
43
  end
43
- return retval
44
+ retval
44
45
  end
45
46
 
46
- def release_source()
47
- retval = engine.sources["bootstrap_metadata"]
48
- engine.sources.each do |name, source|
49
- if (source.releases.key?(release_version))
50
- if (source.releases[release_version].key?(self.name))
47
+ def release_source
48
+ retval = engine.sources['bootstrap_metadata']
49
+ engine.sources.each do |_name, source|
50
+ if source.releases.key?(release_version)
51
+ if source.releases[release_version].key?(name)
51
52
  retval = source
52
53
  break
53
54
  end
54
55
  else
55
- if (source.release(release_version).key?(self.name))
56
+ if source.release(release_version).key?(name)
56
57
  retval = source
57
58
  break
58
59
  end
59
60
  end
60
61
  end
61
- return retval
62
+ retval
62
63
  end
63
64
 
64
65
  #
@@ -67,84 +68,84 @@ module Simp
67
68
  #
68
69
  # For now, just use it in Simp::Metadata::Buildinfo
69
70
  def fetch_data(item)
70
- component = get_from_component
71
- release = get_from_release
72
- if (release.key?(item))
73
- release[item]
74
- else
75
- component[item]
76
- end
71
+ component = get_from_component
72
+ release = get_from_release
73
+ if release.key?(item)
74
+ release[item]
75
+ else
76
+ component[item]
77
+ end
77
78
  end
78
79
 
79
- def get_from_component()
80
- return self.component_source.components[self.name]
80
+ def get_from_component
81
+ component_source.components[name]
81
82
  end
82
83
 
83
- def get_from_release()
84
+ def get_from_release
84
85
  retval = {}
85
- if (self.release_source.releases.key?(release_version))
86
- if (self.release_source.releases[release_version].key?(self.name))
87
- retval = self.release_source.releases[release_version][self.name]
86
+ if release_source.releases.key?(release_version)
87
+ if release_source.releases[release_version].key?(name)
88
+ retval = release_source.releases[release_version][name]
88
89
  end
89
90
  else
90
- if (self.release_source.release(release_version).key?(self.name))
91
- retval = self.release_source.release(release_version)[self.name]
91
+ if release_source.release(release_version).key?(name)
92
+ retval = release_source.release(release_version)[name]
92
93
  end
93
94
  end
94
- return retval
95
+ retval
95
96
  end
96
97
 
97
98
  def type
98
- get_from_component["type"]
99
+ get_from_component['type']
99
100
  end
100
101
 
101
102
  def extension
102
- if (self.real_extension == nil)
103
- case (self.component_type)
104
- when "simp-metadata"
105
- "tgz"
106
- when "logstash-filter"
107
- "gem"
108
- when "rubygem"
109
- "gem"
110
- when "grafana-plugin"
111
- "zip"
112
- when "puppet-module"
113
- "tgz"
114
- else
115
- ""
103
+ if real_extension.nil?
104
+ case component_type
105
+ when 'simp-metadata'
106
+ 'tgz'
107
+ when 'logstash-filter'
108
+ 'gem'
109
+ when 'rubygem'
110
+ 'gem'
111
+ when 'grafana-plugin'
112
+ 'zip'
113
+ when 'puppet-module'
114
+ 'tgz'
115
+ else
116
+ ''
116
117
  end
117
118
  else
118
- self.real_extension
119
+ real_extension
119
120
  end
120
121
  end
121
122
 
122
- def keys()
123
- ["component_type", "authoritative", "asset_name", "extension", "format", "module_name", "type", "url", "method", "extract", "branch", "tag", "ref", "version", "release_source", "component_source"]
123
+ def keys
124
+ %w(component_type authoritative asset_name extension format module_name type url method extract branch tag ref version release_source component_source target revision)
124
125
  end
125
126
 
126
- def [] (index)
127
- self.send index.to_sym
127
+ def [](index)
128
+ send index.to_sym
128
129
  end
129
130
 
130
- def each(&block)
131
- self.keys.each do |key|
131
+ def each
132
+ keys.each do |key|
132
133
  yield key, self[key]
133
134
  end
134
135
  end
135
136
 
136
137
  def real_extension
137
- get_from_component["extension"]
138
+ get_from_component['extension']
138
139
  end
139
140
 
140
141
  def real_asset_name
141
- case self.component_type
142
- when "puppet-module"
143
- get_from_component["module_name"]
144
- when "rubygem"
145
- get_from_component["gem_name"]
146
- else
147
- get_from_component["asset_name"]
142
+ case component_type
143
+ when 'puppet-module'
144
+ get_from_component['module_name']
145
+ when 'rubygem'
146
+ get_from_component['gem_name']
147
+ else
148
+ get_from_component['asset_name']
148
149
  end
149
150
  end
150
151
 
@@ -153,163 +154,224 @@ module Simp
153
154
  end
154
155
 
155
156
  def asset_name
156
- if (self.real_asset_name == nil)
157
- case self.component_type
158
- when "puppet-module"
159
- splitted = self.name.split("-")
160
- splitted[splitted.size - 1]
161
- else
162
- self.name
157
+ if real_asset_name.nil?
158
+ case component_type
159
+ when 'puppet-module'
160
+ splitted = name.split('-')
161
+ splitted[splitted.size - 1]
162
+ else
163
+ name
163
164
  end
164
165
  else
165
- self.real_asset_name
166
+ real_asset_name
166
167
  end
167
168
  end
168
169
 
169
-
170
170
  def output_type
171
- if (self.compiled?)
172
- return :file
171
+ if compiled?
172
+ :file
173
173
  else
174
- return :directory
174
+ :directory
175
175
  end
176
176
  end
177
177
 
178
178
  def output_filename
179
- if (self.compiled?)
180
- return "#{self.name}-#{self.version}.#{self.extension}"
179
+ if compiled?
180
+ "#{name}-#{version}.#{extension}"
181
181
  else
182
- return self.name
182
+ name
183
183
  end
184
184
  end
185
185
 
186
186
  def primary
187
- self.locations.primary
187
+ locations.primary
188
188
  end
189
189
 
190
190
  def url
191
- self.locations.primary.url
191
+ locations.primary.url
192
192
  end
193
193
 
194
194
  def method
195
- self.locations.primary.method
195
+ locations.primary.method
196
196
  end
197
197
 
198
198
  def extract
199
- self.locations.primary.extract
199
+ locations.primary.extract
200
200
  end
201
201
 
202
202
  def locations
203
203
  # XXX: ToDo Allow manifest.yaml to override locations
204
204
  # XXX: ToDo Use primary_source and mirrors here if locations is empty
205
- Simp::Metadata::Locations.new({"locations" => get_from_component["locations"], "primary_source" => get_from_component["primary_source"], "mirrors" => get_from_component["mirrors"]}, self)
205
+ Simp::Metadata::Locations.new({ 'locations' => get_from_component['locations'], 'primary_source' => get_from_component['primary_source'], 'mirrors' => get_from_component['mirrors'] }, self)
206
206
  end
207
207
 
208
208
  # XXX: ToDo Generate a filename, and output file type; ie, directory or file
209
209
 
210
-
211
210
  def format
212
- get_from_component["format"]
211
+ get_from_component['format']
213
212
  end
214
213
 
215
214
  def component_type
216
- get_from_component["component-type"]
215
+ get_from_component['component-type']
217
216
  end
218
217
 
219
218
  def authoritative?
220
- get_from_component["authoritative"]
219
+ get_from_component['authoritative']
221
220
  end
222
221
 
223
222
  def authoritative
224
- get_from_component["authoritative"]
223
+ get_from_component['authoritative']
224
+ end
225
+
226
+ def revision
227
+ revision = get_from_component['revision']
228
+ if revision.nil?
229
+ '0'
230
+ else
231
+ revision
232
+ end
233
+ end
234
+
235
+ def revision=(value)
236
+ release = release_source.releases[release_version]
237
+ unless release.nil?
238
+ if release.key?(name)
239
+ release[name]['revision'] = value
240
+ else
241
+ release[name] = { 'revision' => value }
242
+ end
243
+ end
244
+ release_source.dirty = true
225
245
  end
226
246
 
227
247
  def ref
228
- get_from_release["ref"]
248
+ get_from_release['ref']
229
249
  end
230
250
 
231
251
  def ref=(value)
232
- release = self.release_source.releases[release_version]
233
- if (release != nil)
234
- if (release.key?(name))
235
- release[name]["ref"] = value
252
+ release = release_source.releases[release_version]
253
+ unless release.nil?
254
+ if release.key?(name)
255
+ release[name]['ref'] = value
236
256
  else
237
- release[name] = {"ref" => value}
257
+ release[name] = { 'ref' => value }
238
258
  end
239
259
  end
240
- self.release_source.dirty = true
260
+ release_source.dirty = true
241
261
  end
242
262
 
243
263
  def branch
244
- get_from_release["branch"]
264
+ get_from_release['branch']
245
265
  end
246
266
 
247
267
  def branch=(value)
248
- release = self.release_source.releases[release_version]
249
- if (release != nil)
250
- if (release.key?(name))
251
- release[name]["branch"] = value
268
+ release = release_source.releases[release_version]
269
+ unless release.nil?
270
+ if release.key?(name)
271
+ release[name]['branch'] = value
252
272
  else
253
- release[name] = {"branch" => value}
273
+ release[name] = { 'branch' => value }
254
274
  end
255
275
  end
256
- self.release_source.dirty = true
276
+ release_source.dirty = true
257
277
  end
258
278
 
259
279
  def tag
260
- get_from_release["tag"]
280
+ get_from_release['tag']
261
281
  end
262
282
 
263
283
  def tag=(value)
264
- release = self.release_source.releases[release_version]
265
- if (release != nil)
266
- if (release.key?(name))
267
- release[name]["tag"] = value
284
+ release = release_source.releases[release_version]
285
+ unless release.nil?
286
+ if release.key?(name)
287
+ release[name]['tag'] = value
268
288
  else
269
- release[name] = {"tag" => value}
289
+ release[name] = { 'tag' => value }
270
290
  end
271
291
  end
272
- self.release_source.dirty = true
292
+ release_source.dirty = true
273
293
  end
274
294
 
275
295
  def version
276
- ver = ""
277
- ["version", "tag", "ref", "branch"].each do |item|
278
- if (get_from_release[item] != nil)
296
+ ver = ''
297
+ %w(version tag ref branch).each do |item|
298
+ unless get_from_release[item].nil?
279
299
  ver = get_from_release[item]
280
300
  break
281
301
  end
282
302
  end
283
- return ver
303
+ ver
284
304
  end
285
305
 
286
306
  def rpm_basename
287
307
  if component_type == 'puppet-module'
288
- if name.match(/pupmod-*/)
289
- "#{name}"
308
+ if name =~ /pupmod-*/
309
+ name.to_s
290
310
  else
291
311
  "pupmod-#{name}"
292
312
  end
293
313
  else
294
- "#{name}"
314
+ name.to_s
295
315
  end
296
316
  end
297
317
 
298
- def rpm_version
299
- if version.match(/[v][0-9]+.[0-9]+.[0-9]+/)
318
+ def component_version
319
+ if version =~ /^[v][0-9]/
300
320
  version.split('v')[1]
301
321
  else
302
322
  version
303
323
  end
304
324
  end
305
325
 
326
+ def rpm_version
327
+ if component_version =~ /^[0-9]+.[0-9]+.[0-9]+.[0-9]+/
328
+ component_version
329
+ else
330
+ "#{component_version}-#{revision}"
331
+ end
332
+ end
333
+
334
+ def target
335
+ target = get_from_release['target']
336
+ if target.nil?
337
+ 'noarch'
338
+ else
339
+ target
340
+ end
341
+ end
342
+
343
+ def target=(value)
344
+ release = release_source.releases[release_version]
345
+ unless release.nil?
346
+ if release.key?(name)
347
+ release[name]['target'] = value
348
+ else
349
+ release[name] = { 'target' => value }
350
+ end
351
+ end
352
+ release_source.dirty = true
353
+ end
354
+
355
+ def platform
356
+ platform = engine.options['platform']
357
+ if platform.nil?
358
+ 'el7'
359
+ else
360
+ platform
361
+ end
362
+ end
363
+
306
364
  def rpm_name
307
- "#{rpm_basename}-#{rpm_version}.rpm"
365
+ if component_type == 'puppet-module'
366
+ "#{rpm_basename}-#{rpm_version}.#{target}.rpm"
367
+ else
368
+ "#{rpm_basename}-#{rpm_version}.#{platform}.#{target}.rpm"
369
+ end
308
370
  end
309
371
 
310
372
  def compiled?
311
- if get_from_release.key?("compiled")
312
- get_from_release["compiled"]
373
+ if get_from_release.key?('compiled')
374
+ get_from_release['compiled']
313
375
  else
314
376
  false
315
377
  end
@@ -324,28 +386,25 @@ module Simp
324
386
  view_hash = {}
325
387
  if attribute.nil?
326
388
  comp.each do |key, value|
327
- unless value.nil? or value == ""
328
- view_hash[key] = value.to_s
329
- end
389
+ view_hash[key] = value.to_s unless value.nil? || value == ''
330
390
  end
331
391
  location_hash = {}
332
392
  comp.locations.each do |location|
333
393
  location.each do |key, value|
334
- unless value.nil?
335
- location_hash.merge!(key => value.to_s)
336
- end
394
+ location_hash.merge!(key => value.to_s) unless value.nil?
337
395
  end
338
396
  end
339
397
  buildinfo_hash = {}
340
398
  comp.buildinfo.each do |buildinfo|
341
- buildinfo.each do |key, value|
399
+ # Needs to be fixed/added to
400
+ buildinfo.each do |_key, _value|
342
401
  end
343
402
  end
344
403
  view_hash['location'] = location_hash
345
404
  else
346
405
  view_hash[attribute] = comp[attribute].to_s
347
406
  end
348
- return view_hash
407
+ view_hash
349
408
  end
350
409
 
351
410
  def diff(component, attribute)
@@ -354,35 +413,132 @@ module Simp
354
413
  if attribute.nil?
355
414
  current_hash = {}
356
415
  comp_hash = {}
357
- self.each do |attribute, value|
358
- current_hash.merge!(attribute => value)
416
+ each do |attr, value|
417
+ current_hash.merge!(attr => value)
359
418
  end
360
- component.each do |attribute, value|
361
- comp_hash.merge!(attribute => value)
419
+ component.each do |attr, value|
420
+ comp_hash.merge!(attr => value)
362
421
  end
363
422
  unless current_hash == comp_hash
364
- current_hash.each do |attribute, value|
365
- diff[attribute] = {"original" => "#{current_hash[attribute]}",
366
- "changed" => "#{comp_hash[attribute]}"} if comp_hash[attribute] != value
423
+ current_hash.each do |attr, value|
424
+ diff[attr] = { 'original' => (current_hash[attr]).to_s,
425
+ 'changed' => (comp_hash[attr]).to_s } if comp_hash[attr] != value
367
426
  end
368
427
  end
369
- return diff
428
+ diff
370
429
  else
371
- v1 = self["#{attribute}"]
372
- v2 = component["#{attribute}"]
373
- unless (v1 == v2)
374
- diff[attribute] = {"original" => "#{v1}", "changed" => "#{v2}"}
375
- return diff
430
+ v1 = self[attribute.to_s]
431
+ v2 = component[attribute.to_s]
432
+ unless v1 == v2
433
+ diff[attribute] = { 'original' => v1.to_s, 'changed' => v2.to_s }
434
+ diff
376
435
  end
377
436
  end
378
437
  end
438
+
379
439
  def buildinfo(type = nil)
380
- if (type == nil)
440
+ if type.nil?
381
441
  {}
382
442
  else
383
443
  Simp::Metadata::Buildinfo.new(self, type)
384
444
  end
385
445
  end
446
+
447
+ def build(destination)
448
+ currentdir = Dir.pwd
449
+ destination = currentdir if destination.nil?
450
+ abort(Simp::Metadata.critical("File #{rpm_name} already exists in #{destination}. Please delete this file and re-run the command if you wish to replace it.")[0]) if File.exist?("#{destination}/#{rpm_name}")
451
+
452
+ # Create tmp dir and clone source
453
+ Dir.mktmpdir do |dir|
454
+ Dir.chdir(dir.to_s) do
455
+ system("git clone #{url} source > /dev/null")
456
+ Dir.chdir('source') do
457
+ system("git checkout #{version}")
458
+
459
+ # sanitize
460
+ excludes = %w(.git .gitignore)
461
+ if File.exist?('./.simp.yml')
462
+ config = YAML.load_file('.simp.yml')
463
+ if config.key?('sanitize')
464
+ sanitize = config['sanitize']
465
+ excludes = excludes + ['.simp.yml'] + sanitize['exclude'] if sanitize.key?('exclude')
466
+ if sanitize.key?('scripts')
467
+ sanitize['scripts'].each do |command|
468
+ puts `#{command}`
469
+ end
470
+ end
471
+ end
472
+ end
473
+
474
+ # Make build dirs
475
+ FileUtils.makedirs "#{dir}/usr/share/simp/modules/#{module_name}"
476
+
477
+ # Create tarball and extract to tmp/usr/share/simp/#{module_name}
478
+ errorcode = Simp::Metadata.run("tar -cf - --exclude=./#{excludes.join(' --exclude=./')} . | tar -xvpf - -C #{dir}/usr/share/simp/modules/#{module_name}")
479
+ abort(Simp::Metadata.critical("Failed to create and extract tarball for #{name}")) unless errorcode == 0
480
+
481
+ # Set RPM build options
482
+ metadata = JSON.parse File.read('metadata.json')
483
+
484
+ heredoc = <<-HEREDOC
485
+ -s dir
486
+ -t rpm
487
+ --name '#{rpm_basename}'
488
+ --rpm-summary '#{metadata['name'].split('-')[1].capitalize} Puppet Module'
489
+ --description '#{metadata['summary']}'
490
+ --maintainer 'info@onyxpoint.com'
491
+ --category Applications/System
492
+ --prefix 'usr/share/simp/modules'
493
+ --url '#{metadata['source']}'
494
+ --vendor "Onyx Point, Inc"
495
+ --license '#{metadata['license']}'
496
+ --package '#{currentdir}/#{rpm_name}'
497
+ --version '#{metadata['version']}'
498
+ --iteration '#{revision}'
499
+ --architecture '#{target}'
500
+ --verbose
501
+ -C #{dir}/usr/share/simp/modules
502
+ --rpm-digest sha512 -d 'simp-adapter'
503
+ --directories=/usr/share/simp/modules/#{module_name}
504
+ HEREDOC
505
+
506
+ options = heredoc.tr("\n", ' ')
507
+
508
+ # Create RPM
509
+ Dir.chdir(dir.to_s) do
510
+ errorcode = Simp::Metadata.run("fpm #{options} 2> /dev/null")
511
+ abort(Simp::Metadata.critical("Failed to create RPM for #{module_name}")[0]) unless errorcode == 0
512
+ puts "RPM #{rpm_name} built successfully" if File.exist?("#{currentdir}/#{rpm_name}")
513
+ end
514
+ end
515
+ end
516
+ end
517
+ FileUtils.move "#{currentdir}/#{rpm_name}", destination
518
+ end
519
+
520
+ def download(destination, src)
521
+ destination = Dir.pwd if destination.nil?
522
+ rpm_name = self.rpm_name
523
+ return if File.exist?("#{destination}/#{rpm_name}")
524
+ el_version = platform.split('el')[1]
525
+ if src.nil?
526
+ sources = ["https://download.simp-project.com/SIMP/yum/simp6/el/#{el_version}/x86_64", "https://download.simp-project.com/SIMP/yum/unstable/el/#{el_version}/x86_64"]
527
+ else
528
+ sources = [source.to_s]
529
+ end
530
+ sources.each do |source|
531
+ if source =~ /^https?:/
532
+ file_check = `curl -sLI #{source}/#{rpm_name} | head -n 1 | awk '{print $2}'`.chomp
533
+ `wget -q #{source}/#{rpm_name}` if file_check == '200'
534
+ elsif File.exist?("#{source}/#{rpm_name}")
535
+ FileUtils.cp "#{source}/#{rpm_name}", destination
536
+ end
537
+ puts "Copied #{rpm_name} from #{source}" if File.exist?("#{destination}/#{rpm_name}")
538
+ return if File.exist?("#{destination}/#{rpm_name}")
539
+ end
540
+ puts "Unable to fine #{rpm_name} from #{sources}"
541
+ end
386
542
  end
387
543
  end
388
- end
544
+ end