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.
- checksums.yaml +5 -5
- data/README.md +494 -0
- data/Rakefile +19 -22
- data/exe/simp-install +1 -1
- data/exe/simp-media +1 -1
- data/exe/simp-metadata +1 -1
- data/lib/simp/install/command.rb +34 -35
- data/lib/simp/media.rb +0 -1
- data/lib/simp/media/command.rb +34 -35
- data/lib/simp/media/engine.rb +29 -35
- data/lib/simp/media/type.rb +1 -2
- data/lib/simp/media/type/base.rb +12 -4
- data/lib/simp/media/type/control-repo.rb +96 -107
- data/lib/simp/media/type/internet.rb +8 -8
- data/lib/simp/media/type/iso.rb +0 -1
- data/lib/simp/media/type/local.rb +18 -19
- data/lib/simp/media/type/tar.rb +37 -37
- data/lib/simp/metadata.rb +240 -258
- data/lib/simp/metadata/bootstrap_source.rb +93 -89
- data/lib/simp/metadata/buildinfo.rb +23 -23
- data/lib/simp/metadata/command.rb +60 -58
- data/lib/simp/metadata/commands.rb +1 -1
- data/lib/simp/metadata/commands/base.rb +28 -25
- data/lib/simp/metadata/commands/clone.rb +3 -5
- data/lib/simp/metadata/commands/component.rb +128 -90
- data/lib/simp/metadata/commands/delete.rb +4 -5
- data/lib/simp/metadata/commands/pry.rb +1 -3
- data/lib/simp/metadata/commands/release.rb +22 -23
- data/lib/simp/metadata/commands/releases.rb +1 -3
- data/lib/simp/metadata/commands/save.rb +10 -13
- data/lib/simp/metadata/commands/script.rb +11 -14
- data/lib/simp/metadata/commands/search.rb +15 -20
- data/lib/simp/metadata/commands/set-write-url.rb +1 -3
- data/lib/simp/metadata/commands/set-write.rb +1 -3
- data/lib/simp/metadata/commands/update.rb +9 -10
- data/lib/simp/metadata/component.rb +310 -154
- data/lib/simp/metadata/components.rb +15 -16
- data/lib/simp/metadata/engine.rb +31 -39
- data/lib/simp/metadata/fake_uri.rb +2 -0
- data/lib/simp/metadata/location.rb +99 -105
- data/lib/simp/metadata/locations.rb +19 -21
- data/lib/simp/metadata/release.rb +30 -39
- data/lib/simp/metadata/releases.rb +14 -15
- data/lib/simp/metadata/source.rb +69 -79
- data/lib/simp/metadata/version.rb +9 -0
- data/spec/simp/media/command_spec.rb +4 -5
- data/spec/simp/media/engine_spec.rb +14 -14
- data/spec/simp/media/type/control_repo_spec.rb +10 -12
- data/spec/simp/media/type/internet_spec.rb +11 -11
- data/spec/simp/media/type/iso_spec.rb +6 -7
- data/spec/simp/media/type/local_spec.rb +6 -8
- data/spec/simp/media/type/tar_spec.rb +6 -8
- data/spec/simp/metadata/buildinfo_spec.rb +19 -17
- data/spec/simp/metadata/commands/clone_spec.rb +4 -3
- data/spec/simp/metadata/component_spec.rb +43 -54
- data/spec/simp/metadata/engine_spec.rb +38 -41
- data/spec/simp/metadata/release_spec.rb +72 -79
- data/spec/simp/metadata/source_spec.rb +8 -6
- data/spec/simp/metadata_spec.rb +95 -98
- data/spec/spec_helper.rb +33 -21
- 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
|
-
|
24
|
-
|
21
|
+
when name
|
22
|
+
data[name] = value
|
25
23
|
end
|
26
24
|
end
|
27
|
-
|
25
|
+
|
26
|
+
if (data == {}) || data.nil?
|
27
|
+
puts 'No search parameters specified'
|
28
|
+
else
|
28
29
|
data.each do |key, value|
|
29
|
-
if value ==
|
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 ==
|
38
|
+
if key == 'url'
|
38
39
|
component.locations.any? do |location|
|
39
|
-
location.url == value
|
40
|
+
location.url == value || location.url == CGI.unescape(value)
|
40
41
|
end
|
41
42
|
else
|
42
|
-
component[key] == 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 =
|
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 =
|
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 =
|
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
|
-
|
17
|
+
|
18
|
+
if options['release'].nil?
|
20
19
|
object = engine.components[component]
|
21
20
|
else
|
22
|
-
object = engine.releases[options[
|
21
|
+
object = engine.releases[options['release']].components[component]
|
23
22
|
end
|
24
|
-
|
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
|
-
|
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
|
-
|
15
|
+
name
|
16
16
|
end
|
17
17
|
|
18
|
-
def name(type =
|
18
|
+
def name(type = 'component')
|
19
19
|
case type
|
20
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
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[
|
35
|
-
engine.sources.each do |
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
44
|
+
retval
|
44
45
|
end
|
45
46
|
|
46
|
-
def release_source
|
47
|
-
retval = engine.sources[
|
48
|
-
engine.sources.each do |
|
49
|
-
if
|
50
|
-
if
|
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
|
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
|
-
|
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
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
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
|
86
|
-
if
|
87
|
-
retval =
|
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
|
91
|
-
retval =
|
91
|
+
if release_source.release(release_version).key?(name)
|
92
|
+
retval = release_source.release(release_version)[name]
|
92
93
|
end
|
93
94
|
end
|
94
|
-
|
95
|
+
retval
|
95
96
|
end
|
96
97
|
|
97
98
|
def type
|
98
|
-
get_from_component[
|
99
|
+
get_from_component['type']
|
99
100
|
end
|
100
101
|
|
101
102
|
def extension
|
102
|
-
if
|
103
|
-
case
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
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
|
-
|
119
|
+
real_extension
|
119
120
|
end
|
120
121
|
end
|
121
122
|
|
122
|
-
def keys
|
123
|
-
|
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 []
|
127
|
-
|
127
|
+
def [](index)
|
128
|
+
send index.to_sym
|
128
129
|
end
|
129
130
|
|
130
|
-
def each
|
131
|
-
|
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[
|
138
|
+
get_from_component['extension']
|
138
139
|
end
|
139
140
|
|
140
141
|
def real_asset_name
|
141
|
-
case
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
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
|
157
|
-
case
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
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
|
-
|
166
|
+
real_asset_name
|
166
167
|
end
|
167
168
|
end
|
168
169
|
|
169
|
-
|
170
170
|
def output_type
|
171
|
-
if
|
172
|
-
|
171
|
+
if compiled?
|
172
|
+
:file
|
173
173
|
else
|
174
|
-
|
174
|
+
:directory
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
178
|
def output_filename
|
179
|
-
if
|
180
|
-
|
179
|
+
if compiled?
|
180
|
+
"#{name}-#{version}.#{extension}"
|
181
181
|
else
|
182
|
-
|
182
|
+
name
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
186
|
def primary
|
187
|
-
|
187
|
+
locations.primary
|
188
188
|
end
|
189
189
|
|
190
190
|
def url
|
191
|
-
|
191
|
+
locations.primary.url
|
192
192
|
end
|
193
193
|
|
194
194
|
def method
|
195
|
-
|
195
|
+
locations.primary.method
|
196
196
|
end
|
197
197
|
|
198
198
|
def extract
|
199
|
-
|
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({
|
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[
|
211
|
+
get_from_component['format']
|
213
212
|
end
|
214
213
|
|
215
214
|
def component_type
|
216
|
-
get_from_component[
|
215
|
+
get_from_component['component-type']
|
217
216
|
end
|
218
217
|
|
219
218
|
def authoritative?
|
220
|
-
get_from_component[
|
219
|
+
get_from_component['authoritative']
|
221
220
|
end
|
222
221
|
|
223
222
|
def authoritative
|
224
|
-
get_from_component[
|
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[
|
248
|
+
get_from_release['ref']
|
229
249
|
end
|
230
250
|
|
231
251
|
def ref=(value)
|
232
|
-
release =
|
233
|
-
|
234
|
-
if
|
235
|
-
release[name][
|
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] = {
|
257
|
+
release[name] = { 'ref' => value }
|
238
258
|
end
|
239
259
|
end
|
240
|
-
|
260
|
+
release_source.dirty = true
|
241
261
|
end
|
242
262
|
|
243
263
|
def branch
|
244
|
-
get_from_release[
|
264
|
+
get_from_release['branch']
|
245
265
|
end
|
246
266
|
|
247
267
|
def branch=(value)
|
248
|
-
release =
|
249
|
-
|
250
|
-
if
|
251
|
-
release[name][
|
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] = {
|
273
|
+
release[name] = { 'branch' => value }
|
254
274
|
end
|
255
275
|
end
|
256
|
-
|
276
|
+
release_source.dirty = true
|
257
277
|
end
|
258
278
|
|
259
279
|
def tag
|
260
|
-
get_from_release[
|
280
|
+
get_from_release['tag']
|
261
281
|
end
|
262
282
|
|
263
283
|
def tag=(value)
|
264
|
-
release =
|
265
|
-
|
266
|
-
if
|
267
|
-
release[name][
|
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] = {
|
289
|
+
release[name] = { 'tag' => value }
|
270
290
|
end
|
271
291
|
end
|
272
|
-
|
292
|
+
release_source.dirty = true
|
273
293
|
end
|
274
294
|
|
275
295
|
def version
|
276
|
-
ver =
|
277
|
-
|
278
|
-
|
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
|
-
|
303
|
+
ver
|
284
304
|
end
|
285
305
|
|
286
306
|
def rpm_basename
|
287
307
|
if component_type == 'puppet-module'
|
288
|
-
if name
|
289
|
-
|
308
|
+
if name =~ /pupmod-*/
|
309
|
+
name.to_s
|
290
310
|
else
|
291
311
|
"pupmod-#{name}"
|
292
312
|
end
|
293
313
|
else
|
294
|
-
|
314
|
+
name.to_s
|
295
315
|
end
|
296
316
|
end
|
297
317
|
|
298
|
-
def
|
299
|
-
if version
|
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
|
-
|
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?(
|
312
|
-
get_from_release[
|
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?
|
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
|
-
|
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
|
-
|
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
|
-
|
358
|
-
current_hash.merge!(
|
416
|
+
each do |attr, value|
|
417
|
+
current_hash.merge!(attr => value)
|
359
418
|
end
|
360
|
-
component.each do |
|
361
|
-
comp_hash.merge!(
|
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 |
|
365
|
-
diff[
|
366
|
-
|
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
|
-
|
428
|
+
diff
|
370
429
|
else
|
371
|
-
v1 = self[
|
372
|
-
v2 = component[
|
373
|
-
unless
|
374
|
-
diff[attribute] = {
|
375
|
-
|
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
|
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
|