ebs_conductor 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/VERSION +1 -1
- data/ebs_conductor.gemspec +6 -6
- data/lib/ebs_conductor.rb +22 -10
- metadata +10 -8
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/ebs_conductor.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ebs_conductor}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Geyer"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-06}
|
13
13
|
s.description = %q{= ebs_conductor
|
14
14
|
|
15
15
|
The EBS Conductor is a library for managing Amazon Elastic Block Storage volumes and snapshots. It is designed to persist a specific set of data (a "lineage") between different compute instances.
|
@@ -73,7 +73,7 @@ further details.
|
|
73
73
|
s.homepage = %q{http://github.com/rgeyer/ebs_conductor}
|
74
74
|
s.licenses = ["MIT"]
|
75
75
|
s.require_paths = ["lib"]
|
76
|
-
s.rubygems_version = %q{1.
|
76
|
+
s.rubygems_version = %q{1.6.2}
|
77
77
|
s.summary = %q{A RightScale/Amazon EC2 EBS library}
|
78
78
|
s.test_files = [
|
79
79
|
"test/helper.rb"
|
@@ -84,7 +84,7 @@ further details.
|
|
84
84
|
|
85
85
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
86
86
|
s.add_runtime_dependency(%q<fog>, ["~> 0.8.2"])
|
87
|
-
s.add_runtime_dependency(%q<skeme>, ["
|
87
|
+
s.add_runtime_dependency(%q<skeme>, ["~> 0.0.6"])
|
88
88
|
s.add_runtime_dependency(%q<rest_connection>, [">= 0.0.21"])
|
89
89
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
90
90
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -92,7 +92,7 @@ further details.
|
|
92
92
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
93
93
|
else
|
94
94
|
s.add_dependency(%q<fog>, ["~> 0.8.2"])
|
95
|
-
s.add_dependency(%q<skeme>, ["
|
95
|
+
s.add_dependency(%q<skeme>, ["~> 0.0.6"])
|
96
96
|
s.add_dependency(%q<rest_connection>, [">= 0.0.21"])
|
97
97
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
98
98
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -101,7 +101,7 @@ further details.
|
|
101
101
|
end
|
102
102
|
else
|
103
103
|
s.add_dependency(%q<fog>, ["~> 0.8.2"])
|
104
|
-
s.add_dependency(%q<skeme>, ["
|
104
|
+
s.add_dependency(%q<skeme>, ["~> 0.0.6"])
|
105
105
|
s.add_dependency(%q<rest_connection>, [">= 0.0.21"])
|
106
106
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
107
107
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
data/lib/ebs_conductor.rb
CHANGED
@@ -25,6 +25,7 @@ module Rgeyer
|
|
25
25
|
@@logger = nil
|
26
26
|
@@default_timeout = 5*60
|
27
27
|
@@timeout_backoff = [2,5,10,15]
|
28
|
+
@@rs_region_hash = {'us-east-1' => 1, 'eu-west-1' => 2, 'us-west-1' => 3, 'ap-northeast-1' => 4, 'ap-southeast-1' => 5}
|
28
29
|
|
29
30
|
# Instantiates a new EbsConductor
|
30
31
|
#
|
@@ -67,11 +68,12 @@ module Rgeyer
|
|
67
68
|
})
|
68
69
|
|
69
70
|
if options[:rs_email] && options[:rs_pass] && options[:rs_acct_num]
|
71
|
+
pass = options[:rs_pass].gsub('"', '\\"')
|
70
72
|
::RightScale::Api::BaseExtend.class_eval <<-EOF
|
71
73
|
@@connection ||= RestConnection::Connection.new
|
72
74
|
@@connection.settings = {
|
73
75
|
:user => "#{options[:rs_email]}",
|
74
|
-
:pass => "#{
|
76
|
+
:pass => "#{pass}",
|
75
77
|
:api_url => "https://my.rightscale.com/api/acct/#{options[:rs_acct_num]}",
|
76
78
|
:common_headers => {
|
77
79
|
"X_API_VERSION" => "1.0"
|
@@ -82,7 +84,7 @@ module Rgeyer
|
|
82
84
|
@@connection ||= RestConnection::Connection.new
|
83
85
|
@@connection.settings = {
|
84
86
|
:user => "#{options[:rs_email]}",
|
85
|
-
:pass => "#{
|
87
|
+
:pass => "#{pass}",
|
86
88
|
:api_url => "https://my.rightscale.com/api/acct/#{options[:rs_acct_num]}",
|
87
89
|
:common_headers => {
|
88
90
|
"X_API_VERSION" => "1.0"
|
@@ -162,14 +164,18 @@ module Rgeyer
|
|
162
164
|
timeout_message = "Timed out waiting for EBS volume to be created and attached to (#{server.id}). Elapsed time was #{options[:timeout]} seconds"
|
163
165
|
block_until_timeout(timeout_message, options[:timeout]) {
|
164
166
|
keep_baking = false
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
167
|
+
ec2_found = false
|
168
|
+
unless ec2_found
|
169
|
+
server = @@fog_aws_computes[region].servers.get(instance_id)
|
170
|
+
# Check things out on AWS
|
171
|
+
check_vol = server.block_device_mapping.select { |dev| dev['volumeId'] == new_vol.id }.first
|
172
|
+
keep_baking = true if !check_vol || check_vol['status'] != "attached"
|
173
|
+
ec2_found = !keep_baking
|
174
|
+
end
|
169
175
|
|
170
176
|
# Check things out in RS if we've got RS credentials
|
171
177
|
if @@have_rs
|
172
|
-
vol = Ec2EbsVolume.
|
178
|
+
vol = Ec2EbsVolume.find_by_cloud_id(@@rs_region_hash[region]).select { |v| v.aws_id == new_vol.id }.first
|
173
179
|
keep_baking = (vol == nil)
|
174
180
|
end
|
175
181
|
|
@@ -223,7 +229,7 @@ module Rgeyer
|
|
223
229
|
vol_hash.each do |region,vols|
|
224
230
|
# TODO: warn about multiples in a region?
|
225
231
|
vols.each do |vol|
|
226
|
-
if ["available", "in-use"].include? vol.
|
232
|
+
if ["available", "in-use"].include? vol.state
|
227
233
|
description = "Created by EBS Conductor for the (#{lineage}) lineage while the volume was #{vol.server_id ? "attached to #{vol.server_id}" : "detatched"}"
|
228
234
|
|
229
235
|
excon_resp = @@fog_aws_computes[region].create_snapshot(vol.id, description)
|
@@ -231,7 +237,7 @@ module Rgeyer
|
|
231
237
|
|
232
238
|
tags = options[:tags] || []
|
233
239
|
tags << lineage_tag(lineage)
|
234
|
-
tag_hash[snapshot_id] = {:snapshot_tags => tags, :volume_tags => vol.tags.keys}
|
240
|
+
tag_hash[snapshot_id] = {:snapshot_tags => tags, :volume_tags => vol.tags.keys, :region => region}
|
235
241
|
else
|
236
242
|
@@logger.warn("Volume (#{vol.id}) had a status of (#{vol.status}). A snapshot could not be created..")
|
237
243
|
end
|
@@ -243,7 +249,12 @@ module Rgeyer
|
|
243
249
|
keep_baking = false
|
244
250
|
|
245
251
|
if @@have_rs
|
246
|
-
snaps =
|
252
|
+
snaps = []
|
253
|
+
tag_hash.each do |snapshot_id,val_hash|
|
254
|
+
snap = Ec2EbsSnapshot.find_by_cloud_id(@@rs_region_hash[val_hash[:region]]).select { |s| snapshot_id == s.aws_id }.first
|
255
|
+
snaps << snap if snap
|
256
|
+
end
|
257
|
+
#snaps = Ec2EbsSnapshot.find_by_cloud_id(:all) { |snap| tag_hash.keys.include? snap.aws_id }
|
247
258
|
keep_baking = (snaps.count != tag_hash.keys.count)
|
248
259
|
end
|
249
260
|
|
@@ -330,6 +341,7 @@ module Rgeyer
|
|
330
341
|
end
|
331
342
|
|
332
343
|
def block_until_timeout(timeout_message, timeout, &block)
|
344
|
+
@@logger.info("Entered block_until and timeout is (#{timeout})")
|
333
345
|
begin
|
334
346
|
idx=0
|
335
347
|
Timeout::timeout(timeout) do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ebs_conductor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Geyer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-06 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -40,12 +40,14 @@ dependencies:
|
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
45
|
+
hash: 19
|
46
46
|
segments:
|
47
47
|
- 0
|
48
|
-
|
48
|
+
- 0
|
49
|
+
- 6
|
50
|
+
version: 0.0.6
|
49
51
|
name: skeme
|
50
52
|
version_requirements: *id002
|
51
53
|
- !ruby/object:Gem::Dependency
|
@@ -216,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
218
|
requirements: []
|
217
219
|
|
218
220
|
rubyforge_project:
|
219
|
-
rubygems_version: 1.
|
221
|
+
rubygems_version: 1.6.2
|
220
222
|
signing_key:
|
221
223
|
specification_version: 3
|
222
224
|
summary: A RightScale/Amazon EC2 EBS library
|