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