ironfan 4.8.2 → 4.8.3
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.
- data/CHANGELOG.md +6 -0
- data/VERSION +1 -1
- data/ironfan.gemspec +2 -2
- data/lib/chef/knife/cluster_bootstrap.rb +0 -1
- data/lib/chef/knife/cluster_start.rb +1 -1
- data/lib/chef/knife/cluster_stop.rb +1 -1
- data/lib/chef/knife/ironfan_knife_common.rb +5 -6
- data/lib/ironfan/broker/computer.rb +31 -41
- data/lib/ironfan/broker.rb +6 -2
- data/lib/ironfan/provider/ec2/security_group.rb +2 -1
- data/notes/Home.md +5 -0
- data/notes/ec2-pricing_and_capacity.md +25 -19
- data/notes/ec2-pricing_and_capacity.numbers +0 -0
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# v4.8.3
|
2
|
+
* Bogus servers should not be killable (fixes #250)
|
3
|
+
* Style guide corrections ('&&', not 'and'; don't use single-letter variable names)
|
4
|
+
* Also fixed a thing where security groups enumeration would die if a bogus server existed that's bit me before
|
5
|
+
* Reviewed other knife cluster commands and made them not tolerate bogosity either
|
6
|
+
|
1
7
|
# v4.8.2
|
2
8
|
* Launch EBS-optimized boxen on EC2
|
3
9
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.8.
|
1
|
+
4.8.3
|
data/ironfan.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ironfan"
|
8
|
-
s.version = "4.8.
|
8
|
+
s.version = "4.8.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Infochimps"]
|
12
|
-
s.date = "2013-02-
|
12
|
+
s.date = "2013-02-26"
|
13
13
|
s.description = "Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks."
|
14
14
|
s.email = "coders@infochimps.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -62,7 +62,6 @@ class Chef
|
|
62
62
|
ensure_common_environment(target)
|
63
63
|
# Execute across all servers in parallel
|
64
64
|
Ironfan.parallel(target.values) {|computer| run_bootstrap(computer)}
|
65
|
-
# threads = target.servers.map{ |server| Thread.new(server) { |svr| run_bootstrap(svr, svr.public_hostname) } }
|
66
65
|
end
|
67
66
|
|
68
67
|
def confirm_execution(target)
|
@@ -84,19 +84,18 @@ module Ironfan
|
|
84
84
|
#
|
85
85
|
def get_relevant_slice( *predicate )
|
86
86
|
full_target = get_slice( *predicate )
|
87
|
-
display(full_target) do |
|
88
|
-
rel = relevant?(
|
89
|
-
{ :relevant? => (rel ? "[
|
87
|
+
display(full_target) do |mach|
|
88
|
+
rel = relevant?(mach)
|
89
|
+
{ :relevant? => (rel ? "[green]#{rel}[reset]" : '-' ) }
|
90
90
|
end
|
91
|
-
full_target.select{|
|
91
|
+
full_target.select{|mach| relevant?(mach) }
|
92
92
|
end
|
93
93
|
|
94
94
|
# passes target to Broker::Conductor#display, will show headings in server slice
|
95
95
|
# tables based on the --verbose flag
|
96
96
|
def display(target, display_style=nil, &block)
|
97
97
|
display_style ||= (config[:verbosity] == 0 ? :default : :expanded)
|
98
|
-
|
99
|
-
broker.display(target, display_style)
|
98
|
+
broker.display(target, display_style, &block)
|
100
99
|
end
|
101
100
|
|
102
101
|
#
|
@@ -17,11 +17,11 @@ module Ironfan
|
|
17
17
|
super
|
18
18
|
providers[:chef] ||= Ironfan::Provider::ChefServer
|
19
19
|
return unless server
|
20
|
-
providers[:iaas]
|
21
|
-
volumes
|
22
|
-
volumes
|
23
|
-
volumes.each
|
24
|
-
rescue StandardError => err ; err.polish("#{self.class} on #{args}'") rescue nil ; raise
|
20
|
+
providers[:iaas] = server.selected_cloud.provider
|
21
|
+
volumes = server.volumes.values
|
22
|
+
volumes += server.implied_volumes
|
23
|
+
volumes.each{|vol| self.drive vol.name, :volume => vol }
|
24
|
+
rescue StandardError => err ; err.polish("#{self.class} on '#{args.inspect}'") rescue nil ; raise
|
25
25
|
end
|
26
26
|
|
27
27
|
def name
|
@@ -38,11 +38,11 @@ module Ironfan
|
|
38
38
|
res.expected_ids(self).each do |id|
|
39
39
|
next unless res.recall? id
|
40
40
|
|
41
|
-
recalled =
|
42
|
-
recalled.users <<
|
41
|
+
recalled = res.recall id
|
42
|
+
recalled.users << self
|
43
43
|
|
44
|
-
target
|
45
|
-
target +=
|
44
|
+
target = res.resource_type.to_s
|
45
|
+
target += "__#{id}" if res.multiple?
|
46
46
|
self[target.to_sym] = recalled
|
47
47
|
|
48
48
|
recalled.on_correlate(self)
|
@@ -130,14 +130,6 @@ module Ironfan
|
|
130
130
|
@chef_client_script_content = Ironfan.safely{ File.read(script_filename) }
|
131
131
|
end
|
132
132
|
|
133
|
-
# def ensure_resource(type)
|
134
|
-
# if type.multiple?
|
135
|
-
# existing = resources[type.resource_id]
|
136
|
-
# else
|
137
|
-
#
|
138
|
-
# end
|
139
|
-
# end
|
140
|
-
|
141
133
|
#
|
142
134
|
# Display
|
143
135
|
#
|
@@ -200,7 +192,7 @@ module Ironfan
|
|
200
192
|
self[:machine] = value
|
201
193
|
end
|
202
194
|
def dns_name ; machine? ? machine.dns_name : nil ; end
|
203
|
-
def bootstrap_distro ; (server && server.selected_cloud) ? server.selected_cloud.bootstrap_distro
|
195
|
+
def bootstrap_distro ; (server && server.selected_cloud) ? server.selected_cloud.bootstrap_distro : nil ; end
|
204
196
|
|
205
197
|
def keypair
|
206
198
|
resources[:keypair]
|
@@ -225,16 +217,16 @@ module Ironfan
|
|
225
217
|
not client.nil?
|
226
218
|
end
|
227
219
|
def created?
|
228
|
-
machine?
|
220
|
+
machine? && machine.created?
|
229
221
|
end
|
230
222
|
def machine?
|
231
223
|
not machine.nil?
|
232
224
|
end
|
233
225
|
def killable?
|
234
|
-
not permanent?
|
226
|
+
(not bogus?) && (not permanent?) && (node? || client? || created?)
|
235
227
|
end
|
236
228
|
def launchable?
|
237
|
-
not bogus?
|
229
|
+
(not bogus?) && (not created?)
|
238
230
|
end
|
239
231
|
def node?
|
240
232
|
not node.nil?
|
@@ -245,13 +237,13 @@ module Ironfan
|
|
245
237
|
[true, :true, 'true'].include? server.selected_cloud.permanent
|
246
238
|
end
|
247
239
|
def running?
|
248
|
-
machine?
|
240
|
+
machine? && machine.running?
|
249
241
|
end
|
250
242
|
def server?
|
251
243
|
not server.nil?
|
252
244
|
end
|
253
245
|
def stopped?
|
254
|
-
machine?
|
246
|
+
machine? && machine.stopped?
|
255
247
|
end
|
256
248
|
|
257
249
|
# @return [Boolean] true if machine is likely to be reachable by ssh
|
@@ -295,15 +287,15 @@ module Ironfan
|
|
295
287
|
|
296
288
|
def validate
|
297
289
|
computers = self
|
298
|
-
values.each{|c|
|
290
|
+
values.each{|c| c.validate }
|
299
291
|
values.map {|c| c.providers.values}.flatten.uniq.each {|p| p.validate computers }
|
300
292
|
end
|
301
293
|
|
302
294
|
def group_action(verb)
|
303
295
|
computers = self
|
304
|
-
provider_keys = values.map
|
305
|
-
providers = provider_keys.map
|
306
|
-
providers.each
|
296
|
+
provider_keys = values.map{|c| c.chosen_providers({ :providers => :iaas })}.flatten.uniq
|
297
|
+
providers = provider_keys.map{|pk| values.map{|c| c.providers[pk] } }.flatten.compact.uniq
|
298
|
+
providers.each{|p| p.send(verb, computers) }
|
307
299
|
end
|
308
300
|
|
309
301
|
def prepare
|
@@ -318,19 +310,19 @@ module Ironfan
|
|
318
310
|
# Manipulation
|
319
311
|
#
|
320
312
|
def kill(options={})
|
321
|
-
Ironfan.parallel(values)
|
313
|
+
Ironfan.parallel(values){|cc| cc.kill(options) }
|
322
314
|
end
|
323
315
|
def launch
|
324
|
-
Ironfan.parallel(values)
|
316
|
+
Ironfan.parallel(values){|cc| cc.launch }
|
325
317
|
end
|
326
318
|
def save(options={})
|
327
|
-
Ironfan.parallel(values)
|
319
|
+
Ironfan.parallel(values){|cc| cc.save(options) }
|
328
320
|
end
|
329
321
|
def start
|
330
|
-
Ironfan.parallel(values)
|
322
|
+
Ironfan.parallel(values){|cc| cc.start }
|
331
323
|
end
|
332
324
|
def stop
|
333
|
-
Ironfan.parallel(values)
|
325
|
+
Ironfan.parallel(values){|cc| cc.stop }
|
334
326
|
end
|
335
327
|
|
336
328
|
def environments
|
@@ -351,7 +343,7 @@ module Ironfan
|
|
351
343
|
# Return the selection inside another Computers collection
|
352
344
|
def select(&block)
|
353
345
|
result = empty_copy
|
354
|
-
values.select(&block).each{|
|
346
|
+
values.select(&block).each{|mach| result << mach}
|
355
347
|
result
|
356
348
|
end
|
357
349
|
|
@@ -363,16 +355,14 @@ module Ironfan
|
|
363
355
|
|
364
356
|
# Find all selected computers, as well as any bogus computers from discovery
|
365
357
|
def slice(facet_name=nil, slice_indexes=nil)
|
366
|
-
return self if (facet_name.nil?
|
367
|
-
result = empty_copy
|
358
|
+
return self if (facet_name.nil? && slice_indexes.nil?)
|
368
359
|
slice_array = build_slice_array(slice_indexes)
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
360
|
+
select do |mach|
|
361
|
+
mach.bogus? or (
|
362
|
+
# facet match, and index match (or no indexes specified)
|
363
|
+
(mach.server.facet_name == facet_name) &&
|
364
|
+
(slice_array.include?(mach.server.index) || slice_indexes.nil?))
|
374
365
|
end
|
375
|
-
result
|
376
366
|
end
|
377
367
|
|
378
368
|
def build_slice_array(slice_indexes)
|
data/lib/ironfan/broker.rb
CHANGED
@@ -31,11 +31,15 @@ module Ironfan
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def display(computers,style)
|
34
|
-
defined_data = computers.map
|
34
|
+
defined_data = computers.map do |mach|
|
35
|
+
hsh = mach.to_display(style)
|
36
|
+
hsh.merge!(yield(mach)) if block_given?
|
37
|
+
hsh
|
38
|
+
end
|
35
39
|
if defined_data.empty?
|
36
40
|
ui.info "Nothing to report"
|
37
41
|
else
|
38
|
-
headings = defined_data.map{|
|
42
|
+
headings = defined_data.map{|hsh| hsh.keys }.flatten.uniq
|
39
43
|
Formatador.display_compact_table(defined_data, headings.to_a)
|
40
44
|
end
|
41
45
|
end
|
@@ -19,6 +19,7 @@ module Ironfan
|
|
19
19
|
def self.multiple?() true; end
|
20
20
|
def self.resource_type() :security_group; end
|
21
21
|
def self.expected_ids(computer)
|
22
|
+
return unless computer.server
|
22
23
|
ec2 = computer.server.cloud(:ec2)
|
23
24
|
ec2.security_groups.keys.map { |name| group_name_with_vpc(name,ec2.vpc) }.uniq
|
24
25
|
end
|
@@ -73,7 +74,7 @@ module Ironfan
|
|
73
74
|
# First, deduce the list of all groups to which at least one instance belongs
|
74
75
|
# We'll use this later to decide whether to create groups, or authorize access,
|
75
76
|
# using a VPC security group or an EC2 security group.
|
76
|
-
groups_that_should_exist = computers.map
|
77
|
+
groups_that_should_exist = computers.map{|comp| expected_ids(comp) }.flatten.compact.sort.uniq
|
77
78
|
groups_to_create << groups_that_should_exist
|
78
79
|
|
79
80
|
computers.select { |computer| Ec2.applicable computer }.each do |computer|
|
data/notes/Home.md
CHANGED
@@ -44,6 +44,11 @@ Ironfan consists of the following toolset:
|
|
44
44
|
* [ironfan issues](https://github.com/infochimps-labs/ironfan/issues): bugs, questions and feature requests for *any* part of the Ironfan toolset.
|
45
45
|
* [ironfan gem docs](http://rdoc.info/gems/ironfan): rdoc docs for Ironfan
|
46
46
|
|
47
|
+
|
48
|
+
<a name="documentation"></a>
|
49
|
+
### Documentation
|
50
|
+
* [EC2 Instance Pricing and Capacity Reference](https://github.com/infochimps-labs/ironfan/wiki/ec2-pricing_and_capacity) * [EC2 Pricing and Capacity Spreadsheet](https://github.com/infochimps-labs/ironfan/wiki/ec2-pricing_and_capacity.numbers) -- source data, and calculations for Hadoop tunables
|
51
|
+
|
47
52
|
__________________________________________________________________________
|
48
53
|
__________________________________________________________________________
|
49
54
|
__________________________________________________________________________
|
@@ -1,25 +1,31 @@
|
|
1
1
|
## Compute Costs
|
2
2
|
|
3
3
|
|
4
|
-
code $/mo $/day $/hr Mem/$ CPU/$ mem cpu cores cpcore storage disks
|
5
|
-
t1.micro
|
6
|
-
m1.small
|
7
|
-
m1.medium
|
8
|
-
c1.medium
|
9
|
-
m1.large
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
4
|
+
code $/mo $/day $/hr Mem/$ CPU/$ mem cpu cores cpcore storage disks ebs-opt IO
|
5
|
+
t1.micro 15 0.48 .02 31 13 .61 0.25 1 0.25 - 0 Lo
|
6
|
+
m1.small 44 1.44 .06 28 17 1.7 1 1 1 160 1 Med
|
7
|
+
m1.medium 88 2.88 .12 31 17 3.75 2 2 1 410 1 Med
|
8
|
+
c1.medium 106 3.48 .15 12 34 1.7 5 2 2.5 350 1 Med
|
9
|
+
m1.large 175 5.76 .24 31 17 7.5 4 2 2 850 2 Hi
|
10
|
+
m1.lg+ebs 194 6.36 .27 28 15 7.5 4 2 2 850 2 500 Hi+EBS
|
11
|
+
m2.xlarge 300 9.84 .41 42 16 17.1 6.5 2 3.25 420 1 Med
|
12
|
+
m1.xlarge 351 11.52 .48 31 17 15. 8 4 2 1690 4 Hi
|
13
|
+
m3.xlarge 365 12.00 .50 30 26 15. 13 4 3.25 - 0 Med
|
14
|
+
m1.xl+ebs 387 12.72 .53 28 15 15. 8 4 2 1690 4 1000 Hi+EBS
|
15
|
+
c1.xlarge 424 13.92 .58 12 34 7. 20 8 2.5 1690 4 Hi
|
16
|
+
m2.2xlarge 599 19.68 .82 42 16 34.2 13 4 3.25 850 2 Hi
|
17
|
+
m3.2xlarge 731 24.00 1.00 30 26 30. 26 8 3.25 - 0 Hi
|
18
|
+
cc1.4xlarge 950 31.20 1.30 18 26 23. 33.5 8 4.2 1690 4 10gb
|
19
|
+
m2.4xlarge 1198 39.36 1.64 42 16 68.4 26 8 3.25 1690 2 Hi
|
20
|
+
m2.4xl+ebs 1235 40.56 1.69 40 15 68.4 26 8 3.25 1690 2 1000 Hi+EBS
|
21
|
+
cg1.4xlarge 1534 50.40 2.10 10 16 22. 33.5 8 4.2 1690 4 10gb
|
22
|
+
cc2.8xlarge 1753 57.60 2.40 25 37 60.5 88 16 5.5 3370 2 10gb
|
23
|
+
hi1.4xlarge 2265 74.40 3.10 20 11 60.5 35.2 16 2.2 2048 ssd 2 10gb
|
24
|
+
cr1.8xlarge 2557 84.00 3.50 70 25 244. 88 16 5.5 240 ssd 2 10gb
|
25
|
+
hs1.8xlarge 3361 110.40 4.60 25 8 117. 35 16 2.2 49152 24 10gb
|
26
|
+
|
27
|
+
Prices are for standard (non-reserved) instances. EBS-optimized instances are listed on their own line.
|
28
|
+
|
23
29
|
|
24
30
|
## Storage Costs
|
25
31
|
|
Binary file
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ironfan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 4.8.
|
5
|
+
version: 4.8.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Infochimps
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2013-02-
|
13
|
+
date: 2013-02-26 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: chef
|
@@ -284,7 +284,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
284
284
|
requirements:
|
285
285
|
- - ">="
|
286
286
|
- !ruby/object:Gem::Version
|
287
|
-
hash:
|
287
|
+
hash: 4061434417282222505
|
288
288
|
segments:
|
289
289
|
- 0
|
290
290
|
version: "0"
|