ironfan 4.5.2 → 4.6.0
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 +4 -0
- data/Gemfile +1 -1
- data/VERSION +1 -1
- data/config/knife.bash +5 -0
- data/ironfan.gemspec +5 -5
- data/lib/chef/knife/cluster_launch.rb +2 -3
- data/lib/ironfan/dsl/ec2.rb +6 -4
- data/lib/ironfan/provider/ec2/elastic_ip.rb +57 -0
- data/lib/ironfan/provider/ec2/machine.rb +4 -5
- data/lib/ironfan/provider/ec2.rb +1 -1
- data/lib/ironfan/requirements.rb +1 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# v4.6.0
|
2
|
+
* Elastic IP attachment and SSH support (changes ec2.public_ip to ec2.elastic_ip for clarity - thanks @schade)
|
3
|
+
* Expanded development dependencies, to allow avoiding bundler verbosity bug by rolling back to older version
|
4
|
+
|
1
5
|
# v4.5.2:
|
2
6
|
* 'knife cluster launch --bootstrap' should ensure that Chef::Config[:environment] is set, just as 'knife cluster bootstrap' does
|
3
7
|
* Cleaning up knife commands to skip bogus servers (fixes #213)
|
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.6.0
|
data/config/knife.bash
CHANGED
@@ -129,6 +129,11 @@ _knife() {
|
|
129
129
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
130
130
|
return 0
|
131
131
|
;;
|
132
|
+
*knife_cluster_launch|*knife_cluster_show|*knife_cluster_edit)
|
133
|
+
_chef_completion_cache -c ${words[0]}_cluster "${words[0]} cluster list|awk '{ print $1 }'"
|
134
|
+
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
135
|
+
return 0
|
136
|
+
;;
|
132
137
|
*knife_environment_show|*knife_environment_edit|*knife_environment_delete)
|
133
138
|
_chef_completion_cache -c ${words[0]}_environments "${words[0]} environment list|${SED} -r -e 's/[\"\ ,]//g' -e '/[^0-9A-Za-z._-]+/d'"
|
134
139
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
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
|
+
s.version = "4.6.0"
|
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 = "2012-
|
12
|
+
s.date = "2012-12-10"
|
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 = [
|
@@ -159,7 +159,7 @@ Gem::Specification.new do |s|
|
|
159
159
|
s.add_runtime_dependency(%q<fog>, ["~> 1.2"])
|
160
160
|
s.add_runtime_dependency(%q<formatador>, ["~> 0.2"])
|
161
161
|
s.add_runtime_dependency(%q<gorillib>, ["~> 0.4.2"])
|
162
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.
|
162
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
163
163
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
164
164
|
s.add_development_dependency(%q<rspec>, ["~> 2.8"])
|
165
165
|
s.add_development_dependency(%q<yard>, [">= 0.7"])
|
@@ -171,7 +171,7 @@ Gem::Specification.new do |s|
|
|
171
171
|
s.add_dependency(%q<fog>, ["~> 1.2"])
|
172
172
|
s.add_dependency(%q<formatador>, ["~> 0.2"])
|
173
173
|
s.add_dependency(%q<gorillib>, ["~> 0.4.2"])
|
174
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
174
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
175
175
|
s.add_dependency(%q<rake>, [">= 0"])
|
176
176
|
s.add_dependency(%q<rspec>, ["~> 2.8"])
|
177
177
|
s.add_dependency(%q<yard>, [">= 0.7"])
|
@@ -184,7 +184,7 @@ Gem::Specification.new do |s|
|
|
184
184
|
s.add_dependency(%q<fog>, ["~> 1.2"])
|
185
185
|
s.add_dependency(%q<formatador>, ["~> 0.2"])
|
186
186
|
s.add_dependency(%q<gorillib>, ["~> 0.4.2"])
|
187
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
187
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
188
188
|
s.add_dependency(%q<rake>, [">= 0"])
|
189
189
|
s.add_dependency(%q<rspec>, ["~> 2.8"])
|
190
190
|
s.add_dependency(%q<yard>, [">= 0.7"])
|
@@ -87,7 +87,6 @@ class Chef
|
|
87
87
|
section("Launching computers", :green)
|
88
88
|
display(target)
|
89
89
|
launched = target.launch
|
90
|
-
|
91
90
|
# As each server finishes, configure it
|
92
91
|
Ironfan.parallel(launched) do |computer|
|
93
92
|
if (computer.is_a?(Exception)) then ui.warn "Error launching #{computer.inspect}; skipping after-launch tasks."; next; end
|
@@ -107,7 +106,7 @@ class Chef
|
|
107
106
|
Ironfan.step(computer.name, 'waiting for ready', :white)
|
108
107
|
# Wait for machine creation on amazon side
|
109
108
|
computer.machine.wait_for{ ready? }
|
110
|
-
|
109
|
+
|
111
110
|
# Try SSH
|
112
111
|
unless config[:dry_run]
|
113
112
|
Ironfan.step(computer.name, 'trying ssh', :white)
|
@@ -116,7 +115,7 @@ class Chef
|
|
116
115
|
|
117
116
|
Ironfan.step(computer.name, 'final provisioning', :white)
|
118
117
|
computer.save
|
119
|
-
|
118
|
+
|
120
119
|
# Run Bootstrap
|
121
120
|
if config[:bootstrap]
|
122
121
|
Chef::Log.warn "UNTESTED --bootstrap"
|
data/lib/ironfan/dsl/ec2.rb
CHANGED
@@ -25,7 +25,7 @@ module Ironfan
|
|
25
25
|
magic :permanent, :boolean, :default => false
|
26
26
|
magic :placement_group, String
|
27
27
|
magic :provider, Whatever, :default => Ironfan::Provider::Ec2
|
28
|
-
magic :
|
28
|
+
magic :elastic_ip, String
|
29
29
|
magic :region, String, :default => ->{ default_region }
|
30
30
|
collection :security_groups, Ironfan::Dsl::Ec2::SecurityGroup, :key_method => :name
|
31
31
|
magic :ssh_user, String, :default => ->{ image_info[:ssh_user] }
|
@@ -34,6 +34,8 @@ module Ironfan
|
|
34
34
|
magic :validation_key, String, :default => ->{ IO.read(Chef::Config.validation_key) rescue '' }
|
35
35
|
magic :vpc, String
|
36
36
|
|
37
|
+
def domain; vpc.nil? ? 'standard' : 'vpc'; end
|
38
|
+
|
37
39
|
def image_info
|
38
40
|
bit_str = "#{self.bits.to_i}-bit" # correct for legacy image info.
|
39
41
|
keys = [region, bit_str, backing, image_name]
|
@@ -61,7 +63,7 @@ module Ironfan
|
|
61
63
|
values["AZ"] = default_availability_zone
|
62
64
|
return values if style == :default
|
63
65
|
|
64
|
-
values["
|
66
|
+
values["Public IP"] = elastic_ip if elastic_ip
|
65
67
|
values
|
66
68
|
end
|
67
69
|
|
@@ -277,8 +279,8 @@ Chef::Config[:ec2_flavor_info].merge!({
|
|
277
279
|
# 32-or-64: m1.small, m1.medium, t1.micro, c1.medium
|
278
280
|
't1.micro' => { :price => 0.02, :bits => 64, :ram => 686, :cores => 1, :core_size => 0.25, :inst_disks => 0, :inst_disk_size => 0, :ephemeral_volumes => 0 },
|
279
281
|
'm1.small' => { :price => 0.08, :bits => 64, :ram => 1740, :cores => 1, :core_size => 1, :inst_disks => 1, :inst_disk_size => 160, :ephemeral_volumes => 1 },
|
280
|
-
'm1.medium' => { :price => 0.165, :bits =>
|
281
|
-
'c1.medium' => { :price => 0.17, :bits =>
|
282
|
+
'm1.medium' => { :price => 0.165, :bits => 64, :ram => 3840, :cores => 2, :core_size => 1, :inst_disks => 1, :inst_disk_size => 410, :ephemeral_volumes => 1 },
|
283
|
+
'c1.medium' => { :price => 0.17, :bits => 64, :ram => 1740, :cores => 2, :core_size => 2.5, :inst_disks => 1, :inst_disk_size => 350, :ephemeral_volumes => 1 },
|
282
284
|
#
|
283
285
|
'm1.large' => { :price => 0.32, :bits => 64, :ram => 7680, :cores => 2, :core_size => 2, :inst_disks => 2, :inst_disk_size => 850, :ephemeral_volumes => 2 },
|
284
286
|
'm2.xlarge' => { :price => 0.45, :bits => 64, :ram => 18124, :cores => 2, :core_size => 3.25, :inst_disks => 1, :inst_disk_size => 420, :ephemeral_volumes => 1 },
|
@@ -3,6 +3,63 @@ module Ironfan
|
|
3
3
|
class Ec2
|
4
4
|
|
5
5
|
class ElasticIp < Ironfan::Provider::Resource
|
6
|
+
delegate :addresses, :associate_address, :allocation_id,
|
7
|
+
:allocation_id=, :destroy, :domain, :domain=,
|
8
|
+
:describe_addresses, :disassociate_address, :domain, :id,
|
9
|
+
:network_interface_id, :network_interface_id=, :public_ip,
|
10
|
+
:public_ip=, :public_ip_address, :save, :server=, :server, :server_id,
|
11
|
+
:server_id=,
|
12
|
+
:to => :adaptee
|
13
|
+
|
14
|
+
def self.shared?() true; end
|
15
|
+
def self.multiple?() false; end
|
16
|
+
def self.resource_type() :elastic_ip; end
|
17
|
+
def self.expected_ids(computer) [ computer.server.ec2.elastic_ip ]; end
|
18
|
+
def name() adaptee.public_ip ; end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Discovery
|
22
|
+
#
|
23
|
+
|
24
|
+
def self.load!(cluster=nil)
|
25
|
+
Ec2.connection.addresses.each do |eip|
|
26
|
+
register eip
|
27
|
+
Chef::Log.debug("Loaded #{eip}")
|
28
|
+
|
29
|
+
# The rest of this definition shows relevant information when -VV
|
30
|
+
# is passed to knife and aids in troubleshooting any refusal to
|
31
|
+
# attach Elastic IPs
|
32
|
+
Chef::Log.debug( "AWS domain: #{eip.domain}" )
|
33
|
+
Chef::Log.debug( "available ip match: #{eip.public_ip}" )
|
34
|
+
Chef::Log.debug( "----------------------" )
|
35
|
+
end
|
36
|
+
|
37
|
+
cluster.servers.each do |s|
|
38
|
+
next if s.ec2.elastic_ip.nil?
|
39
|
+
if recall? s.ec2.elastic_ip
|
40
|
+
Chef::Log.debug( "Cluster elastic_ip matches #{s.ec2.elastic_ip}" )
|
41
|
+
else
|
42
|
+
Chef::Log.debug( "No matching Elastic IP for #{s.ec2.elastic_ip}" )
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Manipulation
|
50
|
+
#
|
51
|
+
|
52
|
+
def self.save!(computer)
|
53
|
+
return unless computer.created?
|
54
|
+
elastic_ip = computer.server.ec2.elastic_ip
|
55
|
+
Ironfan.step(computer.name, "associating Elastic IP #{elastic_ip}", :blue)
|
56
|
+
Ironfan.unless_dry_run do
|
57
|
+
Ironfan.safely do
|
58
|
+
Ec2.connection.associate_address( computer.machine.id, elastic_ip )
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
6
63
|
end
|
7
64
|
end
|
8
65
|
end
|
@@ -71,8 +71,8 @@ module Ironfan
|
|
71
71
|
def to_display(style,values={})
|
72
72
|
# style == :minimal
|
73
73
|
values["State"] = state.to_sym
|
74
|
-
values["MachineID"] =
|
75
|
-
values["Public IP"] = public_ip_address
|
74
|
+
values["MachineID"] = id
|
75
|
+
values["Public IP"] = public_ip_address
|
76
76
|
values["Private IP"] = private_ip_address
|
77
77
|
values["Created On"] = created_at.to_date
|
78
78
|
return values if style == :minimal
|
@@ -163,7 +163,7 @@ module Ironfan
|
|
163
163
|
|
164
164
|
fog_server.wait_for { ready? }
|
165
165
|
end
|
166
|
-
|
166
|
+
|
167
167
|
# tag the computer correctly
|
168
168
|
tags = {
|
169
169
|
'cluster' => computer.server.cluster_name,
|
@@ -224,7 +224,6 @@ module Ironfan
|
|
224
224
|
:client_key => computer.private_key
|
225
225
|
}
|
226
226
|
|
227
|
-
|
228
227
|
# Fog does not actually create tags when it creates a server;
|
229
228
|
# they and permanence are applied during sync
|
230
229
|
description = {
|
@@ -236,7 +235,7 @@ module Ironfan
|
|
236
235
|
:user_data => JSON.pretty_generate(user_data_hsh),
|
237
236
|
:block_device_mapping => block_device_mapping(computer),
|
238
237
|
:availability_zone => cloud.default_availability_zone,
|
239
|
-
:monitoring => cloud.monitoring
|
238
|
+
:monitoring => cloud.monitoring
|
240
239
|
}
|
241
240
|
|
242
241
|
# VPC security_groups can only be addressed by id (not name)
|
data/lib/ironfan/provider/ec2.rb
CHANGED
@@ -5,7 +5,7 @@ module Ironfan
|
|
5
5
|
self.handle = :ec2
|
6
6
|
|
7
7
|
def self.resources
|
8
|
-
[ Machine, EbsVolume, Keypair, SecurityGroup, IamServerCertificate, ElasticLoadBalancer ]
|
8
|
+
[ Machine, ElasticIp, EbsVolume, Keypair, SecurityGroup, IamServerCertificate, ElasticLoadBalancer ]
|
9
9
|
end
|
10
10
|
|
11
11
|
#
|
data/lib/ironfan/requirements.rb
CHANGED
@@ -35,6 +35,7 @@ require 'ironfan/provider/ec2/machine'
|
|
35
35
|
require 'ironfan/provider/ec2/keypair'
|
36
36
|
require 'ironfan/provider/ec2/placement_group'
|
37
37
|
require 'ironfan/provider/ec2/security_group'
|
38
|
+
require 'ironfan/provider/ec2/elastic_ip'
|
38
39
|
require 'ironfan/provider/ec2/elastic_load_balancer'
|
39
40
|
require 'ironfan/provider/ec2/iam_server_certificate'
|
40
41
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ironfan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 4.
|
5
|
+
version: 4.6.0
|
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: 2012-
|
13
|
+
date: 2012-12-10 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: chef
|
@@ -63,7 +63,7 @@ dependencies:
|
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: "1.
|
66
|
+
version: "1.0"
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
69
|
version_requirements: *id005
|
@@ -282,7 +282,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
282
282
|
requirements:
|
283
283
|
- - ">="
|
284
284
|
- !ruby/object:Gem::Version
|
285
|
-
hash:
|
285
|
+
hash: 852641782285257729
|
286
286
|
segments:
|
287
287
|
- 0
|
288
288
|
version: "0"
|