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.
- 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
|