aws-sdk 1.3.9 → 1.4.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.
Files changed (34) hide show
  1. data/lib/aws.rb +2 -0
  2. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +204 -0
  3. data/lib/aws/api_config/EC2-2011-12-15.yml +0 -2
  4. data/lib/aws/auto_scaling.rb +1 -1
  5. data/lib/aws/auto_scaling/group.rb +1 -1
  6. data/lib/aws/auto_scaling/instance.rb +4 -4
  7. data/lib/aws/auto_scaling/notification_configuration_collection.rb +2 -2
  8. data/lib/aws/cloud_formation.rb +287 -0
  9. data/lib/aws/cloud_formation/client.rb +33 -0
  10. data/lib/aws/cloud_formation/client/xml.rb +32 -0
  11. data/lib/aws/cloud_formation/config.rb +18 -0
  12. data/lib/aws/cloud_formation/errors.rb +26 -0
  13. data/lib/aws/cloud_formation/request.rb +30 -0
  14. data/lib/aws/cloud_formation/stack.rb +255 -0
  15. data/lib/aws/cloud_formation/stack_collection.rb +206 -0
  16. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  17. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  18. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  19. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  20. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  21. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  22. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
  23. data/lib/aws/cloud_formation/stack_summary.rb +71 -0
  24. data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
  25. data/lib/aws/core.rb +5 -1
  26. data/lib/aws/core/configuration.rb +4 -1
  27. data/lib/aws/core/resource.rb +16 -0
  28. data/lib/aws/core/response.rb +7 -5
  29. data/lib/aws/ec2/elastic_ip.rb +53 -4
  30. data/lib/aws/ec2/elastic_ip_collection.rb +20 -7
  31. data/lib/aws/ec2/instance.rb +28 -7
  32. data/lib/aws/simple_email_service.rb +4 -6
  33. data/lib/aws/sts/request.rb +7 -1
  34. metadata +23 -5
@@ -0,0 +1,33 @@
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 Client < Core::Client
17
+
18
+ AWS.register_autoloads(self, 'aws/cloud_formation/client') do
19
+ autoload :XML, 'xml'
20
+ end
21
+
22
+ include Core::ConfiguredClientMethods
23
+
24
+ API_VERSION = '2010-05-15'
25
+
26
+ # @private
27
+ REQUEST_CLASS = CloudFormation::Request
28
+
29
+ configure_client
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
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 Client < Core::Client
17
+ # @private
18
+ module XML
19
+
20
+ include Core::ConfiguredXmlGrammars
21
+ extend Core::IgnoreResultElement
22
+
23
+ BaseError = Core::XmlGrammar.customize do
24
+ element("Error") { ignore }
25
+ end
26
+
27
+ define_configured_grammars
28
+
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,18 @@
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
+ AWS::Core::Configuration.module_eval do
15
+
16
+ add_service 'CloudFormation', 'cloud_formation', 'cloudformation.us-east-1.amazonaws.com'
17
+
18
+ end
@@ -0,0 +1,26 @@
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
+ # @private
18
+ module Errors
19
+
20
+ BASE_ERROR_GRAMMAR = Client::XML::BaseError
21
+
22
+ include Core::LazyErrorClasses
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
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
+ # @private
18
+ class Request < Core::Http::Request
19
+
20
+ include Core::AuthorizeV4
21
+ include Core::AuthorizeWithSessionToken
22
+
23
+ def service
24
+ 'cloudformation'
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,255 @@
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
+
15
+ module AWS
16
+ class CloudFormation
17
+
18
+ # @attr_reader [String] template Returns the stack's template as a JSON
19
+ # string.
20
+ #
21
+ # @attr_reader [Time] creation_time The time the stack was created.
22
+ #
23
+ # @attr_reader [Time,nil] last_updated_time The time the stack was
24
+ # last updated.
25
+ #
26
+ # @attr_reader [String] stack_id Unique stack identifier.
27
+ #
28
+ # @attr_reader [Symbol] status The status of the stack.
29
+ #
30
+ # @attr_reader [String] status_reason Success/Failure message
31
+ # associated with the +status+.
32
+ #
33
+ # @attr_reader [Array<String>] capabilities The capabilities
34
+ # allowed in the stack.
35
+ #
36
+ # @attr_reader [String] description User defined description
37
+ # associated with the stack.
38
+ #
39
+ # @attr_reader [Boolean] disable_rollback Specifies if the stack
40
+ # is rolled back due to stack creation errors.
41
+ #
42
+ # @attr_reader [Array<String>] notification_arns
43
+ # SNS topic ARNs to which stack related events are published.
44
+ #
45
+ # @attr_reader [Hash] parameters Returns a hash of stack parameters.
46
+ #
47
+ # @attr_reader [Integer] timeout
48
+ # The number of minutes within the stack creation should complete.
49
+ #
50
+ class Stack < Core::Resource
51
+
52
+ include StackOptions
53
+
54
+ # @private
55
+ def initialize name, options = {}
56
+ @name = name
57
+ super
58
+ end
59
+
60
+ # @return [String] Returns the stack name.
61
+ attr_reader :name
62
+
63
+ define_attribute_type :template
64
+
65
+ define_attribute_type :describe
66
+
67
+ ## returned by GetTemplate
68
+
69
+ template_attribute :template, :as => :template_body
70
+
71
+ alias_method :template_body, :template
72
+
73
+ ## returned by DescribeStacks
74
+
75
+ describe_attribute :creation_time, :static => true
76
+
77
+ describe_attribute :last_updated_time
78
+
79
+ describe_attribute :stack_id, :static => true
80
+
81
+ describe_attribute :status, :as => :stack_status
82
+
83
+ describe_attribute :status_reason, :as => :stack_status_reason
84
+
85
+ describe_attribute :capabilities
86
+
87
+ describe_attribute :description
88
+
89
+ describe_attribute :disable_rollback, :as => :disable_rollback?
90
+
91
+ alias_method :disable_rollback?, :disable_rollback
92
+
93
+ describe_attribute :notification_arns
94
+
95
+ describe_attribute :output_details, :as => :outputs
96
+
97
+ protected :output_details
98
+
99
+ describe_attribute :parameters do
100
+ translates_output do |params|
101
+ params.inject({}) do |hash,param|
102
+ hash.merge(param.parameter_key => param.parameter_value)
103
+ end
104
+ end
105
+ end
106
+
107
+ describe_attribute :timeout, :as => :timeout_in_minutes
108
+
109
+ alias_method :timeout_in_minutes, :timeout
110
+
111
+ ## attribute providers
112
+
113
+ provider(:describe_stacks) do |provider|
114
+ provider.find do |resp|
115
+ resp.stacks.find{|stack| stack.stack_name == name }
116
+ end
117
+ provider.provides *describe_attributes.keys
118
+ end
119
+
120
+ provider(:get_template) do |provider|
121
+ provider.find do |resp|
122
+ resp if resp.request_options[:stack_name] == name
123
+ end
124
+ provider.provides *template_attributes.keys
125
+ end
126
+
127
+ # @retun [Array<StackOutput>]
128
+ def outputs
129
+ output_details.collect do |o|
130
+ StackOutput.new(self, o.output_key, o.output_value, o.description)
131
+ end
132
+ end
133
+
134
+ # @return [StackEventCollection] Returns a collection that represents
135
+ # all events for this stack.
136
+ def events
137
+ StackEventCollection.new(self)
138
+ end
139
+
140
+ # Returns a stack resource collection that enumerates all resources
141
+ # for this stack.
142
+ #
143
+ # stack.resources.each do |resource|
144
+ # puts "#{resource.resource_type}: #{resource.physical_resource_id}"
145
+ # end
146
+ #
147
+ # If you want a specific resource and you know its logical resource
148
+ # id, you can use this collection to return a reference to it.
149
+ #
150
+ # resource = stack.resources['logical-resource-id']
151
+ #
152
+ # @return [StackResourceCollection]
153
+ #
154
+ def resources
155
+ StackResourceCollection.new(self)
156
+ end
157
+
158
+ # Returns a stack resource summary collection, that when enumerated
159
+ # yields summary hashes. Each hash has the following keys:
160
+ #
161
+ # * +:last_updated_timestamp+
162
+ # * +:logical_resource_id+
163
+ # * +:physical_resource_id+
164
+ # * +:resource_status+
165
+ # * +:resource_status_reason+
166
+ # * +:resource_type+
167
+ #
168
+ # @return [StackResourceSummaryCollection]
169
+ #
170
+ def resource_summaries
171
+ StackResourceSummaryCollection.new(self)
172
+ end
173
+
174
+ # @param [Hash] options
175
+ #
176
+ # @option options [String,URI,S3::S3Object,Object] :template
177
+ # A new stack template. This may be provided in a number of formats
178
+ # including:
179
+ #
180
+ # * a String, containing the template as a JSON document.
181
+ # * a URL String pointing to the document in S3.
182
+ # * a URI object pointing to the document in S3.
183
+ # * an {S3::S3Object} which contains the template.
184
+ # * an Object which responds to #to_json and returns the template.
185
+ #
186
+ # @option options [Hash] :parameters A hash that specifies the
187
+ # input parameters of the new stack.
188
+ #
189
+ # @option options[Array<String>] :capabilities The list of capabilities
190
+ # that you want to allow in the stack. If your stack contains IAM
191
+ # resources, you must specify the CAPABILITY_IAM value for this
192
+ # parameter; otherwise, this action returns an
193
+ # InsufficientCapabilities error. IAM resources are the following:
194
+ #
195
+ # * AWS::IAM::AccessKey
196
+ # * AWS::IAM::Group
197
+ # * AWS::IAM::Policy
198
+ # * AWS::IAM::User
199
+ # * AWS::IAM::UserToGroupAddition
200
+ #
201
+ # @return [nil]
202
+ #
203
+ def update options = {}
204
+
205
+ client_opts = options.dup
206
+
207
+ apply_stack_name(name, client_opts)
208
+ apply_template(client_opts)
209
+ apply_parameters(client_opts)
210
+
211
+ client.update_stack(client_opts)
212
+
213
+ nil
214
+ end
215
+
216
+ # @return (see CloudFormation#estimate_template_cost)
217
+ def estimate_template_cost
218
+ cloud_formation = CloudFormation.new(:config => config)
219
+ cloud_formation.estimate_template_cost(template, parameters)
220
+ end
221
+
222
+ # Deletes the current stack.
223
+ # @return [nil]
224
+ def delete
225
+ client.delete_stack(:stack_name => name)
226
+ nil
227
+ end
228
+
229
+ # @return [Boolean]
230
+ def exists?
231
+ begin
232
+ client.describe_stacks(resource_options)
233
+ true
234
+ rescue Errors::ValidationError
235
+ false
236
+ end
237
+ end
238
+
239
+ protected
240
+
241
+ def resource_identifiers
242
+ [[:stack_name, name]]
243
+ end
244
+
245
+ def get_resource attribute
246
+ if attribute.name == :template
247
+ client.get_template(resource_options)
248
+ else
249
+ client.describe_stacks(resource_options)
250
+ end
251
+ end
252
+
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,206 @@
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 StackCollection
17
+
18
+ include Core::Collection::Simple
19
+ include StackOptions
20
+
21
+ # @private
22
+ def initialize options = {}
23
+ @status_filter = options[:status_filter]
24
+ super
25
+ end
26
+
27
+ # Creates a new stack.
28
+ #
29
+ # @example Creating a stack with a template string.
30
+ #
31
+ # template = <<-JSON
32
+ # {
33
+ # "AWSTemplateFormatVersion" : "2010-09-09",
34
+ # "Description": "A simple template",
35
+ # "Resources": {
36
+ # "web": {
37
+ # "Type": "AWS::EC2::Instance",
38
+ # "Properties": {
39
+ # "ImageId": "ami-41814f28"
40
+ # }
41
+ # }
42
+ # }
43
+ # }
44
+ # JSON
45
+ # stack = cfm.stacks.create('stack-name', template)
46
+ #
47
+ # @example Creating a stack from an S3 object.
48
+ #
49
+ # template = AWS::S3.new.buckets['templates'].objects['template-1']
50
+ # stack = cfm.stacks.create('stack-name', template)
51
+ #
52
+ # @example Creating a stack with 3 parameters.
53
+ #
54
+ # template = <<-JSON
55
+ # {
56
+ # "AWSTemplateFormatVersion" : "2010-09-09",
57
+ # "Description": "A simple template",
58
+ # "Parameters" : {
59
+ # "KeyName" : {
60
+ # "Description" : "Name of a KeyPair to use with SSH.",
61
+ # "Type" : "String"
62
+ # },
63
+ # "SecurityGroup" : {
64
+ # "Description" : "The security group to launch in.",
65
+ # "Type" : "String"
66
+ # },
67
+ # "InstanceType" : {
68
+ # "Description" : "The size of instance to launch.",
69
+ # "Type" : "String"
70
+ # }
71
+ # },
72
+ # "Resources": {
73
+ # "web": {
74
+ # "Type": "AWS::EC2::Instance",
75
+ # "Properties": {
76
+ # "InstanceType": { "Ref" : "InstanceType" },
77
+ # "SecurityGroups" : [ {"Ref" : "SecurityGroup"} ],
78
+ # "KeyName": { "Ref" : "KeyName" },
79
+ # "ImageId": "ami-41814f28"
80
+ # }
81
+ # }
82
+ # }
83
+ # }
84
+ # JSON
85
+ #
86
+ # stack = cfm.stacks.create('name', template, :parameters => {
87
+ # 'KeyName' => 'key-pair-name',
88
+ # 'SecurityGroup' => 'security-group-name',
89
+ # 'InstanceType' => 'm1.large',
90
+ # })
91
+ #
92
+ # @param [String] stack_name
93
+ #
94
+ # @param [String,URI,S3::S3Object,Object] template The stack template.
95
+ # This may be provided in a number of formats including:
96
+ #
97
+ # * a String, containing the template as a JSON document.
98
+ # * a URL String pointing to the document in S3.
99
+ # * a URI object pointing to the document in S3.
100
+ # * an {S3::S3Object} which contains the template.
101
+ # * an Object which responds to #to_json and returns the template.
102
+ #
103
+ # @param [Hash] options
104
+ #
105
+ # @option options [Array<String>] :capabilities The list of capabilities
106
+ # that you want to allow in the stack. If your stack contains IAM
107
+ # resources, you must specify the CAPABILITY_IAM value for this
108
+ # parameter; otherwise, this action returns an
109
+ # InsufficientCapabilities error. IAM resources are the following:
110
+ #
111
+ # * AWS::IAM::AccessKey
112
+ # * AWS::IAM::Group
113
+ # * AWS::IAM::Policy
114
+ # * AWS::IAM::User
115
+ # * AWS::IAM::UserToGroupAddition
116
+ #
117
+ # @option options [Boolean] :disable_rollback (false)
118
+ # Set to true to disable rollback on stack creation failures.
119
+ #
120
+ # @option options [Object] :notify One or more SNS topics ARN
121
+ # string or {SNS::Topic} objects. This param may be passed
122
+ # as a single value or as an array. CloudFormation will publish
123
+ # stack related events to these topics.
124
+ #
125
+ # @option options [Hash] :parameters A hash that specifies the
126
+ # input parameters of the new stack.
127
+ #
128
+ # @option options [Integer] :timeout The number of minutes
129
+ # that may pass before the stack creation fails. If
130
+ # +:disable_rollback+ is false, the stack will be rolled back.
131
+ #
132
+ # @return [Stack]
133
+ #
134
+ def create stack_name, template, options = {}
135
+
136
+ client_opts = options.dup
137
+ client_opts[:template] = template
138
+
139
+ apply_stack_name(stack_name, client_opts)
140
+ apply_template(client_opts)
141
+ apply_disable_rollback(client_opts)
142
+ apply_notification_arns(client_opts)
143
+ apply_parameters(client_opts)
144
+ apply_timeout(client_opts)
145
+
146
+ resp = client.create_stack(client_opts)
147
+
148
+ Stack.new(stack_name, :config => config, :stack_id => resp.stack_id)
149
+
150
+ end
151
+
152
+ def [] stack_name
153
+ Stack.new(stack_name, :config => config)
154
+ end
155
+
156
+ # Limits the stacks that are enumerated.
157
+ #
158
+ # cloud_formation.stacks.with_status(:create_complete).each do |stack|
159
+ # puts stack.name
160
+ # end
161
+ #
162
+ # @param [Symbol,String] status_filter A status to filter stacks with.
163
+ # Valid values include:
164
+ # * +:create_in_progress+
165
+ # * +:create_failed+
166
+ # * +:create_complete+
167
+ # * +:rollback_in_progress+
168
+ # * +:rollback_failed+
169
+ # * +:rollback_complete+
170
+ # * +:delete_in_progress+
171
+ # * +:delete_failed+
172
+ # * +:delete_complete+
173
+ # * +:update_in_progress+
174
+ # * +:update_complete_cleanup_in_progress+
175
+ # * +:update_complete+
176
+ # * +:update_rollback_in_progress+
177
+ # * +:update_rollback_failed+
178
+ # * +:update_rollback_complete_cleanup_in_progress+
179
+ # * +:update_rollback_complete+
180
+ #
181
+ # @return [StackCollection] Returns a new stack collection that
182
+ # filters the stacks returned by the given status.
183
+ #
184
+ def with_status status_filter
185
+ StackCollection.new(:status_filter => status_filter, :config => config)
186
+ end
187
+
188
+ protected
189
+
190
+ def _each_item options = {}
191
+ client.describe_stacks.stacks.each do |summary|
192
+
193
+ stack = Stack.new_from(
194
+ :describe_stacks,
195
+ summary,
196
+ summary.stack_name,
197
+ :config => config)
198
+
199
+ yield(stack)
200
+
201
+ end
202
+ end
203
+
204
+ end
205
+ end
206
+ end