lachlan-sprinkle 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sprinkle/package.rb +47 -36
- data/lib/sprinkle/policy.rb +10 -25
- data/lib/sprinkle/verify.rb +1 -1
- data/lib/sprinkle/version.rb +1 -1
- data/spec/sprinkle/verify_spec.rb +1 -1
- data/sprinkle.gemspec +2 -2
- metadata +2 -2
data/lib/sprinkle/package.rb
CHANGED
@@ -96,17 +96,34 @@ module Sprinkle
|
|
96
96
|
|
97
97
|
def package(name, metadata = {}, &block)
|
98
98
|
package = Package.new(name, metadata, &block)
|
99
|
-
PACKAGES[name]
|
100
|
-
|
101
|
-
if package.provides
|
102
|
-
(PACKAGES[package.provides] ||= []) << package
|
103
|
-
end
|
104
|
-
|
99
|
+
(PACKAGES[name] ||= []) << package
|
100
|
+
(PACKAGES[package.provides] ||= []) << package if package.provides
|
105
101
|
package
|
106
102
|
end
|
103
|
+
|
104
|
+
def find(name)
|
105
|
+
packages = PACKAGES[name]
|
106
|
+
if packages and packages.length > 1
|
107
|
+
selected = []
|
108
|
+
choose do |menu|
|
109
|
+
menu.header = "\nMultiple choices exist for package #{name}"
|
110
|
+
packages.sort!.each do |package|
|
111
|
+
menu.choice("#{package.name}#{' (' + package.version + ')' if package.version}") do
|
112
|
+
selected << package
|
113
|
+
end
|
114
|
+
end
|
115
|
+
menu.choice("all") do
|
116
|
+
selected = packages
|
117
|
+
end
|
118
|
+
end
|
119
|
+
packages = selected
|
120
|
+
end
|
121
|
+
packages
|
122
|
+
end
|
107
123
|
|
108
124
|
class Package #:nodoc:
|
109
125
|
include ArbitraryOptions
|
126
|
+
include Comparable
|
110
127
|
attr_accessor :name, :provides, :installer, :dependencies, :recommends, :verifications
|
111
128
|
|
112
129
|
def initialize(name, metadata = {}, &block)
|
@@ -185,7 +202,7 @@ module Sprinkle
|
|
185
202
|
def process(deployment, roles)
|
186
203
|
return if meta_package?
|
187
204
|
|
188
|
-
logger.info "\n#{self.
|
205
|
+
logger.info "\n#{self.to_s}"
|
189
206
|
# Run a pre-test to see if the software is already installed. If so,
|
190
207
|
# we can skip it, unless we have the force option turned on!
|
191
208
|
unless @verifications.empty? || Sprinkle::OPTIONS[:force]
|
@@ -233,45 +250,39 @@ module Sprinkle
|
|
233
250
|
def tree(depth = 1, &block)
|
234
251
|
packages = []
|
235
252
|
|
236
|
-
@recommends.each do |
|
237
|
-
|
238
|
-
next unless
|
239
|
-
|
240
|
-
|
253
|
+
@recommends.each do |name|
|
254
|
+
list = find(name)
|
255
|
+
next unless list # skip missing recommended packages as they can be optional
|
256
|
+
list.each { |package|
|
257
|
+
block.call(self, package, depth) if block
|
258
|
+
packages << package.tree(depth + 1, &block)
|
259
|
+
}
|
241
260
|
end
|
242
261
|
|
243
|
-
@dependencies.each do |
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
262
|
+
@dependencies.each do |name|
|
263
|
+
list = find(name)
|
264
|
+
raise "Package definition not found: #{name}" unless list
|
265
|
+
list.each { |package|
|
266
|
+
block.call(self, package, depth) if block
|
267
|
+
packages << package.tree(depth + 1, &block)
|
268
|
+
}
|
250
269
|
end
|
251
270
|
|
252
271
|
packages << self
|
253
272
|
end
|
254
273
|
|
255
|
-
def to_s
|
274
|
+
def to_s
|
275
|
+
s = @name.to_s
|
276
|
+
s << " (#{@version.to_s})" if @version
|
277
|
+
s
|
278
|
+
end
|
279
|
+
|
280
|
+
def <=>(other)
|
281
|
+
self.to_s <=> other.to_s
|
282
|
+
end
|
256
283
|
|
257
284
|
private
|
258
285
|
|
259
|
-
def select_package(name, packages)
|
260
|
-
if packages.size <= 1
|
261
|
-
package = packages.first
|
262
|
-
else
|
263
|
-
package = choose do |menu|
|
264
|
-
menu.prompt = "Multiple choices exist for virtual package #{name}"
|
265
|
-
menu.choices *packages.collect(&:to_s)
|
266
|
-
end
|
267
|
-
package = Sprinkle::Package::PACKAGES[package]
|
268
|
-
end
|
269
|
-
|
270
|
-
cloud_info "Selecting #{package.to_s} for virtual package #{name}"
|
271
|
-
|
272
|
-
package
|
273
|
-
end
|
274
|
-
|
275
286
|
def meta_package?
|
276
287
|
@installer == nil
|
277
288
|
end
|
data/lib/sprinkle/policy.rb
CHANGED
@@ -76,16 +76,17 @@ module Sprinkle
|
|
76
76
|
|
77
77
|
@packages.each do |p|
|
78
78
|
cloud_info "\nPolicy #{@name} requires package #{p}"
|
79
|
+
|
80
|
+
list = Sprinkle::Package.find(p)
|
81
|
+
raise "Package definition not found: #{p}" unless list
|
79
82
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
tree = package.tree do |parent, child, depth|
|
85
|
-
indent = "\t" * depth; cloud_info "#{indent}Package #{parent.name} requires #{child.name}"
|
86
|
-
end
|
83
|
+
list.each { |package|
|
84
|
+
tree = package.tree do |parent, child, depth|
|
85
|
+
indent = "\t" * depth; cloud_info "#{indent}Package #{parent.to_s} requires #{child.to_s}"
|
86
|
+
end
|
87
87
|
|
88
|
-
|
88
|
+
all << tree
|
89
|
+
}
|
89
90
|
end
|
90
91
|
|
91
92
|
normalize(all) do |package|
|
@@ -99,25 +100,9 @@ module Sprinkle
|
|
99
100
|
logger.info(message) if Sprinkle::OPTIONS[:cloud] or logger.debug?
|
100
101
|
end
|
101
102
|
|
102
|
-
def select_package(name, packages)
|
103
|
-
if packages.size <= 1
|
104
|
-
package = packages.first
|
105
|
-
else
|
106
|
-
package = choose do |menu|
|
107
|
-
menu.prompt = "Multiple choices exist for virtual package #{name}"
|
108
|
-
menu.choices *packages.collect(&:to_s)
|
109
|
-
end
|
110
|
-
package = Sprinkle::Package::PACKAGES[package]
|
111
|
-
end
|
112
|
-
|
113
|
-
cloud_info "Selecting #{package.to_s} for virtual package #{name}"
|
114
|
-
|
115
|
-
package
|
116
|
-
end
|
117
|
-
|
118
103
|
def normalize(all, &block)
|
119
104
|
all = all.flatten.uniq
|
120
|
-
cloud_info "\n--> Normalized installation order for all packages: #{all.
|
105
|
+
cloud_info "\n--> Normalized installation order for all packages: #{all.map(&:to_s).join(', ')}"
|
121
106
|
all.each &block
|
122
107
|
end
|
123
108
|
end
|
data/lib/sprinkle/verify.rb
CHANGED
@@ -101,7 +101,7 @@ module Sprinkle
|
|
101
101
|
attr_accessor :package, :commands
|
102
102
|
|
103
103
|
def initialize(package, commands)
|
104
|
-
super("Verifying #{package.name} failed: #{commands.join(RUBY_PLATFORM =~ /win32/ ? ' & ' : '; ')}")
|
104
|
+
super("Verifying #{package.name} failed: #{Array(commands).join(RUBY_PLATFORM =~ /win32/ ? ' & ' : '; ')}")
|
105
105
|
|
106
106
|
@package = package
|
107
107
|
@commands = commands
|
data/lib/sprinkle/version.rb
CHANGED
@@ -140,7 +140,7 @@ describe Sprinkle::Verify do
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it 'should print the install sequence to the console' do
|
143
|
-
@verification.should_receive(:logger).
|
143
|
+
@verification.should_receive(:logger).once.and_return(@logger)
|
144
144
|
end
|
145
145
|
|
146
146
|
after do
|
data/sprinkle.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{sprinkle}
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.7"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Marcus Crafter", "Mitchell Hashimoto"]
|
7
|
-
s.date = %q{2009-03-
|
7
|
+
s.date = %q{2009-03-30}
|
8
8
|
s.default_executable = %q{sprinkle}
|
9
9
|
s.description = %q{Ruby DSL based software provisioning tool}
|
10
10
|
s.email = ["crafterm@redartisan.com", "mitchell.hashimoto@citrusbyte.com"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lachlan-sprinkle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcus Crafter
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-03-
|
13
|
+
date: 2009-03-30 00:00:00 -07:00
|
14
14
|
default_executable: sprinkle
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|