aws-sdk 1.0.4 → 1.1.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/lib/aws.rb +10 -9
- data/lib/aws/api_config/IAM-2010-07-15.yml +632 -0
- data/lib/aws/base_client.rb +1 -1
- data/lib/aws/cacheable.rb +34 -46
- data/lib/aws/client_logging.rb +19 -14
- data/lib/aws/collections.rb +230 -0
- data/lib/aws/common.rb +4 -0
- data/lib/aws/configuration.rb +7 -0
- data/lib/aws/ec2.rb +2 -2
- data/lib/aws/ec2/attachment.rb +64 -71
- data/lib/aws/ec2/attachment_collection.rb +11 -9
- data/lib/aws/ec2/availability_zone.rb +40 -31
- data/lib/aws/ec2/availability_zone_collection.rb +2 -3
- data/lib/aws/ec2/elastic_ip.rb +25 -22
- data/lib/aws/ec2/elastic_ip_collection.rb +5 -2
- data/lib/aws/ec2/image.rb +113 -129
- data/lib/aws/ec2/image_collection.rb +5 -6
- data/lib/aws/ec2/instance.rb +290 -233
- data/lib/aws/ec2/instance_collection.rb +72 -67
- data/lib/aws/ec2/key_pair.rb +16 -18
- data/lib/aws/ec2/region.rb +25 -17
- data/lib/aws/ec2/reserved_instances.rb +7 -1
- data/lib/aws/ec2/reserved_instances_collection.rb +3 -3
- data/lib/aws/ec2/reserved_instances_offering.rb +7 -1
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +3 -3
- data/lib/aws/ec2/resource.rb +41 -222
- data/lib/aws/ec2/security_group.rb +22 -18
- data/lib/aws/ec2/security_group_collection.rb +2 -5
- data/lib/aws/ec2/snapshot.rb +44 -35
- data/lib/aws/ec2/snapshot_collection.rb +43 -1
- data/lib/aws/ec2/tag.rb +14 -18
- data/lib/aws/ec2/volume.rb +59 -72
- data/lib/aws/ec2/volume_collection.rb +16 -12
- data/lib/aws/errors.rb +14 -5
- data/lib/aws/http/httparty_handler.rb +2 -2
- data/lib/aws/iam.rb +306 -0
- data/lib/aws/iam/access_key.rb +183 -0
- data/lib/aws/iam/access_key_collection.rb +131 -0
- data/lib/aws/iam/account_alias_collection.rb +81 -0
- data/lib/aws/iam/client.rb +44 -0
- data/lib/aws/iam/client/xml.rb +38 -0
- data/lib/aws/iam/collection.rb +87 -0
- data/lib/aws/iam/errors.rb +29 -0
- data/lib/aws/iam/group.rb +117 -0
- data/lib/aws/iam/group_collection.rb +135 -0
- data/lib/aws/iam/group_policy_collection.rb +49 -0
- data/lib/aws/iam/group_user_collection.rb +94 -0
- data/lib/aws/iam/login_profile.rb +97 -0
- data/lib/aws/iam/mfa_device.rb +52 -0
- data/lib/aws/iam/mfa_device_collection.rb +119 -0
- data/lib/aws/iam/policy.rb +48 -0
- data/lib/aws/iam/policy_collection.rb +191 -0
- data/lib/aws/iam/request.rb +27 -0
- data/lib/aws/iam/resource.rb +74 -0
- data/lib/aws/iam/server_certificate.rb +143 -0
- data/lib/aws/iam/server_certificate_collection.rb +174 -0
- data/lib/aws/iam/signing_certificate.rb +171 -0
- data/lib/aws/iam/signing_certificate_collection.rb +134 -0
- data/lib/aws/iam/user.rb +196 -0
- data/lib/aws/iam/user_collection.rb +136 -0
- data/lib/aws/iam/user_group_collection.rb +101 -0
- data/lib/aws/iam/user_policy.rb +90 -0
- data/lib/aws/iam/user_policy_collection.rb +48 -0
- data/lib/aws/resource.rb +381 -0
- data/lib/aws/resource_cache.rb +1 -2
- data/lib/aws/response.rb +5 -1
- data/lib/aws/response_cache.rb +1 -1
- data/lib/aws/s3/client.rb +3 -1
- data/lib/aws/s3/presigned_post.rb +1 -1
- data/lib/aws/simple_db.rb +1 -1
- metadata +113 -50
data/lib/aws/ec2.rb
CHANGED
@@ -167,8 +167,8 @@ module AWS
|
|
167
167
|
# the string "linux", you can do this:
|
168
168
|
#
|
169
169
|
# ec2.images.with_owner("amazon").
|
170
|
-
#
|
171
|
-
#
|
170
|
+
# filter("platform", "windows").
|
171
|
+
# filter("description", "*linux*")
|
172
172
|
#
|
173
173
|
# Similarly, you can tag images, instances, security groups,
|
174
174
|
# snapshots, and volumes with free-form key-value metadata and
|
data/lib/aws/ec2/attachment.rb
CHANGED
@@ -11,8 +11,7 @@
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
12
12
|
# language governing permissions and limitations under the License.
|
13
13
|
|
14
|
-
require 'aws/
|
15
|
-
require 'aws/cacheable'
|
14
|
+
require 'aws/resource'
|
16
15
|
|
17
16
|
module AWS
|
18
17
|
class EC2
|
@@ -31,67 +30,45 @@ module AWS
|
|
31
30
|
# end
|
32
31
|
# sleep 1 until volume.status == :available
|
33
32
|
# volume.delete
|
34
|
-
class Attachment
|
35
|
-
|
36
|
-
include Model
|
37
|
-
include Cacheable
|
38
|
-
|
39
|
-
attr_reader :volume
|
40
|
-
attr_reader :instance
|
41
|
-
attr_reader :device
|
33
|
+
class Attachment < Resource
|
42
34
|
|
43
35
|
# @private
|
44
|
-
def initialize
|
36
|
+
def initialize volume, instance, device, options = {}
|
45
37
|
@volume = volume
|
46
38
|
@instance = instance
|
47
39
|
@device = device
|
48
|
-
super
|
49
|
-
end
|
50
|
-
|
51
|
-
# (see Volume#detach_from)
|
52
|
-
def delete(opts = {})
|
53
|
-
client.detach_volume(opts.merge(:volume_id => volume.id,
|
54
|
-
:instance_id => instance.id,
|
55
|
-
:device => device))
|
40
|
+
super
|
56
41
|
end
|
57
42
|
|
58
|
-
# @return [
|
59
|
-
|
60
|
-
# * +:attached+
|
61
|
-
# * +:detaching+
|
62
|
-
# * +:detached+
|
63
|
-
def status
|
64
|
-
retrieve_attribute(:status) { describe_call }
|
65
|
-
end
|
66
|
-
|
67
|
-
# @return [Time] The time at which this attachment was created.
|
68
|
-
def attach_time
|
69
|
-
retrieve_attribute(:attach_time) { describe_call }
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [Boolean] True if the volume will be deleted on
|
73
|
-
# instance termination.
|
74
|
-
def delete_on_termination?
|
75
|
-
retrieve_attribute(:delete_on_termination?) { describe_call }
|
76
|
-
end
|
43
|
+
# @return [Volume] Returns the volume that is attached.
|
44
|
+
attr_reader :volume
|
77
45
|
|
78
|
-
# @return [
|
79
|
-
|
80
|
-
!describe_attachment.nil?
|
81
|
-
end
|
46
|
+
# @return [Instance] Returns the EC2 instance the volume is attached to.
|
47
|
+
attr_reader :instance
|
82
48
|
|
83
|
-
# @return [
|
84
|
-
#
|
85
|
-
|
86
|
-
def ==(other)
|
87
|
-
other.kind_of?(Attachment) and
|
88
|
-
other.volume == volume and
|
89
|
-
other.instance == instance and
|
90
|
-
other.device == device
|
91
|
-
end
|
92
|
-
alias_method :eql?, :==
|
49
|
+
# @return [String] Returns how the device is exposed to the instance
|
50
|
+
# (e.g. '/dev/sdh')
|
51
|
+
attr_reader :device
|
93
52
|
|
94
|
-
|
53
|
+
# @overload status
|
54
|
+
# Returns the attachment status. Possible values are:
|
55
|
+
# * +:attaching+
|
56
|
+
# * +:attached+
|
57
|
+
# * +:detaching+
|
58
|
+
# * +:detached+
|
59
|
+
# @return [Symbol] Returns the attachment status.
|
60
|
+
attribute :status, :to_sym => true
|
61
|
+
|
62
|
+
# @overload attach_time
|
63
|
+
# @return [Time] Returns the time at which this attachment was created.
|
64
|
+
attribute :attach_time
|
65
|
+
|
66
|
+
# @overload delete_on_termination?
|
67
|
+
# @return [Boolean] Returns +true+ if the volume will be deleted
|
68
|
+
# on instance termination.
|
69
|
+
attribute :delete_on_termination?
|
70
|
+
|
71
|
+
populates_from(:describe_volumes) do |resp|
|
95
72
|
if volume = resp.volume_index[self.volume.id] and
|
96
73
|
attachments = volume.attachment_set and
|
97
74
|
attachment = attachments.find do |att|
|
@@ -99,31 +76,47 @@ module AWS
|
|
99
76
|
att.volume_id == self.volume.id &&
|
100
77
|
att.device == self.device
|
101
78
|
end
|
102
|
-
|
103
|
-
|
79
|
+
then
|
80
|
+
attachment
|
104
81
|
end
|
105
82
|
end
|
106
83
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
84
|
+
populates_from(:attach_volume, :detach_volume) do |resp|
|
85
|
+
if
|
86
|
+
resp.volume_id == volume.id and
|
87
|
+
resp.instance_id == instance.id and
|
88
|
+
resp.device == device
|
89
|
+
then
|
90
|
+
resp
|
114
91
|
end
|
115
92
|
end
|
116
93
|
|
94
|
+
# @return [Boolean] Returns true if the attachment exists.
|
95
|
+
def exists?
|
96
|
+
!describe_attachment.nil?
|
97
|
+
end
|
98
|
+
|
99
|
+
# Detaches the volume from its instance.
|
100
|
+
# @option options [Boolean] :force Forces detachment if the
|
101
|
+
# previous detachment attempt did not occur cleanly (logging
|
102
|
+
# into an instance, unmounting the volume, and detaching
|
103
|
+
# normally). This option can lead to data loss or a
|
104
|
+
# corrupted file system. Use this option only as a last
|
105
|
+
# resort to detach a volume from a failed instance. The
|
106
|
+
# instance will not have an opportunity to flush file system
|
107
|
+
# caches or file system metadata. If you use this option,
|
108
|
+
# you must perform file system check and repair procedures.
|
109
|
+
def delete options = {}
|
110
|
+
client.detach_volume(options.merge(resource_options))
|
111
|
+
end
|
112
|
+
|
117
113
|
protected
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
atts[:delete_on_termination?] = (attachment.delete_on_termination? if
|
125
|
-
attachment.respond_to?(:delete_on_termination?))
|
126
|
-
atts
|
114
|
+
def resource_identifiers
|
115
|
+
[
|
116
|
+
[:volume_id, volume.id],
|
117
|
+
[:instance_id, instance.id],
|
118
|
+
[:device, device],
|
119
|
+
]
|
127
120
|
end
|
128
121
|
|
129
122
|
protected
|
@@ -31,22 +31,24 @@ module AWS
|
|
31
31
|
attr_reader :volume
|
32
32
|
|
33
33
|
# @private
|
34
|
-
def initialize
|
34
|
+
def initialize volume, options = {}
|
35
35
|
@volume = volume
|
36
|
-
super
|
36
|
+
super
|
37
37
|
end
|
38
38
|
|
39
39
|
# @yield [attachment] Each attachment of the volume as an
|
40
40
|
# {Attachment} object.
|
41
41
|
# @return [nil]
|
42
|
-
def each
|
43
|
-
volume.attachment_set.each do |
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
42
|
+
def each &block
|
43
|
+
volume.attachment_set.each do |item|
|
44
|
+
|
45
|
+
instance = Instance.new(item.instance_id, :config => config)
|
46
|
+
|
47
|
+
attachment = Attachment.new(self.volume, instance, item.device,
|
48
|
+
:config => config)
|
49
|
+
|
49
50
|
yield(attachment)
|
51
|
+
|
50
52
|
end
|
51
53
|
nil
|
52
54
|
end
|
@@ -19,59 +19,68 @@ module AWS
|
|
19
19
|
# Represents an EC2 availability zone. You can use this class
|
20
20
|
# to get information about the state of an availability zone
|
21
21
|
# that is available to your account.
|
22
|
+
#
|
23
|
+
# @attr_reader [String,nil] region_name Returns the region name
|
24
|
+
# of the availability zone.
|
25
|
+
#
|
26
|
+
# @attr_reader [Symbol] state Returns the state of the availability
|
27
|
+
# zone, e.g. +:available+.
|
28
|
+
#
|
29
|
+
# @attr_reader [Array<String>] messages Returns a list of messages about the
|
30
|
+
# Availability Zone.
|
31
|
+
#
|
22
32
|
class AvailabilityZone < Resource
|
23
33
|
|
34
|
+
# @param [String] name The name of the availability zone.
|
35
|
+
def initialize name, options = {}
|
36
|
+
@name = name
|
37
|
+
if options[:region]
|
38
|
+
options[:region_name] = options[:region].name
|
39
|
+
|
40
|
+
end
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
24
44
|
# @return [String] Returns the name of the availability zone,
|
25
45
|
# e.g. "us-east-1a".
|
26
46
|
attr_reader :name
|
27
47
|
|
28
48
|
alias_method :to_s, :name
|
49
|
+
|
29
50
|
alias_method :to_str, :name
|
30
51
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
@region = opts[:region]
|
35
|
-
super(opts)
|
36
|
-
end
|
52
|
+
attribute :region_name, :static => true
|
53
|
+
|
54
|
+
attribute :state, :as => :zone_state, :to_sym => true
|
37
55
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
translate_output do |value|
|
42
|
-
Region.new(value, :config => config) if value
|
56
|
+
attribute :messages, :as => :message_set do
|
57
|
+
translates_output do |messages|
|
58
|
+
messages ? messages.collect{|m| m.message } : []
|
43
59
|
end
|
44
60
|
end
|
45
61
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
describe_call_attribute :zone_state, :getter => :state, :to_sym => true
|
62
|
+
populates_from(:describe_availability_zones) do |resp|
|
63
|
+
resp.availability_zone_info.find {|az| az.zone_name == name }
|
64
|
+
end
|
50
65
|
|
51
|
-
# @return [
|
52
|
-
|
53
|
-
|
54
|
-
describe_call_attribute :message_set, :getter => :messages do
|
55
|
-
translate_output { |set| set.map { |m| m.message } if set }
|
66
|
+
# @return [Region] Returns the region of this availability zone.
|
67
|
+
def region
|
68
|
+
Region.new(self.region_name, :config => config)
|
56
69
|
end
|
57
70
|
|
58
71
|
protected
|
59
|
-
def
|
60
|
-
|
72
|
+
def describe_call_name
|
73
|
+
:describe_availability_zones
|
61
74
|
end
|
62
75
|
|
63
76
|
protected
|
64
|
-
def
|
65
|
-
|
77
|
+
def inflected_name
|
78
|
+
self.class.inflected_name
|
66
79
|
end
|
67
80
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
resp = client.describe_availability_zones(:zone_names =>
|
72
|
-
[self.name])
|
73
|
-
az = resp.availability_zone_info.first
|
74
|
-
az.send(name)
|
81
|
+
protected
|
82
|
+
def self.inflected_name
|
83
|
+
"zone"
|
75
84
|
end
|
76
85
|
|
77
86
|
end
|
@@ -27,9 +27,8 @@ module AWS
|
|
27
27
|
resp = filtered_request(:describe_availability_zones)
|
28
28
|
resp.availability_zone_info.each do |az|
|
29
29
|
zone = AvailabilityZone.new(az.zone_name,
|
30
|
-
:
|
31
|
-
:config => config
|
32
|
-
)
|
30
|
+
:region_name => az.region_name,
|
31
|
+
:config => config)
|
33
32
|
yield(zone)
|
34
33
|
end
|
35
34
|
nil
|
data/lib/aws/ec2/elastic_ip.rb
CHANGED
@@ -15,41 +15,43 @@ require 'aws/ec2/resource'
|
|
15
15
|
|
16
16
|
module AWS
|
17
17
|
class EC2
|
18
|
+
|
19
|
+
#
|
20
|
+
# @attr_reader [String,nil] instance_id Returns the instance id if
|
21
|
+
# assigned to an EC2 instance, nil otherwise.
|
22
|
+
#
|
18
23
|
class ElasticIp < Resource
|
19
24
|
|
20
25
|
def initialize public_ip, options = {}
|
21
26
|
@public_ip = public_ip
|
22
|
-
@instance_id = options[:instance_id]
|
23
27
|
super
|
24
28
|
end
|
25
29
|
|
26
|
-
# @private
|
27
|
-
def self.describe_call_name; :describe_addresses; end
|
28
|
-
|
29
|
-
# @private
|
30
|
-
def describe_call_name; self.class.describe_call_name; end
|
31
|
-
|
32
30
|
# @return [String] The public IP address.
|
33
31
|
attr_reader :public_ip
|
34
32
|
|
35
33
|
alias_method :ip_address, :public_ip
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
attribute :instance_id
|
36
|
+
|
37
|
+
populates_from(:describe_addresses) do |resp|
|
38
|
+
resp.address_index[public_ip]
|
39
|
+
end
|
41
40
|
|
42
41
|
# @return [Boolean] Returns true if this IP address is attached to
|
43
42
|
# an EC2 instance.
|
44
43
|
def associated?
|
45
44
|
!!instance_id
|
46
45
|
end
|
46
|
+
|
47
47
|
alias_method :attached?, :associated?
|
48
48
|
|
49
49
|
# @return [Instance,nil] If associated, returns the {Instance} this
|
50
50
|
# elastic IP address is associated to, nil otherwise.
|
51
51
|
def instance
|
52
|
-
|
52
|
+
if instance_id = self.instance_id
|
53
|
+
Instance.new(instance_id, :config => config)
|
54
|
+
end
|
53
55
|
end
|
54
56
|
|
55
57
|
# Releases the elastic IP address.
|
@@ -57,10 +59,10 @@ module AWS
|
|
57
59
|
# (For non-VPC elastic ips) Releasing an IP address automatically
|
58
60
|
# disassociates it from any instance it's associated with.
|
59
61
|
#
|
60
|
-
# @return [
|
62
|
+
# @return [nil]
|
61
63
|
def delete
|
62
|
-
client.release_address(
|
63
|
-
|
64
|
+
client.release_address(resource_options)
|
65
|
+
nil
|
64
66
|
end
|
65
67
|
|
66
68
|
alias_method :release, :delete
|
@@ -68,13 +70,12 @@ module AWS
|
|
68
70
|
# Disassociates this elastic IP address from an EC2 instance.
|
69
71
|
# Raises an exception if this elastic IP is not currently
|
70
72
|
# associated with an instance.
|
71
|
-
# @return [
|
73
|
+
# @return [nil]
|
72
74
|
def disassociate
|
73
|
-
client.disassociate_address(
|
74
|
-
|
75
|
+
client.disassociate_address(resource_options)
|
76
|
+
nil
|
75
77
|
end
|
76
78
|
|
77
|
-
# @private
|
78
79
|
# @return [String] Returns the public IP address
|
79
80
|
def to_s
|
80
81
|
public_ip.to_s
|
@@ -94,13 +95,15 @@ module AWS
|
|
94
95
|
|
95
96
|
# @private
|
96
97
|
protected
|
97
|
-
def
|
98
|
-
|
98
|
+
def describe_call_name
|
99
|
+
:describe_addresses
|
99
100
|
end
|
100
101
|
|
101
102
|
# @private
|
102
103
|
protected
|
103
|
-
def
|
104
|
+
def self.describe_call_name
|
105
|
+
:describe_addresses
|
106
|
+
end
|
104
107
|
|
105
108
|
end
|
106
109
|
end
|
@@ -67,8 +67,11 @@ module AWS
|
|
67
67
|
response = filtered_request(:describe_addresses)
|
68
68
|
response.addresses_set.each do |address|
|
69
69
|
|
70
|
-
|
71
|
-
|
70
|
+
options = {}
|
71
|
+
options[:config] = config
|
72
|
+
options[:instance_id] = address.instance_id
|
73
|
+
|
74
|
+
elastic_ip = ElasticIp.new(address.public_ip, options)
|
72
75
|
|
73
76
|
yield(elastic_ip)
|
74
77
|
|