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.
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