simp-metadata 0.4.4 → 0.5.2

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