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
data/lib/aws.rb
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
require 'aws/core'
|
15
15
|
|
16
16
|
require 'aws/auto_scaling/config'
|
17
|
+
require 'aws/cloud_formation/config'
|
17
18
|
require 'aws/dynamo_db/config'
|
18
19
|
require 'aws/ec2/config'
|
19
20
|
require 'aws/elb/config'
|
@@ -29,6 +30,7 @@ require 'aws/sts/config'
|
|
29
30
|
module AWS
|
30
31
|
register_autoloads(self) do
|
31
32
|
autoload :AutoScaling, 'auto_scaling'
|
33
|
+
autoload :CloudFormation, 'cloud_formation'
|
32
34
|
autoload :DynamoDB, 'dynamo_db'
|
33
35
|
autoload :EC2, 'ec2'
|
34
36
|
autoload :ELB, 'elb'
|
@@ -0,0 +1,204 @@
|
|
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
|
+
:operations:
|
16
|
+
CreateStack:
|
17
|
+
:input:
|
18
|
+
StackName:
|
19
|
+
- :string
|
20
|
+
- :required
|
21
|
+
TemplateBody:
|
22
|
+
- :string
|
23
|
+
TemplateURL:
|
24
|
+
- :string
|
25
|
+
Parameters:
|
26
|
+
- :membered_list:
|
27
|
+
- :structure:
|
28
|
+
ParameterKey:
|
29
|
+
- :string
|
30
|
+
ParameterValue:
|
31
|
+
- :string
|
32
|
+
DisableRollback:
|
33
|
+
- :boolean
|
34
|
+
TimeoutInMinutes:
|
35
|
+
- :integer
|
36
|
+
NotificationARNs:
|
37
|
+
- :membered_list:
|
38
|
+
- :string
|
39
|
+
Capabilities:
|
40
|
+
- :membered_list:
|
41
|
+
- :string
|
42
|
+
OnFailure:
|
43
|
+
- :string
|
44
|
+
:output: []
|
45
|
+
DeleteStack:
|
46
|
+
:input:
|
47
|
+
StackName:
|
48
|
+
- :string
|
49
|
+
- :required
|
50
|
+
:output: []
|
51
|
+
DescribeStacks:
|
52
|
+
:input:
|
53
|
+
StackName:
|
54
|
+
- :string
|
55
|
+
:output:
|
56
|
+
- Stacks:
|
57
|
+
- :list: member
|
58
|
+
- member:
|
59
|
+
- Parameters:
|
60
|
+
- :list: member
|
61
|
+
- CreationTime:
|
62
|
+
- :timestamp
|
63
|
+
- LastUpdatedTime:
|
64
|
+
- :timestamp
|
65
|
+
- DisableRollback:
|
66
|
+
- :boolean
|
67
|
+
- NotificationARNs:
|
68
|
+
- :list: member
|
69
|
+
- TimeoutInMinutes:
|
70
|
+
- :integer
|
71
|
+
- Capabilities:
|
72
|
+
- :list: member
|
73
|
+
- Outputs:
|
74
|
+
- :list: member
|
75
|
+
ListStacks:
|
76
|
+
:input:
|
77
|
+
NextToken:
|
78
|
+
- :string
|
79
|
+
StackStatusFilter:
|
80
|
+
- :membered_list:
|
81
|
+
- :string
|
82
|
+
:output:
|
83
|
+
- StackSummaries:
|
84
|
+
- :list: member
|
85
|
+
- member:
|
86
|
+
- CreationTime:
|
87
|
+
- :timestamp
|
88
|
+
- LastUpdatedTime:
|
89
|
+
- :timestamp
|
90
|
+
- DeletionTime:
|
91
|
+
- :timestamp
|
92
|
+
GetTemplate:
|
93
|
+
:input:
|
94
|
+
StackName:
|
95
|
+
- :string
|
96
|
+
- :required
|
97
|
+
:output: []
|
98
|
+
ListStackResources:
|
99
|
+
:input:
|
100
|
+
StackName:
|
101
|
+
- :string
|
102
|
+
- :required
|
103
|
+
NextToken:
|
104
|
+
- :string
|
105
|
+
:output:
|
106
|
+
- StackResourceSummaries:
|
107
|
+
- :list: member
|
108
|
+
- member:
|
109
|
+
- LastUpdatedTimestamp:
|
110
|
+
- :timestamp
|
111
|
+
DescribeStackResource:
|
112
|
+
:input:
|
113
|
+
StackName:
|
114
|
+
- :string
|
115
|
+
- :required
|
116
|
+
LogicalResourceId:
|
117
|
+
- :string
|
118
|
+
- :required
|
119
|
+
:output:
|
120
|
+
- StackResourceDetail:
|
121
|
+
- LastUpdatedTimestamp:
|
122
|
+
- :timestamp
|
123
|
+
DescribeStackResources:
|
124
|
+
:input:
|
125
|
+
StackName:
|
126
|
+
- :string
|
127
|
+
LogicalResourceId:
|
128
|
+
- :string
|
129
|
+
PhysicalResourceId:
|
130
|
+
- :string
|
131
|
+
:output:
|
132
|
+
- StackResources:
|
133
|
+
- :list: member
|
134
|
+
- member:
|
135
|
+
- Timestamp:
|
136
|
+
- :timestamp
|
137
|
+
UpdateStack:
|
138
|
+
:input:
|
139
|
+
StackName:
|
140
|
+
- :string
|
141
|
+
- :required
|
142
|
+
TemplateBody:
|
143
|
+
- :string
|
144
|
+
TemplateURL:
|
145
|
+
- :string
|
146
|
+
Parameters:
|
147
|
+
- :membered_list:
|
148
|
+
- :structure:
|
149
|
+
ParameterKey:
|
150
|
+
- :string
|
151
|
+
ParameterValue:
|
152
|
+
- :string
|
153
|
+
Capabilities:
|
154
|
+
- :membered_list:
|
155
|
+
- :string
|
156
|
+
:output: []
|
157
|
+
DescribeStackEvents:
|
158
|
+
:input:
|
159
|
+
StackName:
|
160
|
+
- :string
|
161
|
+
NextToken:
|
162
|
+
- :string
|
163
|
+
:output:
|
164
|
+
- StackEvents:
|
165
|
+
- :list: member
|
166
|
+
- member:
|
167
|
+
- Timestamp:
|
168
|
+
- :timestamp
|
169
|
+
ValidateTemplate:
|
170
|
+
:input:
|
171
|
+
TemplateBody:
|
172
|
+
- :string
|
173
|
+
TemplateURL:
|
174
|
+
- :string
|
175
|
+
:output:
|
176
|
+
- Parameters:
|
177
|
+
- :list: member
|
178
|
+
- member:
|
179
|
+
- NoEcho:
|
180
|
+
- :boolean
|
181
|
+
- Capabilities:
|
182
|
+
- :list: member
|
183
|
+
EstimateTemplateCost:
|
184
|
+
:input:
|
185
|
+
TemplateBody:
|
186
|
+
- :string
|
187
|
+
TemplateURL:
|
188
|
+
- :string
|
189
|
+
Parameters:
|
190
|
+
- :membered_list:
|
191
|
+
- :structure:
|
192
|
+
ParameterKey:
|
193
|
+
- :string
|
194
|
+
ParameterValue:
|
195
|
+
- :string
|
196
|
+
:output: []
|
197
|
+
CreateUploadBucket:
|
198
|
+
:input: {}
|
199
|
+
:output: []
|
200
|
+
:client_errors:
|
201
|
+
LimitExceededException: []
|
202
|
+
AlreadyExistsException: []
|
203
|
+
InsufficientCapabilitiesException: []
|
204
|
+
:server_errors: {}
|
@@ -25,7 +25,6 @@
|
|
25
25
|
- :required
|
26
26
|
PublicIp:
|
27
27
|
- :string
|
28
|
-
- :required
|
29
28
|
AllocationId:
|
30
29
|
- :string
|
31
30
|
NetworkInterfaceId:
|
@@ -1004,7 +1003,6 @@
|
|
1004
1003
|
:input:
|
1005
1004
|
PublicIp:
|
1006
1005
|
- :string
|
1007
|
-
- :required
|
1008
1006
|
AssociationId:
|
1009
1007
|
- :string
|
1010
1008
|
:output: []
|
data/lib/aws/auto_scaling.rb
CHANGED
@@ -115,7 +115,7 @@ module AWS
|
|
115
115
|
|
116
116
|
# @return [AutoScaling::InstancesCollection] Returns a collection of
|
117
117
|
# {AutoScaling::Instance} objects. Each of these is a small
|
118
|
-
# wrapper around an {
|
118
|
+
# wrapper around an {EC2::Instance} with additional attributes.
|
119
119
|
def instances
|
120
120
|
InstanceCollection.new(:config => config)
|
121
121
|
end
|
@@ -18,10 +18,10 @@ module AWS
|
|
18
18
|
#
|
19
19
|
# == Getting Auto Scaling Instances
|
20
20
|
#
|
21
|
-
# If you know the EC2 instance id, you can use {#[]}
|
22
|
-
# Auto Scaling instance.
|
21
|
+
# If you know the EC2 instance id, you can use {InstanceCollection#[]}
|
22
|
+
# to get the Auto Scaling instance.
|
23
23
|
#
|
24
|
-
# instance = auto_scaling.
|
24
|
+
# instance = auto_scaling.instances['i-1234578']
|
25
25
|
# instance.health_statue #=> :healthy
|
26
26
|
# instance.ec2_instance #=> <AWS::EC2::Instance instance_id:i-1234578>
|
27
27
|
#
|
@@ -150,7 +150,7 @@ module AWS
|
|
150
150
|
|
151
151
|
# Terminates the current Auto Scaling instance.
|
152
152
|
#
|
153
|
-
# @
|
153
|
+
# @param [Boolean] decrement_desired_capacity Specifies whether or not
|
154
154
|
# terminating this instance should also decrement the size of
|
155
155
|
# the AutoScalingGroup.
|
156
156
|
#
|
@@ -130,8 +130,8 @@ module AWS
|
|
130
130
|
end
|
131
131
|
alias_method :put, :create
|
132
132
|
|
133
|
-
# @
|
134
|
-
# @
|
133
|
+
# @yield [notification_config]
|
134
|
+
# @yieldparam [NotificationConfiguration] notification_config
|
135
135
|
def each &block
|
136
136
|
|
137
137
|
#
|
@@ -0,0 +1,287 @@
|
|
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
|
+
require 'aws/core'
|
15
|
+
require 'aws/cloud_formation/config'
|
16
|
+
|
17
|
+
module AWS
|
18
|
+
|
19
|
+
# = AWS::CloudFormation
|
20
|
+
#
|
21
|
+
# Provides an expressive, object-oriented interface to AWS CloudFormation.
|
22
|
+
#
|
23
|
+
# == Credentials
|
24
|
+
#
|
25
|
+
# You can setup default credentials for all AWS services via
|
26
|
+
# AWS.config:
|
27
|
+
#
|
28
|
+
# AWS.config(
|
29
|
+
# :access_key_id => 'YOUR_ACCESS_KEY_ID',
|
30
|
+
# :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
|
31
|
+
#
|
32
|
+
# Or you can set them directly on the CloudFormation interface:
|
33
|
+
#
|
34
|
+
# cf = AWS::CloudFormation.new(
|
35
|
+
# :access_key_id => 'YOUR_ACCESS_KEY_ID',
|
36
|
+
# :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
|
37
|
+
#
|
38
|
+
# = Stacks
|
39
|
+
#
|
40
|
+
# This is the starting point for working with CloudFormation.
|
41
|
+
#
|
42
|
+
# == Creating a Stack
|
43
|
+
#
|
44
|
+
# You can create a CloudFormation stack with a name and a template.
|
45
|
+
#
|
46
|
+
# template = <<-TEMPLATE
|
47
|
+
# {
|
48
|
+
# "AWSTemplateFormatVersion" : "2010-09-09",
|
49
|
+
# "Description": "A simple template",
|
50
|
+
# "Resources": {
|
51
|
+
# "web": {
|
52
|
+
# "Type": "AWS::EC2::Instance",
|
53
|
+
# "Properties": {
|
54
|
+
# "ImageId": "ami-41814f28"
|
55
|
+
# }
|
56
|
+
# }
|
57
|
+
# }
|
58
|
+
# }
|
59
|
+
# TEMPLATE
|
60
|
+
#
|
61
|
+
# cfm = AWS::CloudFormation.new
|
62
|
+
# stack = cfm.stacks.create('stack-name', template)
|
63
|
+
#
|
64
|
+
# See {StackCollection#create} for more information on creating templates
|
65
|
+
# with capabilities and parameters.
|
66
|
+
#
|
67
|
+
# == Getting a Stack
|
68
|
+
#
|
69
|
+
# Given a name, you can fetch a {Stack}.
|
70
|
+
#
|
71
|
+
# stack = cfm.stacks['stack-name']
|
72
|
+
#
|
73
|
+
# == Enumerating Stacks
|
74
|
+
#
|
75
|
+
# You can enumerate stacks in two ways. You can enumerate {Stack}
|
76
|
+
# objects or stack summaries (simple hashes). You can filter the stack
|
77
|
+
# summary collection by a status.
|
78
|
+
#
|
79
|
+
# # enumerating all stack objects
|
80
|
+
# cfm.stacks.each do |stack|
|
81
|
+
# # ...
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# # enumerating stack summaries (hashes)
|
85
|
+
# cfm.stack_summaries.each do |stack_summary|
|
86
|
+
# # ...
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# # filtering stack summaries by status
|
90
|
+
# cfm.stack_summaries.with_status(:create_failed).each do |summary|
|
91
|
+
# puts summary.to_yaml
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# == Template
|
95
|
+
#
|
96
|
+
# You can fetch the template body for a stack as a JSON string.
|
97
|
+
#
|
98
|
+
# cfm.stacks['stack-name'].template
|
99
|
+
# #=> "{...}"
|
100
|
+
#
|
101
|
+
# You can update the template for a {Stack} with the {Stack#update} method:
|
102
|
+
#
|
103
|
+
# cfm.stacks['stack-name'].update(:template => new_template)
|
104
|
+
#
|
105
|
+
# == Stack Events
|
106
|
+
#
|
107
|
+
# You can enumerate events for a stack.
|
108
|
+
#
|
109
|
+
# stack.events.each do |event|
|
110
|
+
# puts "#{event.physical_resource_id}: #{event.resource_status}"
|
111
|
+
# end
|
112
|
+
#
|
113
|
+
# See {StackEvent} for a complete list of event attributes.
|
114
|
+
#
|
115
|
+
# == Stack Resources
|
116
|
+
#
|
117
|
+
# You can enumerate stack resources or request a stack resource by its
|
118
|
+
# logical resource id.
|
119
|
+
#
|
120
|
+
# # enumerating stack resources
|
121
|
+
# stack.resources.each do |resource|
|
122
|
+
# # ...
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# # getting a resource by its logical id
|
126
|
+
# res = stack.resources['logical-resource-id']
|
127
|
+
# puts res.physical_resource_id
|
128
|
+
#
|
129
|
+
# If you need a stack resource, but only have its physical resource
|
130
|
+
# id, then you can call {CloudFormation#stack_resource}.
|
131
|
+
#
|
132
|
+
# stack_resource = cfm.stack_resource('physical-resource-id')
|
133
|
+
#
|
134
|
+
# == Stack Resource Summaries
|
135
|
+
#
|
136
|
+
# As an alternative to stack resources, you can enumerate stack
|
137
|
+
# resource summaries (hashes).
|
138
|
+
#
|
139
|
+
# # enumerate all resources, this collection can not be filtered
|
140
|
+
# stack.resource_summaries.each do |summary|
|
141
|
+
# # ...
|
142
|
+
# end
|
143
|
+
#
|
144
|
+
class CloudFormation
|
145
|
+
|
146
|
+
AWS.register_autoloads(self, 'aws/cloud_formation') do
|
147
|
+
autoload :Client, 'client'
|
148
|
+
autoload :Errors, 'errors'
|
149
|
+
autoload :Request, 'request'
|
150
|
+
autoload :Stack, 'stack'
|
151
|
+
autoload :StackCollection, 'stack_collection'
|
152
|
+
autoload :StackEvent, 'stack_event'
|
153
|
+
autoload :StackEventCollection, 'stack_event_collection'
|
154
|
+
autoload :StackOptions, 'stack_options'
|
155
|
+
autoload :StackOutput, 'stack_output'
|
156
|
+
autoload :StackSummaryCollection, 'stack_summary_collection'
|
157
|
+
autoload :StackResource, 'stack_resource'
|
158
|
+
autoload :StackResourceCollection, 'stack_resource_collection'
|
159
|
+
autoload :StackResourceSummaryCollection, 'stack_resource_summary_collection'
|
160
|
+
end
|
161
|
+
|
162
|
+
include Core::ServiceInterface
|
163
|
+
include StackOptions
|
164
|
+
|
165
|
+
# @return [StackCollection]
|
166
|
+
def stacks
|
167
|
+
StackCollection.new(:config => config)
|
168
|
+
end
|
169
|
+
|
170
|
+
# @return [StackSummaryCollection]
|
171
|
+
def stack_summaries
|
172
|
+
StackSummaryCollection.new(:config => config)
|
173
|
+
end
|
174
|
+
|
175
|
+
# Returns a stack resource with the given physical resource
|
176
|
+
# id.
|
177
|
+
#
|
178
|
+
# resource = cfm.stack_resource('i-123456789')
|
179
|
+
#
|
180
|
+
# Alternatively, you may pass a stack name and logical resource id:
|
181
|
+
#
|
182
|
+
# resource = cfm.stack_resource('stack-name', 'logical-resource-id')
|
183
|
+
#
|
184
|
+
# @overload stack_resource(physical_resource_id)
|
185
|
+
# @param [String] physical_resource_id The physical resource id
|
186
|
+
# of the stack resource you want returned.
|
187
|
+
#
|
188
|
+
# @overload stack_resource(stack_name, logical_resource_id)
|
189
|
+
# @param [String] stack_name
|
190
|
+
# @param [String] logical_resource_id
|
191
|
+
#
|
192
|
+
# @return [StackResource] Returns the stack resource with the
|
193
|
+
# given physical resource id.
|
194
|
+
#
|
195
|
+
def stack_resource *args
|
196
|
+
|
197
|
+
client_opts = {}
|
198
|
+
|
199
|
+
if args.size == 1
|
200
|
+
client_opts[:physical_resource_id] = args.first
|
201
|
+
else
|
202
|
+
client_opts[:stack_name] = args[0]
|
203
|
+
client_opts[:logical_resource_id] = args[1]
|
204
|
+
end
|
205
|
+
|
206
|
+
response = client.describe_stack_resources(client_opts)
|
207
|
+
|
208
|
+
details = response.stack_resources.first
|
209
|
+
|
210
|
+
StackResource.new_from(
|
211
|
+
:describe_stack_resource, details,
|
212
|
+
Stack.new(details.stack_name, :config => config),
|
213
|
+
details.logical_resource_id)
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
# Validates the template and returns a hash. If the template is valid,
|
218
|
+
# the returned hash may/will contain the following keys (actual
|
219
|
+
# key list depends on the template).
|
220
|
+
#
|
221
|
+
# * +:description+
|
222
|
+
# * +:capabilities+
|
223
|
+
# * +:capabilities_reason+
|
224
|
+
# * +:parameters+
|
225
|
+
#
|
226
|
+
# If the template is not parseable, then a hash will the following
|
227
|
+
# keys will be returned:
|
228
|
+
#
|
229
|
+
# * +:code+
|
230
|
+
# * +:message+
|
231
|
+
#
|
232
|
+
# @return [Hash]
|
233
|
+
#
|
234
|
+
def validate_template template
|
235
|
+
begin
|
236
|
+
|
237
|
+
client_opts = {}
|
238
|
+
client_opts[:template] = template
|
239
|
+
apply_template(client_opts)
|
240
|
+
resp = client.validate_template(client_opts)
|
241
|
+
|
242
|
+
results = {}
|
243
|
+
[
|
244
|
+
:capabilities,
|
245
|
+
:capabilities_reason,
|
246
|
+
:description,
|
247
|
+
].each do |method|
|
248
|
+
if resp.respond_to?(method)
|
249
|
+
results[method] = resp.send(method)
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
if resp.respond_to?(:parameters)
|
254
|
+
results[:parameters] = resp.parameters.collect(&:to_hash)
|
255
|
+
end
|
256
|
+
|
257
|
+
results
|
258
|
+
|
259
|
+
rescue CloudFormation::Errors::ValidationError => e
|
260
|
+
|
261
|
+
results = {}
|
262
|
+
results[:code] = e.code
|
263
|
+
results[:message] = e.message
|
264
|
+
results
|
265
|
+
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
# @param (see Stack#template=)
|
270
|
+
#
|
271
|
+
# @param [Hash] parameters A hash that specifies the input
|
272
|
+
# parameters for the template.
|
273
|
+
#
|
274
|
+
# @return [String] Returns a URL to the AWS Simple Monthly Calculator
|
275
|
+
# with a query string that describes the resources required to run
|
276
|
+
# the template.
|
277
|
+
#
|
278
|
+
def estimate_template_cost template, parameters = {}
|
279
|
+
client_opts = {}
|
280
|
+
client_opts[:template] = template
|
281
|
+
apply_template(client_opts)
|
282
|
+
apply_parameters(client_opts)
|
283
|
+
client.estimate_template_cost(client_opts).url
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
end
|