sml-rubber 0.9.11 → 0.9.13
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +0 -1
- data/VERSION +1 -1
- data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +1 -1
- data/lib/rubber/instance.rb +4 -3
- data/lib/rubber/recipes/rubber/instances.rb +19 -8
- data/lib/rubber/recipes/rubber/security_groups.rb +6 -6
- data/lib/rubber/recipes/rubber/setup.rb +7 -7
- data/lib/rubber/tasks/rubber.rb +1 -1
- metadata +1 -1
data/TODO
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.13
|
@@ -9,7 +9,7 @@ namespace :rubber do
|
|
9
9
|
|
10
10
|
task :custom_install, :roles => :passenger do
|
11
11
|
rubber.sudo_script 'install_passenger', <<-ENDSCRIPT
|
12
|
-
if [[ -z `ls /usr/lib/ruby/gems/*/gems/passenger
|
12
|
+
if [[ -z `ls /usr/lib/ruby/gems/*/gems/passenger-#{rubber_env.passenger_version}/ext/apache2/mod_passenger.so 2> /dev/null` ]]; then
|
13
13
|
echo -en "\n\n\n\n" | passenger-install-apache2-module
|
14
14
|
fi
|
15
15
|
ENDSCRIPT
|
data/lib/rubber/instance.rb
CHANGED
@@ -76,17 +76,18 @@ module Rubber
|
|
76
76
|
|
77
77
|
# The configuration for a single instance
|
78
78
|
class InstanceItem
|
79
|
-
attr_reader :name, :domain, :instance_id
|
80
|
-
attr_accessor :roles
|
79
|
+
attr_reader :name, :domain, :instance_id, :security_groups
|
80
|
+
attr_accessor :roles, :zone
|
81
81
|
attr_accessor :external_host, :external_ip
|
82
82
|
attr_accessor :internal_host, :internal_ip
|
83
83
|
attr_accessor :static_ip, :volumes, :partitions
|
84
84
|
|
85
|
-
def initialize(name, domain, roles, instance_id)
|
85
|
+
def initialize(name, domain, roles, instance_id, security_group_list=[])
|
86
86
|
@name = name
|
87
87
|
@domain = domain
|
88
88
|
@roles = roles
|
89
89
|
@instance_id = instance_id
|
90
|
+
@security_groups = security_group_list
|
90
91
|
end
|
91
92
|
|
92
93
|
def full_name
|
@@ -162,7 +162,7 @@ namespace :rubber do
|
|
162
162
|
|
163
163
|
logger.info "Instance #{instance_id} created"
|
164
164
|
|
165
|
-
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id)
|
165
|
+
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, security_groups)
|
166
166
|
rubber_instances.add(instance_item)
|
167
167
|
rubber_instances.save()
|
168
168
|
|
@@ -179,6 +179,7 @@ namespace :rubber do
|
|
179
179
|
instance_item.external_host = instance[:external_host]
|
180
180
|
instance_item.external_ip = instance[:external_ip]
|
181
181
|
instance_item.internal_host = instance[:internal_host]
|
182
|
+
instance_item.zone = instance[:zone]
|
182
183
|
rubber_instances.save()
|
183
184
|
|
184
185
|
# setup amazon elastic ips if configured to do so
|
@@ -227,14 +228,18 @@ namespace :rubber do
|
|
227
228
|
|
228
229
|
env = rubber_cfg.environment.bind(instance_item.role_names, instance_alias)
|
229
230
|
|
230
|
-
instance = cloud.
|
231
|
+
instance = cloud.describe_instances(instance_item.instance_id).first
|
231
232
|
|
232
233
|
if instance[:state] == "running"
|
233
234
|
logger.info "\nInstance running, fetching hostname/ip data"
|
234
235
|
instance_item.external_host = instance[:external_host]
|
235
236
|
instance_item.external_ip = instance[:external_ip]
|
236
237
|
instance_item.internal_host = instance[:internal_host]
|
238
|
+
instance_item.zone = instance[:zone]
|
237
239
|
|
240
|
+
# setup amazon elastic ips if configured to do so
|
241
|
+
setup_static_ips
|
242
|
+
|
238
243
|
# Need to setup aliases so ssh doesn't give us errors when we
|
239
244
|
# later try to connect to same ip but using alias
|
240
245
|
setup_local_aliases
|
@@ -246,18 +251,24 @@ namespace :rubber do
|
|
246
251
|
# so that we can update all aliases
|
247
252
|
task :_get_ip, :hosts => instance_item.external_ip do
|
248
253
|
instance_item.internal_ip = capture(print_ip_command).strip
|
254
|
+
rubber_instances.save()
|
255
|
+
end
|
256
|
+
|
257
|
+
# even though instance is running, sometimes ssh hasn't started yet,
|
258
|
+
# so retry on connect failure
|
259
|
+
begin
|
260
|
+
_get_ip
|
261
|
+
rescue ConnectionError
|
262
|
+
sleep 2
|
263
|
+
logger.info "Failed to connect to #{instance_alias} (#{instance_item.external_ip}), retrying"
|
264
|
+
retry
|
249
265
|
end
|
250
|
-
|
251
|
-
# to get started
|
252
|
-
sleep 5
|
253
|
-
_get_ip
|
266
|
+
|
254
267
|
|
255
268
|
# Add the aliases for this instance to all other hosts
|
256
269
|
setup_remote_aliases
|
257
270
|
setup_dns_aliases
|
258
271
|
end
|
259
|
-
|
260
|
-
rubber_instances.save()
|
261
272
|
end
|
262
273
|
|
263
274
|
|
@@ -98,7 +98,7 @@ namespace :rubber do
|
|
98
98
|
groups = isolate_groups(groups) if rubber_env.isolate_security_groups
|
99
99
|
group_keys = groups.keys.clone()
|
100
100
|
|
101
|
-
# For each group that does already exist in
|
101
|
+
# For each group that does already exist in cloud
|
102
102
|
cloud_groups = cloud.describe_security_groups()
|
103
103
|
cloud_groups.each do |cloud_group|
|
104
104
|
group_name = cloud_group[:name]
|
@@ -108,7 +108,7 @@ namespace :rubber do
|
|
108
108
|
|
109
109
|
if group_keys.delete(group_name)
|
110
110
|
# sync rules
|
111
|
-
logger.debug "Security Group already in
|
111
|
+
logger.debug "Security Group already in cloud, syncing rules: #{group_name}"
|
112
112
|
group = groups[group_name]
|
113
113
|
rules = group['rules'].clone
|
114
114
|
rule_maps = []
|
@@ -133,8 +133,8 @@ namespace :rubber do
|
|
133
133
|
# rules match, don't need to do anything
|
134
134
|
# logger.debug "Rule in sync: #{rule_map.inspect}"
|
135
135
|
else
|
136
|
-
# rules don't match, remove them from
|
137
|
-
answer = Capistrano::CLI.ui.ask("Rule '#{rule_map.inspect}' exists in
|
136
|
+
# rules don't match, remove them from cloud and re-add below
|
137
|
+
answer = Capistrano::CLI.ui.ask("Rule '#{rule_map.inspect}' exists in cloud, but not locally, remove from cloud? [y/N]?: ")
|
138
138
|
rule_map = Rubber::Util::symbolize_keys(rule_map)
|
139
139
|
if rule_map[:source_group_name]
|
140
140
|
cloud.remove_security_group_rule(group_name, nil, nil, nil, {:name => rule_map[:source_group_name], :account => rule_map[:source_group_account]})
|
@@ -160,12 +160,12 @@ namespace :rubber do
|
|
160
160
|
end
|
161
161
|
else
|
162
162
|
# delete group
|
163
|
-
answer = Capistrano::CLI.ui.ask("Security group '#{group_name}' exists in
|
163
|
+
answer = Capistrano::CLI.ui.ask("Security group '#{group_name}' exists in cloud but not locally, remove from cloud? [y/N]: ")
|
164
164
|
cloud.destroy_security_group(group_name) if answer =~ /^y/
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
-
# For each group that didnt already exist in
|
168
|
+
# For each group that didnt already exist in cloud
|
169
169
|
group_keys.each do |group_name|
|
170
170
|
group = groups[group_name]
|
171
171
|
logger.debug "Creating new security group: #{group_name}"
|
@@ -332,18 +332,18 @@ namespace :rubber do
|
|
332
332
|
to_install.delete_if {|g, v| installed.has_key?(g) } if gem_cmd == 'install'
|
333
333
|
to_install_ver.delete_if {|g, v| installed.has_key?(g) && installed[g].include?(v) }
|
334
334
|
|
335
|
-
#
|
336
|
-
#
|
335
|
+
# rubygems can only do asingle versioned gem at a time so we need
|
336
|
+
# to do the two groups separately
|
337
|
+
# install versioned ones first so unversioned don't pull in a newer version
|
338
|
+
to_install_ver.each do |g, v|
|
339
|
+
system "#{cmd} #{g} -v #{v}"
|
340
|
+
fail "Unable to install versioned gem #{g}:#{v}" if $?.exitstatus > 0
|
341
|
+
end
|
337
342
|
if to_install.size > 0
|
338
343
|
gem_list = to_install.keys.join(' ')
|
339
344
|
system "#{cmd} #{gem_list}"
|
340
345
|
fail "Unable to install gems" if $?.exitstatus > 0
|
341
346
|
end
|
342
|
-
if to_install_ver.size > 0
|
343
|
-
gem_list = to_install_ver.collect {|g, v| "#{g} -v #{v}"}.join(' ')
|
344
|
-
system "#{cmd} #{gem_list}"
|
345
|
-
fail "Unable to install versioned gems" if $?.exitstatus > 0
|
346
|
-
end
|
347
347
|
|
348
348
|
'EOF'
|
349
349
|
ENDSCRIPT
|
data/lib/rubber/tasks/rubber.rb
CHANGED
@@ -38,7 +38,7 @@ namespace :rubber do
|
|
38
38
|
end
|
39
39
|
env = cfg.environment.bind(roles, instance_alias)
|
40
40
|
domain = env.domain
|
41
|
-
instance = Rubber::Configuration::InstanceItem.new(instance_alias, domain, role_items, 'dummyid')
|
41
|
+
instance = Rubber::Configuration::InstanceItem.new(instance_alias, domain, role_items, 'dummyid', ['dummygroup'])
|
42
42
|
instance.external_host = instance.full_name
|
43
43
|
instance.external_ip = "127.0.0.1"
|
44
44
|
instance.internal_host = instance.full_name
|