amazon-ec2 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.yardopts +1 -0
- data/ChangeLog +3 -0
- data/LICENSE +1 -1
- data/README.rdoc +13 -1
- data/Rakefile +6 -16
- data/VERSION +1 -1
- data/amazon-ec2.gemspec +4 -4
- data/lib/AWS.rb +59 -11
- data/lib/AWS/EC2.rb +6 -40
- data/lib/AWS/EC2/availability_zones.rb +4 -26
- data/lib/AWS/EC2/console.rb +5 -28
- data/lib/AWS/EC2/elastic_ips.rb +7 -80
- data/lib/AWS/EC2/image_attributes.rb +10 -45
- data/lib/AWS/EC2/images.rb +5 -40
- data/lib/AWS/EC2/instances.rb +15 -56
- data/lib/AWS/EC2/keypairs.rb +3 -38
- data/lib/AWS/EC2/products.rb +3 -27
- data/lib/AWS/EC2/security_groups.rb +19 -70
- data/lib/AWS/EC2/snapshots.rb +4 -41
- data/lib/AWS/EC2/volumes.rb +15 -72
- data/lib/AWS/ELB.rb +5 -40
- data/lib/AWS/ELB/load_balancers.rb +27 -47
- data/lib/AWS/exceptions.rb +78 -122
- data/lib/AWS/responses.rb +6 -46
- data/test/test_helper.rb +4 -0
- metadata +6 -3
data/lib/AWS/EC2/snapshots.rb
CHANGED
@@ -1,31 +1,12 @@
|
|
1
|
-
#--
|
2
|
-
# Amazon Web Services EC2 Query API Ruby library, EBS snaphshots support
|
3
|
-
#
|
4
|
-
# Ruby Gem Name:: amazon-ec2
|
5
|
-
# Author:: Yann Klis (mailto:yann.klis@novelys.com)
|
6
|
-
# Copyright:: Copyright (c) 2008 Yann Klis
|
7
|
-
# License:: Distributes under the same terms as Ruby
|
8
|
-
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
-
#++
|
10
|
-
|
11
1
|
module AWS
|
12
2
|
module EC2
|
13
3
|
|
14
4
|
class Base < AWS::Base
|
15
5
|
|
16
|
-
#Amazon Developer Guide Docs:
|
17
|
-
#
|
18
6
|
# The DescribeSnapshots operation describes the status of Amazon EBS snapshots.
|
19
7
|
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# none
|
23
|
-
#
|
24
|
-
#Optional Arguments:
|
25
|
-
#
|
26
|
-
# :snapshot_id => Array (default : [])
|
8
|
+
# @option options [Array] :snapshot_id ([])
|
27
9
|
#
|
28
|
-
|
29
10
|
def describe_snapshots( options = {} )
|
30
11
|
|
31
12
|
options = { :snapshot_id => [] }.merge(options)
|
@@ -36,22 +17,12 @@ module AWS
|
|
36
17
|
|
37
18
|
end
|
38
19
|
|
39
|
-
#Amazon Developer Guide Docs:
|
40
|
-
#
|
41
20
|
# The CreateSnapshot operation creates a snapshot of an Amazon EBS volume and stores it in Amazon S3. You can use snapshots for backups, to launch instances from identical snapshots, and to save data before shutting down an instance.
|
42
21
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
# :volume_id => String (default : '')
|
46
|
-
#
|
47
|
-
#Optional Arguments:
|
22
|
+
# @option options [String] :volume_id ('')
|
48
23
|
#
|
49
|
-
# none
|
50
|
-
#
|
51
|
-
|
52
24
|
def create_snapshot( options = {} )
|
53
25
|
|
54
|
-
# defaults
|
55
26
|
options = { :volume_id => '' }.merge(options)
|
56
27
|
|
57
28
|
raise ArgumentError, "No :volume_id provided" if options[:volume_id].nil? || options[:volume_id].empty?
|
@@ -64,19 +35,11 @@ module AWS
|
|
64
35
|
|
65
36
|
end
|
66
37
|
|
67
|
-
|
68
|
-
#
|
38
|
+
|
69
39
|
# The DeleteSnapshot operation deletes a snapshot of an Amazon EBS volume that is stored in Amazon S3.
|
70
40
|
#
|
71
|
-
#
|
41
|
+
# @option options [String] :snapshot_id ('')
|
72
42
|
#
|
73
|
-
# :snapshot_id => String (default : '')
|
74
|
-
#
|
75
|
-
#Optional Arguments:
|
76
|
-
#
|
77
|
-
# none
|
78
|
-
#
|
79
|
-
|
80
43
|
def delete_snapshot( options = {} )
|
81
44
|
|
82
45
|
options = { :snapshot_id => '' }.merge(options)
|
data/lib/AWS/EC2/volumes.rb
CHANGED
@@ -1,55 +1,23 @@
|
|
1
|
-
#--
|
2
|
-
# Amazon Web Services EC2 Query API Ruby library, EBS volumes support
|
3
|
-
#
|
4
|
-
# Ruby Gem Name:: amazon-ec2
|
5
|
-
# Author:: Yann Klis (mailto:yann.klis@novelys.com)
|
6
|
-
# Copyright:: Copyright (c) 2008 Yann Klis
|
7
|
-
# License:: Distributes under the same terms as Ruby
|
8
|
-
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
-
#++
|
10
|
-
|
11
1
|
module AWS
|
12
2
|
module EC2
|
13
|
-
|
14
3
|
class Base < AWS::Base
|
15
4
|
|
16
|
-
#Amazon Developer Guide Docs:
|
17
|
-
#
|
18
5
|
# The DescribeVolumes operation lists one or more Amazon EBS volumes that you own, If you do not specify any volumes, Amazon EBS returns all volumes that you own.
|
19
6
|
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# none
|
23
|
-
#
|
24
|
-
#Optional Arguments:
|
7
|
+
# @option options [optional, String] :volume_id ([])
|
25
8
|
#
|
26
|
-
# :volume_id => Array (default : [])
|
27
|
-
#
|
28
|
-
|
29
9
|
def describe_volumes( options = {} )
|
30
|
-
|
31
10
|
options = { :volume_id => [] }.merge(options)
|
32
|
-
|
33
11
|
params = pathlist("VolumeId", options[:volume_id] )
|
34
|
-
|
35
12
|
return response_generator(:action => "DescribeVolumes", :params => params)
|
36
|
-
|
37
13
|
end
|
38
14
|
|
39
|
-
#Amazon Developer Guide Docs:
|
40
|
-
#
|
41
15
|
# The CreateVolume operation creates a new Amazon EBS volume that you can mount from any Amazon EC2 instance.
|
42
16
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
17
|
+
# @option options [String] :availability_zone ('')
|
18
|
+
# @option options [optional, String] :size ('')
|
19
|
+
# @option options [optional, String] :snapshot_id ('')
|
46
20
|
#
|
47
|
-
#Optional Arguments:
|
48
|
-
#
|
49
|
-
# :size => String (default : '')
|
50
|
-
# :snapshot_id => String (default : '')
|
51
|
-
#
|
52
|
-
|
53
21
|
def create_volume( options = {} )
|
54
22
|
|
55
23
|
# defaults
|
@@ -70,19 +38,10 @@ module AWS
|
|
70
38
|
|
71
39
|
end
|
72
40
|
|
73
|
-
#Amazon Developer Guide Docs:
|
74
|
-
#
|
75
41
|
# The DeleteVolume operation deletes an Amazon EBS volume.
|
76
42
|
#
|
77
|
-
#
|
43
|
+
# @option options [String] :volume_id ('')
|
78
44
|
#
|
79
|
-
# :volume_id => String (default : '')
|
80
|
-
#
|
81
|
-
#Optional Arguments:
|
82
|
-
#
|
83
|
-
# none
|
84
|
-
#
|
85
|
-
|
86
45
|
def delete_volume( options = {} )
|
87
46
|
|
88
47
|
options = { :volume_id => '' }.merge(options)
|
@@ -97,21 +56,12 @@ module AWS
|
|
97
56
|
|
98
57
|
end
|
99
58
|
|
100
|
-
#Amazon Developer Guide Docs:
|
101
|
-
#
|
102
59
|
# The AttachVolume operation attaches an Amazon EBS volume to an instance.
|
103
60
|
#
|
104
|
-
#
|
61
|
+
# @option options [String] :volume_id ('')
|
62
|
+
# @option options [String] :instance_id ('')
|
63
|
+
# @option options [String] :device ('')
|
105
64
|
#
|
106
|
-
# :volume_id => String (default : '')
|
107
|
-
# :instance_id => String (default : '')
|
108
|
-
# :device => String (default : '')
|
109
|
-
#
|
110
|
-
#Optional Arguments:
|
111
|
-
#
|
112
|
-
# none
|
113
|
-
#
|
114
|
-
|
115
65
|
def attach_volume( options = {} )
|
116
66
|
|
117
67
|
options = { :volume_id => '' }.merge(options)
|
@@ -132,21 +82,13 @@ module AWS
|
|
132
82
|
|
133
83
|
end
|
134
84
|
|
135
|
-
#Amazon Developer Guide Docs:
|
136
|
-
#
|
137
85
|
# The DetachVolume operation detaches an Amazon EBS volume from an instance.
|
138
86
|
#
|
139
|
-
#
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#Optional Arguments:
|
144
|
-
#
|
145
|
-
# :instance_id => String (default : '')
|
146
|
-
# :device => String (default : '')
|
147
|
-
# :force => Boolean (default : '')
|
87
|
+
# @option options [String] :volume_id ('')
|
88
|
+
# @option options [optional, String] :instance_id ('')
|
89
|
+
# @option options [optional, String] :device ('')
|
90
|
+
# @option options [optional, Boolean] :force ('')
|
148
91
|
#
|
149
|
-
|
150
92
|
def detach_volume( options = {} )
|
151
93
|
|
152
94
|
options = { :volume_id => '' }.merge(options)
|
@@ -165,8 +107,9 @@ module AWS
|
|
165
107
|
}
|
166
108
|
|
167
109
|
return response_generator(:action => "DetachVolume", :params => params)
|
168
|
-
|
169
110
|
end
|
111
|
+
|
170
112
|
end
|
171
113
|
end
|
172
|
-
end
|
114
|
+
end
|
115
|
+
|
data/lib/AWS/ELB.rb
CHANGED
@@ -1,58 +1,23 @@
|
|
1
|
-
#--
|
2
|
-
# Amazon Web Services EC2 Query API Ruby library
|
3
|
-
#
|
4
|
-
# Ruby Gem Name:: amazon-ec2
|
5
|
-
# Author:: Glenn Rempe (mailto:glenn@rempe.us)
|
6
|
-
# Copyright:: Copyright (c) 2007-2008 Glenn Rempe
|
7
|
-
# License:: Distributes under the same terms as Ruby
|
8
|
-
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
-
#++
|
10
|
-
|
11
|
-
# Require any lib files that we have bundled with this Ruby Gem in the lib/EC2 directory.
|
12
|
-
# Parts of the EC2 module and Base class are broken out into separate
|
13
|
-
# files for maintainability and are organized by the functional groupings defined
|
14
|
-
# in the EC2 API developers guide.
|
15
|
-
Dir[File.join(File.dirname(__FILE__), 'ELB/**/*.rb')].sort.each { |lib| require lib }
|
16
|
-
|
17
1
|
module AWS
|
18
2
|
module ELB
|
19
3
|
|
20
4
|
# Which host FQDN will we connect to for all API calls to AWS?
|
21
|
-
# If ELB_URL is defined in the users ENV we can
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
5
|
+
# If ELB_URL is defined in the users ENV we can override the default with that.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# export ELB_URL='https://elasticloadbalancing.amazonaws.com'
|
25
9
|
if ENV['ELB_URL']
|
26
10
|
ELB_URL = ENV['ELB_URL']
|
27
11
|
VALID_HOSTS = ['elasticloadbalancing.amazonaws.com']
|
28
12
|
raise ArgumentError, "Invalid ELB_URL environment variable : #{ELB_URL}" unless VALID_HOSTS.include?(ELB_URL)
|
29
13
|
DEFAULT_HOST = URI.parse(ELB_URL).host
|
30
14
|
else
|
31
|
-
#
|
15
|
+
# Default US API endpoint
|
32
16
|
DEFAULT_HOST = 'elasticloadbalancing.amazonaws.com'
|
33
17
|
end
|
34
18
|
|
35
|
-
# This is the version of the API as defined by Amazon Web Services
|
36
19
|
API_VERSION = '2009-05-15'
|
37
20
|
|
38
|
-
#Introduction:
|
39
|
-
#
|
40
|
-
# The library exposes one main interface class, 'AWS::ELB::Base'.
|
41
|
-
# This class provides all the methods for using the ELB service
|
42
|
-
# including the handling of header signing and other security issues .
|
43
|
-
# This class uses Net::HTTP to interface with the ELB Query API interface.
|
44
|
-
#
|
45
|
-
#Required Arguments:
|
46
|
-
#
|
47
|
-
# :access_key_id => String (default : "")
|
48
|
-
# :secret_access_key => String (default : "")
|
49
|
-
#
|
50
|
-
#Optional Arguments:
|
51
|
-
#
|
52
|
-
# :use_ssl => Boolean (default : true)
|
53
|
-
# :server => String (default : 'elasticloadbalancing.amazonaws.com')
|
54
|
-
# :proxy_server => String (default : nil)
|
55
|
-
#
|
56
21
|
class Base < AWS::Base
|
57
22
|
def api_version
|
58
23
|
API_VERSION
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module AWS
|
2
2
|
module ELB
|
3
3
|
class Base < AWS::Base
|
4
|
-
|
5
|
-
#
|
4
|
+
|
6
5
|
# This API creates a new LoadBalancer. Once the call has completed
|
7
6
|
# successfully, a new LoadBalancer will be created, but it will not be
|
8
7
|
# usable until at least one instance has been registered. When the
|
@@ -10,12 +9,10 @@ module AWS
|
|
10
9
|
# by using the DescribeInstanceHealth API. The LoadBalancer is usable as
|
11
10
|
# soon as any registered instance is InService.
|
12
11
|
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
# :listeners => Array of Hashes (:protocol, :load_balancer_port, :instance_port)
|
18
|
-
# :availability_zones => Array of Strings
|
12
|
+
# @option options [String] :load_balancer_name (nil) the name of the load balancer
|
13
|
+
# @option options [Array] :availability_zones (nil)
|
14
|
+
# @option options [Array] :listeners (nil) An Array of Hashes (:protocol, :load_balancer_port, :instance_port)
|
15
|
+
# @option options [Array] :availability_zones (nil) An Array of Strings
|
19
16
|
#
|
20
17
|
def create_load_balancer( options = {} )
|
21
18
|
raise ArgumentError, "No :availability_zones provided" if options[:availability_zones].nil? || options[:availability_zones].empty?
|
@@ -35,8 +32,6 @@ module AWS
|
|
35
32
|
return response_generator(:action => "CreateLoadBalancer", :params => params)
|
36
33
|
end
|
37
34
|
|
38
|
-
# Amazon Developer Guide Docs:
|
39
|
-
#
|
40
35
|
# This API deletes the specified LoadBalancer. On deletion, all of the
|
41
36
|
# configured properties of the LoadBalancer will be deleted. If you
|
42
37
|
# attempt to recreate the LoadBalancer, you need to reconfigure all the
|
@@ -47,20 +42,14 @@ module AWS
|
|
47
42
|
# get the same DNS name even if you create a new LoadBalancer with same
|
48
43
|
# LoadBalancerName.
|
49
44
|
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
# :load_balancer_name => String
|
45
|
+
# @option options [String] :load_balancer_name the name of the load balancer
|
53
46
|
#
|
54
47
|
def delete_load_balancer( options = {} )
|
55
48
|
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
56
|
-
|
57
49
|
params = { 'LoadBalancerName' => options[:load_balancer_name] }
|
58
|
-
|
59
50
|
return response_generator(:action => "DeleteLoadBalancer", :params => params)
|
60
51
|
end
|
61
52
|
|
62
|
-
# Amazon Developer Guide Docs:
|
63
|
-
#
|
64
53
|
# This API returns detailed configuration information for the specified
|
65
54
|
# LoadBalancers, or if no LoadBalancers are specified, then the API
|
66
55
|
# returns configuration information for all LoadBalancers created by the
|
@@ -71,20 +60,14 @@ module AWS
|
|
71
60
|
# this API, you must provide the same account credentials as those that
|
72
61
|
# were used to create the LoadBalancer.
|
73
62
|
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
# :load_balancer_names => String
|
63
|
+
# @option options [Array<String>] :load_balancer_names ([]) An Array of names of load balancers to describe.
|
77
64
|
#
|
78
65
|
def describe_load_balancers( options = {} )
|
79
66
|
options = { :load_balancer_names => [] }.merge(options)
|
80
|
-
|
81
67
|
params = pathlist("LoadBalancerName.member", options[:load_balancer_names])
|
82
|
-
|
83
68
|
return response_generator(:action => "DescribeLoadBalancers", :params => params)
|
84
69
|
end
|
85
70
|
|
86
|
-
# Amazon Developer Guide Docs:
|
87
|
-
#
|
88
71
|
# This API adds new instances to the LoadBalancer.
|
89
72
|
#
|
90
73
|
# Once the instance is registered, it starts receiving traffic and
|
@@ -102,25 +85,18 @@ module AWS
|
|
102
85
|
# completed. Rather, it means that the request has been registered and
|
103
86
|
# the changes will happen shortly.
|
104
87
|
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
# :instances => Array of Strings
|
108
|
-
# :load_balancer_name => String
|
88
|
+
# @option options [Array<String>] :instances An Array of instance names to add to the load balancer.
|
89
|
+
# @option options [String] :load_balancer_name The name of the load balancer.
|
109
90
|
#
|
110
91
|
def register_instances_with_load_balancer( options = {} )
|
111
92
|
raise ArgumentError, "No :instances provided" if options[:instances].nil? || options[:instances].empty?
|
112
93
|
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
113
|
-
|
114
94
|
params = {}
|
115
|
-
|
116
95
|
params.merge!(pathlist('Instances.member', [options[:instances]].flatten))
|
117
96
|
params['LoadBalancerName'] = options[:load_balancer_name]
|
118
|
-
|
119
97
|
return response_generator(:action => "RegisterInstancesWithLoadBalancer", :params => params)
|
120
98
|
end
|
121
99
|
|
122
|
-
# Amazon Developer Guide Docs:
|
123
|
-
#
|
124
100
|
# This API deregisters instances from the LoadBalancer. Trying to
|
125
101
|
# deregister an instance that is not registered with the LoadBalancer
|
126
102
|
# does nothing.
|
@@ -132,34 +108,25 @@ module AWS
|
|
132
108
|
# Once the instance is deregistered, it will stop receiving traffic from
|
133
109
|
# the LoadBalancer.
|
134
110
|
#
|
135
|
-
#
|
136
|
-
#
|
137
|
-
# :instances => Array of Strings
|
138
|
-
# :load_balancer_name => String
|
111
|
+
# @option options [Array<String>] :instances An Array of instance names to remove from the load balancer.
|
112
|
+
# @option options [String] :load_balancer_name The name of the load balancer.
|
139
113
|
#
|
140
114
|
def deregister_instances_from_load_balancer( options = {} )
|
141
115
|
raise ArgumentError, "No :instances provided" if options[:instances].nil? || options[:instances].empty?
|
142
116
|
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
143
|
-
|
144
117
|
params = {}
|
145
|
-
|
146
118
|
params.merge!(pathlist('Instances.member', [options[:instances]].flatten))
|
147
119
|
params['LoadBalancerName'] = options[:load_balancer_name]
|
148
|
-
|
149
120
|
return response_generator(:action => "DeregisterInstancesFromLoadBalancer", :params => params)
|
150
121
|
end
|
151
122
|
|
152
|
-
# Amazon Developer Guide Docs:
|
153
|
-
#
|
154
123
|
# This API enables you to define an application healthcheck for the
|
155
124
|
# instances.
|
156
125
|
#
|
157
126
|
# Note: Completion of this API does not guarantee that operation has completed. Rather, it means that the request has been registered and the changes will happen shortly.
|
158
127
|
#
|
159
|
-
#
|
160
|
-
#
|
161
|
-
# :health_check => Hash (:timeout, :interval, :unhealthy_threshold, :healthy_threshold)
|
162
|
-
# :load_balancer_name => String
|
128
|
+
# @option options [Hash] :health_check A Hash with the keys (:timeout, :interval, :unhealthy_threshold, :healthy_threshold)
|
129
|
+
# @option options [String] :load_balancer_name The name of the load balancer.
|
163
130
|
#
|
164
131
|
def configure_health_check( options = {} )
|
165
132
|
raise ArgumentError, "No :health_check provided" if options[:health_check].nil? || options[:health_check].empty?
|
@@ -182,17 +149,30 @@ module AWS
|
|
182
149
|
return response_generator(:action => "ConfigureHealthCheck", :params => params)
|
183
150
|
end
|
184
151
|
|
185
|
-
|
152
|
+
# Not yet implemented
|
153
|
+
#
|
154
|
+
# @todo Implement this method
|
155
|
+
#
|
156
|
+
def describe_instance_health( options = {} )
|
186
157
|
raise "Not yet implemented"
|
187
158
|
end
|
188
159
|
|
160
|
+
# Not yet implemented
|
161
|
+
#
|
162
|
+
# @todo Implement this method
|
163
|
+
#
|
189
164
|
def disable_availability_zones_for_load_balancer( options = {} )
|
190
165
|
raise "Not yet implemented"
|
191
166
|
end
|
192
167
|
|
168
|
+
# Not yet implemented
|
169
|
+
#
|
170
|
+
# @todo Implement this method
|
171
|
+
#
|
193
172
|
def enable_availability_zones_for_load_balancer( options = {} )
|
194
173
|
raise "Not yet implemented"
|
195
174
|
end
|
175
|
+
|
196
176
|
end
|
197
177
|
end
|
198
178
|
end
|