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
@@ -4,17 +4,15 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Clone < 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 clone <source_release> <target_release>'
|
10
9
|
end
|
10
|
+
|
11
11
|
engine, root = get_engine(engine, options)
|
12
12
|
|
13
13
|
begin
|
14
14
|
engine.releases.create(argv[1], argv[0])
|
15
|
-
|
16
|
-
engine.save((["simp-metadata", "clone"] + argv).join(" "))
|
17
|
-
end
|
15
|
+
engine.save((['simp-metadata', 'clone'] + argv).join(' ')) if root
|
18
16
|
rescue RuntimeError => e
|
19
17
|
Simp::Metadata.critical(e.message)
|
20
18
|
exit 5
|
@@ -3,105 +3,143 @@ module Simp
|
|
3
3
|
module Metadata
|
4
4
|
module Commands
|
5
5
|
class Component < Simp::Metadata::Commands::Base
|
6
|
-
|
7
6
|
def run(argv, engine = nil)
|
7
|
+
subcommand = argv[0]
|
8
|
+
|
9
|
+
case subcommand
|
10
|
+
when '--help', '-h'
|
11
|
+
options = defaults(argv) do |opts|
|
12
|
+
opts.banner = 'Usage: simp-metadata component [ view | diff | download | build | update | create ]'
|
13
|
+
end
|
14
|
+
|
15
|
+
when 'create'
|
16
|
+
options = defaults(argv) do |opts|
|
17
|
+
opts.banner = 'Usage: simp-metadata component create <component_name> name=<value>'
|
18
|
+
end
|
19
|
+
engine, root = get_engine(engine, options)
|
20
|
+
component = argv[1]
|
21
|
+
argv.shift
|
22
|
+
data = { 'locations' => [{ 'primary' => true }] }
|
23
|
+
argv.each do |argument|
|
24
|
+
splitted = argument.split('=')
|
25
|
+
name = splitted[0]
|
26
|
+
value = splitted[1]
|
27
|
+
case name
|
28
|
+
when 'authoritative'
|
29
|
+
data['authoritative'] = value.to_s == 'true'
|
30
|
+
when 'format'
|
31
|
+
data['format'] = value
|
32
|
+
when 'component-type'
|
33
|
+
data['component-type'] = value
|
34
|
+
when 'primary_url'
|
35
|
+
data['locations'].first['url'] = value
|
36
|
+
when 'primary_url_type'
|
37
|
+
data['locations'].first['type'] = value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
engine.components.create(component, data)
|
8
41
|
|
42
|
+
when 'update'
|
43
|
+
options = defaults(argv) do |opts|
|
44
|
+
opts.banner = 'Usage: simp-metadata component update <component> <setting> <value>'
|
45
|
+
end
|
46
|
+
engine, root = get_engine(engine, options)
|
47
|
+
component = argv[1]
|
48
|
+
setting = argv[2]
|
49
|
+
value = argv[3]
|
50
|
+
object = engine.components[component]
|
51
|
+
unless object.methods.include?(setting.to_sym)
|
52
|
+
Simp::Metadata.critical("#{setting} is not a valid setting")
|
53
|
+
exit 7
|
54
|
+
end
|
55
|
+
begin
|
56
|
+
object.send("#{setting}=".to_sym, value)
|
57
|
+
rescue NoMethodError => ex
|
58
|
+
Simp::Metadata.critical("#{setting} is a read-only setting")
|
59
|
+
exit 6
|
60
|
+
end
|
9
61
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
case name
|
30
|
-
when "authoritative"
|
31
|
-
data["authoritiative"] = value.to_s == "true"
|
32
|
-
when "format"
|
33
|
-
data["format"] = value
|
34
|
-
when "component-type"
|
35
|
-
data["component-type"] = value
|
36
|
-
when "primary_url"
|
37
|
-
data["locations"].first["url"] = value
|
38
|
-
when "primary_url_type"
|
39
|
-
data["locations"].first["type"] = value
|
40
|
-
end
|
41
|
-
end
|
42
|
-
engine.components.create(component, data)
|
43
|
-
when "update"
|
44
|
-
options = defaults(argv) do |opts|
|
45
|
-
opts.banner = "Usage: simp-metadata component update <component> <setting> <value>"
|
46
|
-
end
|
47
|
-
engine, root = get_engine(engine, options)
|
48
|
-
component = argv[1]
|
49
|
-
setting = argv[2]
|
50
|
-
value = argv[3]
|
51
|
-
object = engine.components[component]
|
52
|
-
unless (object.methods.include?(setting.to_sym))
|
53
|
-
Simp::Metadata.critical("#{setting} is not a valid setting")
|
54
|
-
exit 7
|
55
|
-
end
|
56
|
-
begin
|
57
|
-
object.send("#{setting}=".to_sym, value)
|
58
|
-
rescue NoMethodError => ex
|
59
|
-
Simp::Metadata.critical("#{setting} is a read-only setting")
|
60
|
-
exit 6
|
61
|
-
end
|
62
|
+
when 'view'
|
63
|
+
options = defaults(argv) do |opts|
|
64
|
+
opts.banner = 'Usage: simp-metadata component view <component> [attribute]'
|
65
|
+
end
|
66
|
+
engine, root = get_engine(engine, options)
|
67
|
+
component = argv[1]
|
68
|
+
attribute = argv[2]
|
69
|
+
if engine.components.key?(component)
|
70
|
+
if options['release'].nil?
|
71
|
+
comp = engine.components[component]
|
72
|
+
else
|
73
|
+
comp = engine.releases[options['release']].components[component]
|
74
|
+
end
|
75
|
+
view = comp.view(attribute)
|
76
|
+
puts view.to_yaml
|
77
|
+
else
|
78
|
+
Simp::Metadata.critical("Unable to find component named #{component}")
|
79
|
+
exit 5
|
80
|
+
end
|
62
81
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
view = comp.view(attribute)
|
77
|
-
puts view.to_yaml
|
78
|
-
else
|
79
|
-
Simp::Metadata.critical("Unable to find component named #{component}")
|
80
|
-
exit 5
|
81
|
-
end
|
82
|
+
when 'diff'
|
83
|
+
options = defaults(argv) do |opts|
|
84
|
+
opts.banner = 'Usage: simp-metadata component diff <release1> <release2> <component> [attribute]'
|
85
|
+
end
|
86
|
+
engine, root = get_engine(engine, options)
|
87
|
+
release1 = argv[1]
|
88
|
+
release2 = argv[2]
|
89
|
+
component = argv[3]
|
90
|
+
attribute = argv[4]
|
91
|
+
component1 = engine.releases[release1].components[component]
|
92
|
+
component2 = engine.releases[release2].components[component]
|
93
|
+
diff = component1.diff(component2, attribute)
|
94
|
+
puts diff.to_yaml
|
82
95
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
+
when 'download'
|
97
|
+
options = defaults(argv) do |opts|
|
98
|
+
opts.banner = 'Usage: simp-metadata component download -v <version> <component> [destination] [source]'
|
99
|
+
end
|
100
|
+
engine, root = get_engine(engine, options)
|
101
|
+
component = argv[1]
|
102
|
+
destination = argv[2]
|
103
|
+
source = argv[3]
|
104
|
+
if engine.components.key?(component)
|
105
|
+
if options['release'].nil?
|
106
|
+
comp = engine.components[component]
|
107
|
+
else
|
108
|
+
comp = engine.releases[options['release']].components[component]
|
109
|
+
end
|
110
|
+
comp.download(destination, source)
|
111
|
+
else
|
112
|
+
Simp::Metadata.critical('Unable to find component to download')
|
113
|
+
exit 5
|
96
114
|
end
|
97
115
|
|
98
|
-
|
99
|
-
|
116
|
+
when 'build'
|
117
|
+
options = defaults(argv) do |opts|
|
118
|
+
opts.banner = 'Usage: simp-metadata component build <component> [destination]'
|
119
|
+
end
|
120
|
+
engine, root = get_engine(engine, options)
|
121
|
+
component = argv[1]
|
122
|
+
destination = argv[2]
|
123
|
+
if engine.components.key?(component)
|
124
|
+
if options['release'].nil?
|
125
|
+
comp = engine.components[component]
|
126
|
+
else
|
127
|
+
comp = engine.releases[options['release']].components[component]
|
128
|
+
end
|
129
|
+
comp.build(destination)
|
130
|
+
else
|
131
|
+
Simp::Metadata.critical('Unable to build component')
|
132
|
+
exit 5
|
100
133
|
end
|
101
|
-
|
102
|
-
|
103
|
-
|
134
|
+
|
135
|
+
else
|
136
|
+
abort(Simp::Metadata.critical("Unrecognized subcommand '#{subcommand}}'.")[0])
|
104
137
|
end
|
138
|
+
|
139
|
+
engine.save((['simp-metadata', 'component'] + argv).join(' ')) if root
|
140
|
+
rescue RuntimeError => e
|
141
|
+
Simp::Metadata.critical(e.message)
|
142
|
+
exit 5
|
105
143
|
end
|
106
144
|
end
|
107
145
|
end
|
@@ -4,16 +4,15 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Delete < Simp::Metadata::Commands::Base
|
6
6
|
def run(argv, engine = nil)
|
7
|
-
|
8
|
-
|
9
|
-
opts.banner = "Usage: simp-metadata delete <component_name>"
|
7
|
+
options = defaults(argv) do |opts|
|
8
|
+
opts.banner = 'Usage: simp-metadata delete <component_name>'
|
10
9
|
end
|
11
10
|
|
12
11
|
engine, root = get_engine(engine, options)
|
13
12
|
begin
|
14
13
|
engine.releases.delete(argv[0])
|
15
|
-
if
|
16
|
-
engine.save(([
|
14
|
+
if root == true
|
15
|
+
engine.save((['simp-metadata', 'delete'] + argv).join(' '))
|
17
16
|
end
|
18
17
|
rescue RuntimeError => e
|
19
18
|
Simp::Metadata.critical(e.message)
|
@@ -4,14 +4,12 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Pry < 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 pry'
|
10
9
|
end
|
11
10
|
|
12
11
|
engine, root = get_engine(engine, options)
|
13
12
|
require 'pry'
|
14
|
-
binding.pry
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
@@ -4,38 +4,37 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Release < Simp::Metadata::Commands::Base
|
6
6
|
def run(argv, engine = nil)
|
7
|
-
|
8
7
|
options = defaults(argv) do |opts|
|
9
|
-
opts.banner =
|
10
|
-
opts.banner =
|
8
|
+
opts.banner = 'Usage: simp-metadata release <release_name> [components]'
|
9
|
+
opts.banner = ' simp-metadata release diff <release1> <release2>'
|
11
10
|
end
|
12
|
-
|
13
|
-
|
14
11
|
engine, root = get_engine(engine, options)
|
15
12
|
begin
|
16
13
|
section = argv[0]
|
14
|
+
|
17
15
|
case section
|
18
|
-
|
19
|
-
|
16
|
+
when 'components'
|
17
|
+
puts engine.releases[options['release']].components.keys.join("\n")
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
when 'puppetfile'
|
20
|
+
type = argv[1]
|
21
|
+
puts engine.releases[options['release']].puppetfile('type' => type)
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
23
|
+
when 'diff'
|
24
|
+
release1 = argv[1]
|
25
|
+
release2 = argv[2]
|
26
|
+
attribute = argv[3]
|
27
|
+
release1 = engine.releases[release1]
|
28
|
+
release2 = engine.releases[release2]
|
29
|
+
diff = release1.diff(release2, attribute)
|
30
|
+
puts diff.to_yaml
|
31
|
+
else
|
32
|
+
puts 'components:'
|
33
|
+
engine.releases[options['release']].components.keys.each do |line|
|
34
|
+
puts " #{line}"
|
35
|
+
end
|
38
36
|
end
|
37
|
+
|
39
38
|
rescue RuntimeError => e
|
40
39
|
Simp::Metadata.critical(e.message)
|
41
40
|
exit 5
|
@@ -4,12 +4,10 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Releases < 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 releases'
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
11
|
engine, root = get_engine(engine, options)
|
14
12
|
begin
|
15
13
|
puts engine.releases.keys
|
@@ -4,27 +4,24 @@ module Simp
|
|
4
4
|
module Commands
|
5
5
|
class Save < 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 save [options] [message]'
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
11
|
engine, root = get_engine(engine, options)
|
14
|
-
if
|
15
|
-
|
12
|
+
short = if argv.empty?
|
13
|
+
'Auto-saving using simp-metadata'
|
14
|
+
else
|
15
|
+
argv.join(' ')
|
16
|
+
end
|
17
|
+
|
18
|
+
if $commandqueue.nil?
|
19
|
+
engine.save(short)
|
16
20
|
else
|
17
|
-
short = argv.join(" ")
|
18
|
-
end
|
19
|
-
if ($commandqueue != nil)
|
20
21
|
message = []
|
21
|
-
|
22
|
-
message << $commandqueue.pop
|
23
|
-
end
|
22
|
+
message << $commandqueue.pop until $commandqueue.empty?
|
24
23
|
puts message
|
25
24
|
engine.save("#{short}\n\nsimp-metadata log:\n #{message.join("\n ")}")
|
26
|
-
else
|
27
|
-
engine.save(short)
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
@@ -6,30 +6,27 @@ module Simp
|
|
6
6
|
module Commands
|
7
7
|
class Script < Simp::Metadata::Commands::Base
|
8
8
|
def run(argv, engine = nil)
|
9
|
-
|
10
9
|
options = defaults(argv) do |opts|
|
11
|
-
opts.banner =
|
10
|
+
opts.banner = 'Usage: simp-metadata script [options] <filename>'
|
12
11
|
end
|
13
12
|
|
14
|
-
$commandqueue = Queue.new
|
13
|
+
$commandqueue = Queue.new
|
15
14
|
|
16
15
|
engine, root = get_engine(engine, options)
|
17
|
-
|
18
|
-
Simp::Metadata.critical(
|
16
|
+
if argv[0].nil?
|
17
|
+
Simp::Metadata.critical('filename must be specified')
|
19
18
|
exit 3
|
20
19
|
end
|
21
20
|
data = File.read(argv[0])
|
22
21
|
lines = data.split("\n")
|
23
22
|
lines.each do |line|
|
24
|
-
temp_argv = line.split(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
23
|
+
temp_argv = line.split(' ')
|
24
|
+
next if temp_argv.empty?
|
25
|
+
next if temp_argv[0] =~ /^#/
|
26
|
+
$commandqueue.push(line)
|
27
|
+
command = Module.const_get("Simp::Metadata::Commands::#{temp_argv[0].tr('-', '_').capitalize}").new
|
28
|
+
temp_argv.shift
|
29
|
+
command.run(temp_argv, engine)
|
33
30
|
end
|
34
31
|
end
|
35
32
|
end
|