aws-sdk 1.3.9 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/aws.rb +2 -0
- data/lib/aws/api_config/CloudFormation-2010-05-15.yml +204 -0
- data/lib/aws/api_config/EC2-2011-12-15.yml +0 -2
- data/lib/aws/auto_scaling.rb +1 -1
- data/lib/aws/auto_scaling/group.rb +1 -1
- data/lib/aws/auto_scaling/instance.rb +4 -4
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +2 -2
- data/lib/aws/cloud_formation.rb +287 -0
- data/lib/aws/cloud_formation/client.rb +33 -0
- data/lib/aws/cloud_formation/client/xml.rb +32 -0
- data/lib/aws/cloud_formation/config.rb +18 -0
- data/lib/aws/cloud_formation/errors.rb +26 -0
- data/lib/aws/cloud_formation/request.rb +30 -0
- data/lib/aws/cloud_formation/stack.rb +255 -0
- data/lib/aws/cloud_formation/stack_collection.rb +206 -0
- data/lib/aws/cloud_formation/stack_event.rb +75 -0
- data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
- data/lib/aws/cloud_formation/stack_options.rb +72 -0
- data/lib/aws/cloud_formation/stack_output.rb +53 -0
- data/lib/aws/cloud_formation/stack_resource.rb +117 -0
- data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
- data/lib/aws/cloud_formation/stack_summary.rb +71 -0
- data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
- data/lib/aws/core.rb +5 -1
- data/lib/aws/core/configuration.rb +4 -1
- data/lib/aws/core/resource.rb +16 -0
- data/lib/aws/core/response.rb +7 -5
- data/lib/aws/ec2/elastic_ip.rb +53 -4
- data/lib/aws/ec2/elastic_ip_collection.rb +20 -7
- data/lib/aws/ec2/instance.rb +28 -7
- data/lib/aws/simple_email_service.rb +4 -6
- data/lib/aws/sts/request.rb +7 -1
- metadata +23 -5
@@ -0,0 +1,75 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
|
17
|
+
# = Stack Event
|
18
|
+
#
|
19
|
+
# You can get stack events from a {Stack} object.
|
20
|
+
#
|
21
|
+
# stack = cfm.stacks['stack-name']
|
22
|
+
# stack.events.each do |event|
|
23
|
+
# puts "#{event.timestamp}: #{event.resource_status}"
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
#
|
27
|
+
class StackEvent
|
28
|
+
|
29
|
+
# @private
|
30
|
+
def initialize stack, details
|
31
|
+
@stack = stack
|
32
|
+
details.each_pair do |attr_name,attr_value|
|
33
|
+
instance_variable_set("@#{attr_name}", attr_value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Stack] stack The stack this event belongs to.
|
38
|
+
attr_reader :stack
|
39
|
+
|
40
|
+
# @return [String] event_id The unique ID of this event.
|
41
|
+
attr_reader :event_id
|
42
|
+
|
43
|
+
# @return [String] The logical name of the resource specified
|
44
|
+
# in the template.
|
45
|
+
attr_reader :logical_resource_id
|
46
|
+
|
47
|
+
# @return [String] The name or unique identifier associated with the
|
48
|
+
# physical instance of the resource.
|
49
|
+
attr_reader :physical_resource_id
|
50
|
+
|
51
|
+
# @return [String] BLOB of the properties used to create the resource.
|
52
|
+
attr_reader :resource_properties
|
53
|
+
|
54
|
+
# @return [Symbol] Current status of the resource.
|
55
|
+
attr_reader :resource_status
|
56
|
+
|
57
|
+
# @return [String,nil] Success/failure message associated with the
|
58
|
+
# resource.
|
59
|
+
attr_reader :resource_status_reason
|
60
|
+
|
61
|
+
# @return [String] Type of the resource (e.g. 'AWS::EC2::Instance').
|
62
|
+
attr_reader :resource_type
|
63
|
+
|
64
|
+
# @return [String] The unique ID name of the instance of the stack.
|
65
|
+
attr_reader :stack_id
|
66
|
+
|
67
|
+
# @return [String] The name associated with a stack.
|
68
|
+
attr_reader :stack_name
|
69
|
+
|
70
|
+
# @return [Time] When the status was last updated.
|
71
|
+
attr_reader :timestamp
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
|
17
|
+
class StackEventCollection
|
18
|
+
|
19
|
+
include Core::Collection::Simple
|
20
|
+
|
21
|
+
# @param [Stack] stack
|
22
|
+
# @param [Hash] options
|
23
|
+
def initialize stack, options = {}
|
24
|
+
@stack = stack
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Stack]
|
29
|
+
attr_reader :stack
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def _each_item options = {}
|
34
|
+
options[:stack_name] = stack.name
|
35
|
+
resp = client.describe_stack_events(options)
|
36
|
+
resp.stack_events.each do |details|
|
37
|
+
|
38
|
+
event = StackEvent.new(stack, details.to_hash)
|
39
|
+
|
40
|
+
yield(event)
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
|
17
|
+
# This module provide option helpers for methods operation on stacks.
|
18
|
+
# @private
|
19
|
+
module StackOptions
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def apply_stack_name stack_name, options
|
24
|
+
options[:stack_name] = stack_name
|
25
|
+
end
|
26
|
+
|
27
|
+
def apply_template opts
|
28
|
+
if template = opts.delete(:template)
|
29
|
+
case template
|
30
|
+
when String
|
31
|
+
if template.match(/http/)
|
32
|
+
opts[:template_url] = template
|
33
|
+
else
|
34
|
+
opts[:template_body] = template
|
35
|
+
end
|
36
|
+
when URI then opts[:template_url] = template.to_s
|
37
|
+
when S3::S3Object then opts[:template_body] = template.read
|
38
|
+
else
|
39
|
+
opts[:template_body] = template.to_json
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def apply_disable_rollback options
|
45
|
+
options[:disable_rollback] = options[:disable_rollback] == true
|
46
|
+
end
|
47
|
+
|
48
|
+
def apply_notification_arns options
|
49
|
+
if arns = options.delete(:notify)
|
50
|
+
options[:notification_arns] = Array(arns).collect do |topic|
|
51
|
+
topic.is_a?(SNS::Topic) ? topic.arn : topic
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def apply_parameters options
|
57
|
+
if params = options[:parameters] and params.is_a?(Hash)
|
58
|
+
options[:parameters] = params.inject([]) do |list,(key,value)|
|
59
|
+
list << { :parameter_key => key.to_s, :parameter_value => value }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def apply_timeout options
|
65
|
+
if timeout = options.delete(:timeout)
|
66
|
+
options[:timeout_in_minutes] = timeout
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
class StackOutput
|
17
|
+
|
18
|
+
# @param [Stack] stack
|
19
|
+
# @param [String] key
|
20
|
+
# @param [String] value
|
21
|
+
# @param [String] description
|
22
|
+
def initialize stack, key, value, description
|
23
|
+
@stack = stack
|
24
|
+
@key = key
|
25
|
+
@value = value
|
26
|
+
@description = description
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Stack]
|
30
|
+
attr_reader :stack
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
attr_reader :key
|
34
|
+
|
35
|
+
# @return [String]
|
36
|
+
attr_reader :value
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
attr_reader :description
|
40
|
+
|
41
|
+
# @private
|
42
|
+
def eql? other
|
43
|
+
other.is_a?(StackOutput) and
|
44
|
+
other.stack == stack and
|
45
|
+
other.key == key and
|
46
|
+
other.value == value and
|
47
|
+
other.description == description
|
48
|
+
end
|
49
|
+
alias_method :==, :eql?
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
|
17
|
+
# @attr_reader [String,nil] description
|
18
|
+
# User defined description associated with the resource.
|
19
|
+
#
|
20
|
+
# @attr_reader [String] physical_resource_id
|
21
|
+
# The name or unique identifier that corresponds to a physical instance
|
22
|
+
# ID of a resource supported by AWS CloudFormation.
|
23
|
+
#
|
24
|
+
# @attr_reader [Symbol] resource_status
|
25
|
+
# Current status of the resource.
|
26
|
+
#
|
27
|
+
# @attr_reader [String,nil] resource_status_reason
|
28
|
+
# Success/failure message associated with the resource.
|
29
|
+
#
|
30
|
+
# @attr_reader [String] resource_type
|
31
|
+
# Type of the resource (e.g. 'AWS::EC2::Instance')
|
32
|
+
#
|
33
|
+
# @attr_reader [String] stack_name
|
34
|
+
# The name associated with the stack.
|
35
|
+
#
|
36
|
+
# @attr_reader [String] stack_id
|
37
|
+
# Unique identifier of the stack.
|
38
|
+
#
|
39
|
+
# @attr_reader [Time] last_updated_timestamp
|
40
|
+
# When the status was last updated.
|
41
|
+
#
|
42
|
+
# @attr_reader [String,nil] metadata
|
43
|
+
# The JSON format content of the Metadata attribute declared for the
|
44
|
+
# resource.
|
45
|
+
#
|
46
|
+
class StackResource < Core::Resource
|
47
|
+
|
48
|
+
# @private
|
49
|
+
def initialize stack, logical_resource_id, options = {}
|
50
|
+
@stack = stack
|
51
|
+
@logical_resource_id = logical_resource_id
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Stack]
|
56
|
+
attr_reader :stack
|
57
|
+
|
58
|
+
# @return [String] The logical name of the resource specified in
|
59
|
+
# the template.
|
60
|
+
attr_reader :logical_resource_id
|
61
|
+
|
62
|
+
define_attribute_type :common # return by both describe stack resource methods
|
63
|
+
|
64
|
+
define_attribute_type :detail # returned by DescribeStackResource (singular)
|
65
|
+
|
66
|
+
common_attribute :description, :static => true
|
67
|
+
|
68
|
+
common_attribute :physical_resource_id, :static => true
|
69
|
+
|
70
|
+
common_attribute :resource_status
|
71
|
+
|
72
|
+
common_attribute :resource_status_reason
|
73
|
+
|
74
|
+
common_attribute :resource_type, :static => true
|
75
|
+
|
76
|
+
common_attribute :stack_name, :static => true
|
77
|
+
|
78
|
+
common_attribute :stack_id, :static => true
|
79
|
+
|
80
|
+
# provided by DescribeStackResource
|
81
|
+
|
82
|
+
detail_attribute :last_updated_timestamp
|
83
|
+
|
84
|
+
detail_attribute :metadata
|
85
|
+
|
86
|
+
# this operation returns all attributes
|
87
|
+
populates_from(:describe_stack_resource) do |resp|
|
88
|
+
resp.stack_resource_detail if
|
89
|
+
resp.stack_resource_detail.logical_resource_id == logical_resource_id
|
90
|
+
end
|
91
|
+
|
92
|
+
# This method provides ALL attributes except :metadata. The
|
93
|
+
# :last_updated_timestamp attribute is also provided by
|
94
|
+
# a differnt name (:timestamp instead of :last_updated_timestamp).
|
95
|
+
provider(:describe_stack_resources) do |provider|
|
96
|
+
provider.find do |resp|
|
97
|
+
resp.stack_resources.find do |resource|
|
98
|
+
resource.logical_resource_id == logical_resource_id
|
99
|
+
end
|
100
|
+
end
|
101
|
+
provider.provides *common_attributes.keys
|
102
|
+
provider.provides :last_updated_timestamp, :get_as => :timestamp
|
103
|
+
end
|
104
|
+
|
105
|
+
protected
|
106
|
+
|
107
|
+
def resource_identifiers
|
108
|
+
[[:stack_name, stack.name], [:logical_resource_id, logical_resource_id]]
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_resource attribute = nil
|
112
|
+
client.describe_stack_resource(resource_options)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
5
|
+
# the License is located at
|
6
|
+
#
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
8
|
+
#
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
12
|
+
# language governing permissions and limitations under the License.
|
13
|
+
|
14
|
+
module AWS
|
15
|
+
class CloudFormation
|
16
|
+
|
17
|
+
# = StackResourceCollection
|
18
|
+
#
|
19
|
+
# This collection represents the resources for a single {Stack}.
|
20
|
+
# You can enumerate resources, or request a specific resource
|
21
|
+
# by its logical resource id.
|
22
|
+
#
|
23
|
+
# = Other Ways to Get Resource Details
|
24
|
+
#
|
25
|
+
# If you want to get a {StackResource} by its physical resource
|
26
|
+
# id, then you should use {CloudFormation#get_resource}.
|
27
|
+
#
|
28
|
+
# You can also take a look at {Stack#resource_summaries} for
|
29
|
+
# light-weight hashes of stack resource details.
|
30
|
+
#
|
31
|
+
# @example Enumerating stack resources
|
32
|
+
#
|
33
|
+
# # enumerating all resources for a stack
|
34
|
+
# stack.resources.each do |resource|
|
35
|
+
# puts resource.resource_type + " " + resource.physical_resource_id
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# @example Getting a stack resource by its logical resource id
|
39
|
+
#
|
40
|
+
# resource = stack.resources['web']
|
41
|
+
#
|
42
|
+
class StackResourceCollection
|
43
|
+
|
44
|
+
include Core::Collection::Simple
|
45
|
+
include StackOptions
|
46
|
+
|
47
|
+
# @param [Stack] stack
|
48
|
+
# @param [Hash] options
|
49
|
+
def initialize stack, options = {}
|
50
|
+
@stack = stack
|
51
|
+
super
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Stack]
|
55
|
+
attr_reader :stack
|
56
|
+
|
57
|
+
# @param [String] logical_resource_id
|
58
|
+
# @return [StackResource] Returns a stack resource with the given
|
59
|
+
# logical resource id.
|
60
|
+
def [] logical_resource_id
|
61
|
+
StackResource.new(stack, logical_resource_id)
|
62
|
+
end
|
63
|
+
|
64
|
+
protected
|
65
|
+
|
66
|
+
def _each_item options = {}
|
67
|
+
options[:stack_name] = stack.name
|
68
|
+
response = client.describe_stack_resources(options)
|
69
|
+
response.stack_resources.each do |details|
|
70
|
+
|
71
|
+
stack_resource = StackResource.new_from(
|
72
|
+
:describe_stack_resources,
|
73
|
+
details,
|
74
|
+
self,
|
75
|
+
details.logical_resource_id)
|
76
|
+
|
77
|
+
yield(stack_resource)
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|