Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/boto/cloudformation/connection.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d30785e31577 |
---|---|
1 # Copyright (c) 2006-2009 Mitch Garnaat http://garnaat.org/ | |
2 # Copyright (c) 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved | |
3 # | |
4 # Permission is hereby granted, free of charge, to any person obtaining a | |
5 # copy of this software and associated documentation files (the | |
6 # "Software"), to deal in the Software without restriction, including | |
7 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
8 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
9 # persons to whom the Software is furnished to do so, subject to the fol- | |
10 # lowing conditions: | |
11 # | |
12 # The above copyright notice and this permission notice shall be included | |
13 # in all copies or substantial portions of the Software. | |
14 # | |
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
17 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
18 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
21 # IN THE SOFTWARE. | |
22 | |
23 import boto | |
24 from boto.cloudformation.stack import Stack, StackSummary, StackEvent | |
25 from boto.cloudformation.stack import StackResource, StackResourceSummary | |
26 from boto.cloudformation.template import Template | |
27 from boto.connection import AWSQueryConnection | |
28 from boto.regioninfo import RegionInfo | |
29 from boto.compat import json | |
30 | |
31 | |
32 class CloudFormationConnection(AWSQueryConnection): | |
33 """ | |
34 AWS CloudFormation | |
35 AWS CloudFormation enables you to create and manage AWS | |
36 infrastructure deployments predictably and repeatedly. AWS | |
37 CloudFormation helps you leverage AWS products such as Amazon EC2, | |
38 EBS, Amazon SNS, ELB, and Auto Scaling to build highly-reliable, | |
39 highly scalable, cost effective applications without worrying | |
40 about creating and configuring the underlying AWS infrastructure. | |
41 | |
42 With AWS CloudFormation, you declare all of your resources and | |
43 dependencies in a template file. The template defines a collection | |
44 of resources as a single unit called a stack. AWS CloudFormation | |
45 creates and deletes all member resources of the stack together and | |
46 manages all dependencies between the resources for you. | |
47 | |
48 For more information about this product, go to the `CloudFormation | |
49 Product Page`_. | |
50 | |
51 Amazon CloudFormation makes use of other AWS products. If you need | |
52 additional technical information about a specific AWS product, you | |
53 can find the product's technical documentation at | |
54 `http://aws.amazon.com/documentation/`_. | |
55 """ | |
56 APIVersion = boto.config.get('Boto', 'cfn_version', '2010-05-15') | |
57 DefaultRegionName = boto.config.get('Boto', 'cfn_region_name', 'us-east-1') | |
58 DefaultRegionEndpoint = boto.config.get('Boto', 'cfn_region_endpoint', | |
59 'cloudformation.us-east-1.amazonaws.com') | |
60 | |
61 valid_states = ( | |
62 'CREATE_IN_PROGRESS', 'CREATE_FAILED', 'CREATE_COMPLETE', | |
63 'ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'ROLLBACK_COMPLETE', | |
64 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'DELETE_COMPLETE', | |
65 'UPDATE_IN_PROGRESS', 'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS', | |
66 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_IN_PROGRESS', | |
67 'UPDATE_ROLLBACK_FAILED', | |
68 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS', | |
69 'UPDATE_ROLLBACK_COMPLETE') | |
70 | |
71 def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, | |
72 is_secure=True, port=None, proxy=None, proxy_port=None, | |
73 proxy_user=None, proxy_pass=None, debug=0, | |
74 https_connection_factory=None, region=None, path='/', | |
75 converter=None, security_token=None, validate_certs=True, | |
76 profile_name=None): | |
77 if not region: | |
78 region = RegionInfo(self, self.DefaultRegionName, | |
79 self.DefaultRegionEndpoint, CloudFormationConnection) | |
80 self.region = region | |
81 super(CloudFormationConnection, self).__init__(aws_access_key_id, | |
82 aws_secret_access_key, | |
83 is_secure, port, proxy, proxy_port, | |
84 proxy_user, proxy_pass, | |
85 self.region.endpoint, debug, | |
86 https_connection_factory, path, | |
87 security_token, | |
88 validate_certs=validate_certs, | |
89 profile_name=profile_name) | |
90 | |
91 def _required_auth_capability(self): | |
92 return ['hmac-v4'] | |
93 | |
94 def encode_bool(self, v): | |
95 v = bool(v) | |
96 return {True: "true", False: "false"}[v] | |
97 | |
98 def _build_create_or_update_params(self, stack_name, template_body, | |
99 template_url, parameters, disable_rollback, timeout_in_minutes, | |
100 notification_arns, capabilities, on_failure, stack_policy_body, | |
101 stack_policy_url, tags, use_previous_template=None, | |
102 stack_policy_during_update_body=None, | |
103 stack_policy_during_update_url=None): | |
104 """ | |
105 Helper that creates JSON parameters needed by a Stack Create or | |
106 Stack Update call. | |
107 | |
108 :type stack_name: string | |
109 :param stack_name: | |
110 The name associated with the stack. The name must be unique within your | |
111 AWS account. | |
112 | |
113 Must contain only alphanumeric characters (case sensitive) and start | |
114 with an alpha character. Maximum length of the name is 255 | |
115 characters. | |
116 | |
117 :type template_body: string | |
118 :param template_body: Structure containing the template body. (For more | |
119 information, go to `Template Anatomy`_ in the AWS CloudFormation | |
120 User Guide.) | |
121 Conditional: You must pass either `UsePreviousTemplate` or one of | |
122 `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and | |
123 `TemplateUrl` are passed, only `TemplateBody` is used. | |
124 `TemplateBody`. | |
125 | |
126 :type template_url: string | |
127 :param template_url: Location of file containing the template body. The | |
128 URL must point to a template (max size: 307,200 bytes) located in | |
129 an S3 bucket in the same region as the stack. For more information, | |
130 go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. | |
131 Conditional: You must pass either `UsePreviousTemplate` or one of | |
132 `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and | |
133 `TemplateUrl` are passed, only `TemplateBody` is used. | |
134 `TemplateBody`. | |
135 | |
136 :type parameters: list | |
137 :param parameters: A list of key/value tuples that specify input | |
138 parameters for the stack. A 3-tuple (key, value, bool) may be used to | |
139 specify the `UsePreviousValue` option. | |
140 | |
141 :type disable_rollback: boolean | |
142 :param disable_rollback: Set to `True` to disable rollback of the stack | |
143 if stack creation failed. You can specify either `DisableRollback` | |
144 or `OnFailure`, but not both. | |
145 Default: `False` | |
146 | |
147 :type timeout_in_minutes: integer | |
148 :param timeout_in_minutes: The amount of time that can pass before the | |
149 stack status becomes CREATE_FAILED; if `DisableRollback` is not set | |
150 or is set to `False`, the stack will be rolled back. | |
151 | |
152 :type notification_arns: list | |
153 :param notification_arns: The Simple Notification Service (SNS) topic | |
154 ARNs to publish stack related events. You can find your SNS topic | |
155 ARNs using the `SNS console`_ or your Command Line Interface (CLI). | |
156 | |
157 :type capabilities: list | |
158 :param capabilities: The list of capabilities that you want to allow in | |
159 the stack. If your template contains certain resources, you must | |
160 specify the CAPABILITY_IAM value for this parameter; otherwise, | |
161 this action returns an InsufficientCapabilities error. The | |
162 following resources require you to specify the capabilities | |
163 parameter: `AWS::CloudFormation::Stack`_, `AWS::IAM::AccessKey`_, | |
164 `AWS::IAM::Group`_, `AWS::IAM::InstanceProfile`_, | |
165 `AWS::IAM::Policy`_, `AWS::IAM::Role`_, `AWS::IAM::User`_, and | |
166 `AWS::IAM::UserToGroupAddition`_. | |
167 | |
168 :type on_failure: string | |
169 :param on_failure: Determines what action will be taken if stack | |
170 creation fails. This must be one of: DO_NOTHING, ROLLBACK, or | |
171 DELETE. You can specify either `OnFailure` or `DisableRollback`, | |
172 but not both. | |
173 Default: `ROLLBACK` | |
174 | |
175 :type stack_policy_body: string | |
176 :param stack_policy_body: Structure containing the stack policy body. | |
177 (For more information, go to ` Prevent Updates to Stack Resources`_ | |
178 in the AWS CloudFormation User Guide.) | |
179 If you pass `StackPolicyBody` and `StackPolicyURL`, only | |
180 `StackPolicyBody` is used. | |
181 | |
182 :type stack_policy_url: string | |
183 :param stack_policy_url: Location of a file containing the stack | |
184 policy. The URL must point to a policy (max size: 16KB) located in | |
185 an S3 bucket in the same region as the stack. If you pass | |
186 `StackPolicyBody` and `StackPolicyURL`, only `StackPolicyBody` is | |
187 used. | |
188 | |
189 :type tags: list | |
190 :param tags: A set of user-defined `Tags` to associate with this stack, | |
191 represented by key/value pairs. Tags defined for the stack are | |
192 propagated to EC2 resources that are created as part of the stack. | |
193 A maximum number of 10 tags can be specified. | |
194 | |
195 :type use_previous_template: boolean | |
196 :param use_previous_template: Set to `True` to use the previous | |
197 template instead of uploading a new one via `TemplateBody` or | |
198 `TemplateURL`. | |
199 Conditional: You must pass either `UsePreviousTemplate` or one of | |
200 `TemplateBody` or `TemplateUrl`. | |
201 | |
202 :type stack_policy_during_update_body: string | |
203 :param stack_policy_during_update_body: Structure containing the | |
204 temporary overriding stack policy body. If you pass | |
205 `StackPolicyDuringUpdateBody` and `StackPolicyDuringUpdateURL`, | |
206 only `StackPolicyDuringUpdateBody` is used. | |
207 If you want to update protected resources, specify a temporary | |
208 overriding stack policy during this update. If you do not specify a | |
209 stack policy, the current policy that associated with the stack | |
210 will be used. | |
211 | |
212 :type stack_policy_during_update_url: string | |
213 :param stack_policy_during_update_url: Location of a file containing | |
214 the temporary overriding stack policy. The URL must point to a | |
215 policy (max size: 16KB) located in an S3 bucket in the same region | |
216 as the stack. If you pass `StackPolicyDuringUpdateBody` and | |
217 `StackPolicyDuringUpdateURL`, only `StackPolicyDuringUpdateBody` is | |
218 used. | |
219 If you want to update protected resources, specify a temporary | |
220 overriding stack policy during this update. If you do not specify a | |
221 stack policy, the current policy that is associated with the stack | |
222 will be used. | |
223 | |
224 :rtype: dict | |
225 :return: JSON parameters represented as a Python dict. | |
226 """ | |
227 params = {'ContentType': "JSON", 'StackName': stack_name, | |
228 'DisableRollback': self.encode_bool(disable_rollback)} | |
229 if template_body: | |
230 params['TemplateBody'] = template_body | |
231 if template_url: | |
232 params['TemplateURL'] = template_url | |
233 if use_previous_template is not None: | |
234 params['UsePreviousTemplate'] = self.encode_bool(use_previous_template) | |
235 if template_body and template_url: | |
236 boto.log.warning("If both TemplateBody and TemplateURL are" | |
237 " specified, only TemplateBody will be honored by the API") | |
238 if parameters and len(parameters) > 0: | |
239 for i, parameter_tuple in enumerate(parameters): | |
240 key, value = parameter_tuple[:2] | |
241 use_previous = (parameter_tuple[2] | |
242 if len(parameter_tuple) > 2 else False) | |
243 params['Parameters.member.%d.ParameterKey' % (i + 1)] = key | |
244 if use_previous: | |
245 params['Parameters.member.%d.UsePreviousValue' | |
246 % (i + 1)] = self.encode_bool(use_previous) | |
247 else: | |
248 params['Parameters.member.%d.ParameterValue' % (i + 1)] = value | |
249 | |
250 if capabilities: | |
251 for i, value in enumerate(capabilities): | |
252 params['Capabilities.member.%d' % (i + 1)] = value | |
253 if tags: | |
254 for i, (key, value) in enumerate(tags.items()): | |
255 params['Tags.member.%d.Key' % (i + 1)] = key | |
256 params['Tags.member.%d.Value' % (i + 1)] = value | |
257 if notification_arns and len(notification_arns) > 0: | |
258 self.build_list_params(params, notification_arns, | |
259 "NotificationARNs.member") | |
260 if timeout_in_minutes: | |
261 params['TimeoutInMinutes'] = int(timeout_in_minutes) | |
262 if disable_rollback is not None: | |
263 params['DisableRollback'] = str( | |
264 disable_rollback).lower() | |
265 if on_failure is not None: | |
266 params['OnFailure'] = on_failure | |
267 if stack_policy_body is not None: | |
268 params['StackPolicyBody'] = stack_policy_body | |
269 if stack_policy_url is not None: | |
270 params['StackPolicyURL'] = stack_policy_url | |
271 if stack_policy_during_update_body is not None: | |
272 params['StackPolicyDuringUpdateBody'] = stack_policy_during_update_body | |
273 if stack_policy_during_update_url is not None: | |
274 params['StackPolicyDuringUpdateURL'] = stack_policy_during_update_url | |
275 return params | |
276 | |
277 def _do_request(self, call, params, path, method): | |
278 """ | |
279 Do a request via ``self.make_request`` and parse the JSON response. | |
280 | |
281 :type call: string | |
282 :param call: Call name, e.g. ``CreateStack`` | |
283 | |
284 :type params: dict | |
285 :param params: Dictionary of call parameters | |
286 | |
287 :type path: string | |
288 :param path: Server path | |
289 | |
290 :type method: string | |
291 :param method: HTTP method to use | |
292 | |
293 :rtype: dict | |
294 :return: Parsed JSON response data | |
295 """ | |
296 response = self.make_request(call, params, path, method) | |
297 body = response.read().decode('utf-8') | |
298 if response.status == 200: | |
299 body = json.loads(body) | |
300 return body | |
301 else: | |
302 boto.log.error('%s %s' % (response.status, response.reason)) | |
303 boto.log.error('%s' % body) | |
304 raise self.ResponseError(response.status, response.reason, body=body) | |
305 | |
306 def create_stack(self, stack_name, template_body=None, template_url=None, | |
307 parameters=None, notification_arns=None, disable_rollback=None, | |
308 timeout_in_minutes=None, capabilities=None, tags=None, | |
309 on_failure=None, stack_policy_body=None, stack_policy_url=None): | |
310 """ | |
311 Creates a stack as specified in the template. After the call | |
312 completes successfully, the stack creation starts. You can | |
313 check the status of the stack via the DescribeStacks API. | |
314 Currently, the limit for stacks is 20 stacks per account per | |
315 region. | |
316 | |
317 :type stack_name: string | |
318 :param stack_name: | |
319 The name associated with the stack. The name must be unique within your | |
320 AWS account. | |
321 | |
322 Must contain only alphanumeric characters (case sensitive) and start | |
323 with an alpha character. Maximum length of the name is 255 | |
324 characters. | |
325 | |
326 :type template_body: string | |
327 :param template_body: Structure containing the template body. (For more | |
328 information, go to `Template Anatomy`_ in the AWS CloudFormation | |
329 User Guide.) | |
330 Conditional: You must pass `TemplateBody` or `TemplateURL`. If both are | |
331 passed, only `TemplateBody` is used. | |
332 | |
333 :type template_url: string | |
334 :param template_url: Location of file containing the template body. The | |
335 URL must point to a template (max size: 307,200 bytes) located in | |
336 an S3 bucket in the same region as the stack. For more information, | |
337 go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. | |
338 Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are | |
339 passed, only `TemplateBody` is used. | |
340 | |
341 :type parameters: list | |
342 :param parameters: A list of key/value tuples that specify input | |
343 parameters for the stack. | |
344 | |
345 :type disable_rollback: boolean | |
346 :param disable_rollback: Set to `True` to disable rollback of the stack | |
347 if stack creation failed. You can specify either `DisableRollback` | |
348 or `OnFailure`, but not both. | |
349 Default: `False` | |
350 | |
351 :type timeout_in_minutes: integer | |
352 :param timeout_in_minutes: The amount of time that can pass before the | |
353 stack status becomes CREATE_FAILED; if `DisableRollback` is not set | |
354 or is set to `False`, the stack will be rolled back. | |
355 | |
356 :type notification_arns: list | |
357 :param notification_arns: The Simple Notification Service (SNS) topic | |
358 ARNs to publish stack related events. You can find your SNS topic | |
359 ARNs using the `SNS console`_ or your Command Line Interface (CLI). | |
360 | |
361 :type capabilities: list | |
362 :param capabilities: The list of capabilities that you want to allow in | |
363 the stack. If your template contains certain resources, you must | |
364 specify the CAPABILITY_IAM value for this parameter; otherwise, | |
365 this action returns an InsufficientCapabilities error. The | |
366 following resources require you to specify the capabilities | |
367 parameter: `AWS::CloudFormation::Stack`_, `AWS::IAM::AccessKey`_, | |
368 `AWS::IAM::Group`_, `AWS::IAM::InstanceProfile`_, | |
369 `AWS::IAM::Policy`_, `AWS::IAM::Role`_, `AWS::IAM::User`_, and | |
370 `AWS::IAM::UserToGroupAddition`_. | |
371 | |
372 :type on_failure: string | |
373 :param on_failure: Determines what action will be taken if stack | |
374 creation fails. This must be one of: DO_NOTHING, ROLLBACK, or | |
375 DELETE. You can specify either `OnFailure` or `DisableRollback`, | |
376 but not both. | |
377 Default: `ROLLBACK` | |
378 | |
379 :type stack_policy_body: string | |
380 :param stack_policy_body: Structure containing the stack policy body. | |
381 (For more information, go to ` Prevent Updates to Stack Resources`_ | |
382 in the AWS CloudFormation User Guide.) | |
383 If you pass `StackPolicyBody` and `StackPolicyURL`, only | |
384 `StackPolicyBody` is used. | |
385 | |
386 :type stack_policy_url: string | |
387 :param stack_policy_url: Location of a file containing the stack | |
388 policy. The URL must point to a policy (max size: 16KB) located in | |
389 an S3 bucket in the same region as the stack. If you pass | |
390 `StackPolicyBody` and `StackPolicyURL`, only `StackPolicyBody` is | |
391 used. | |
392 | |
393 :type tags: dict | |
394 :param tags: A set of user-defined `Tags` to associate with this stack, | |
395 represented by key/value pairs. Tags defined for the stack are | |
396 propagated to EC2 resources that are created as part of the stack. | |
397 A maximum number of 10 tags can be specified. | |
398 """ | |
399 params = self._build_create_or_update_params(stack_name, template_body, | |
400 template_url, parameters, disable_rollback, timeout_in_minutes, | |
401 notification_arns, capabilities, on_failure, stack_policy_body, | |
402 stack_policy_url, tags) | |
403 body = self._do_request('CreateStack', params, '/', 'POST') | |
404 return body['CreateStackResponse']['CreateStackResult']['StackId'] | |
405 | |
406 def update_stack(self, stack_name, template_body=None, template_url=None, | |
407 parameters=None, notification_arns=None, disable_rollback=False, | |
408 timeout_in_minutes=None, capabilities=None, tags=None, | |
409 use_previous_template=None, | |
410 stack_policy_during_update_body=None, | |
411 stack_policy_during_update_url=None, | |
412 stack_policy_body=None, stack_policy_url=None): | |
413 """ | |
414 Updates a stack as specified in the template. After the call | |
415 completes successfully, the stack update starts. You can check | |
416 the status of the stack via the DescribeStacks action. | |
417 | |
418 | |
419 | |
420 **Note: **You cannot update `AWS::S3::Bucket`_ resources, for | |
421 example, to add or modify tags. | |
422 | |
423 | |
424 | |
425 To get a copy of the template for an existing stack, you can | |
426 use the GetTemplate action. | |
427 | |
428 Tags that were associated with this stack during creation time | |
429 will still be associated with the stack after an `UpdateStack` | |
430 operation. | |
431 | |
432 For more information about creating an update template, | |
433 updating a stack, and monitoring the progress of the update, | |
434 see `Updating a Stack`_. | |
435 | |
436 :type stack_name: string | |
437 :param stack_name: | |
438 The name or stack ID of the stack to update. | |
439 | |
440 Must contain only alphanumeric characters (case sensitive) and start | |
441 with an alpha character. Maximum length of the name is 255 | |
442 characters. | |
443 | |
444 :type template_body: string | |
445 :param template_body: Structure containing the template body. (For more | |
446 information, go to `Template Anatomy`_ in the AWS CloudFormation | |
447 User Guide.) | |
448 Conditional: You must pass either `UsePreviousTemplate` or one of | |
449 `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and | |
450 `TemplateUrl` are passed, only `TemplateBody` is used. | |
451 | |
452 :type template_url: string | |
453 :param template_url: Location of file containing the template body. The | |
454 URL must point to a template (max size: 307,200 bytes) located in | |
455 an S3 bucket in the same region as the stack. For more information, | |
456 go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. | |
457 Conditional: You must pass either `UsePreviousTemplate` or one of | |
458 `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and | |
459 `TemplateUrl` are passed, only `TemplateBody` is used. | |
460 `TemplateBody`. | |
461 | |
462 :type use_previous_template: boolean | |
463 :param use_previous_template: Set to `True` to use the previous | |
464 template instead of uploading a new one via `TemplateBody` or | |
465 `TemplateURL`. | |
466 Conditional: You must pass either `UsePreviousTemplate` or one of | |
467 `TemplateBody` or `TemplateUrl`. | |
468 | |
469 :type parameters: list | |
470 :param parameters: A list of key/value tuples that specify input | |
471 parameters for the stack. A 3-tuple (key, value, bool) may be used to | |
472 specify the `UsePreviousValue` option. | |
473 | |
474 :type notification_arns: list | |
475 :param notification_arns: The Simple Notification Service (SNS) topic | |
476 ARNs to publish stack related events. You can find your SNS topic | |
477 ARNs using the `SNS console`_ or your Command Line Interface (CLI). | |
478 | |
479 :type disable_rollback: bool | |
480 :param disable_rollback: Indicates whether or not to rollback on | |
481 failure. | |
482 | |
483 :type timeout_in_minutes: integer | |
484 :param timeout_in_minutes: The amount of time that can pass before the | |
485 stack status becomes CREATE_FAILED; if `DisableRollback` is not set | |
486 or is set to `False`, the stack will be rolled back. | |
487 | |
488 :type capabilities: list | |
489 :param capabilities: The list of capabilities you want to allow in | |
490 the stack. Currently, the only valid capability is | |
491 'CAPABILITY_IAM'. | |
492 | |
493 :type tags: dict | |
494 :param tags: A set of user-defined `Tags` to associate with this stack, | |
495 represented by key/value pairs. Tags defined for the stack are | |
496 propagated to EC2 resources that are created as part of the stack. | |
497 A maximum number of 10 tags can be specified. | |
498 | |
499 :type template_url: string | |
500 :param template_url: Location of file containing the template body. The | |
501 URL must point to a template located in an S3 bucket in the same | |
502 region as the stack. For more information, go to `Template | |
503 Anatomy`_ in the AWS CloudFormation User Guide. | |
504 Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are | |
505 passed, only `TemplateBody` is used. | |
506 | |
507 :type stack_policy_during_update_body: string | |
508 :param stack_policy_during_update_body: Structure containing the | |
509 temporary overriding stack policy body. If you pass | |
510 `StackPolicyDuringUpdateBody` and `StackPolicyDuringUpdateURL`, | |
511 only `StackPolicyDuringUpdateBody` is used. | |
512 If you want to update protected resources, specify a temporary | |
513 overriding stack policy during this update. If you do not specify a | |
514 stack policy, the current policy that associated with the stack | |
515 will be used. | |
516 | |
517 :type stack_policy_during_update_url: string | |
518 :param stack_policy_during_update_url: Location of a file containing | |
519 the temporary overriding stack policy. The URL must point to a | |
520 policy (max size: 16KB) located in an S3 bucket in the same region | |
521 as the stack. If you pass `StackPolicyDuringUpdateBody` and | |
522 `StackPolicyDuringUpdateURL`, only `StackPolicyDuringUpdateBody` is | |
523 used. | |
524 If you want to update protected resources, specify a temporary | |
525 overriding stack policy during this update. If you do not specify a | |
526 stack policy, the current policy that is associated with the stack | |
527 will be used. | |
528 | |
529 :rtype: string | |
530 :return: The unique Stack ID. | |
531 """ | |
532 params = self._build_create_or_update_params(stack_name, template_body, | |
533 template_url, parameters, disable_rollback, timeout_in_minutes, | |
534 notification_arns, capabilities, None, stack_policy_body, | |
535 stack_policy_url, tags, use_previous_template, | |
536 stack_policy_during_update_body, stack_policy_during_update_url) | |
537 body = self._do_request('UpdateStack', params, '/', 'POST') | |
538 return body['UpdateStackResponse']['UpdateStackResult']['StackId'] | |
539 | |
540 def delete_stack(self, stack_name_or_id): | |
541 """ | |
542 Deletes a specified stack. Once the call completes | |
543 successfully, stack deletion starts. Deleted stacks do not | |
544 show up in the DescribeStacks API if the deletion has been | |
545 completed successfully. | |
546 | |
547 :type stack_name_or_id: string | |
548 :param stack_name_or_id: The name or the unique identifier associated | |
549 with the stack. | |
550 | |
551 """ | |
552 params = {'ContentType': "JSON", 'StackName': stack_name_or_id} | |
553 return self._do_request('DeleteStack', params, '/', 'GET') | |
554 | |
555 def describe_stack_events(self, stack_name_or_id=None, next_token=None): | |
556 """ | |
557 Returns all stack related events for a specified stack. For | |
558 more information about a stack's event history, go to | |
559 `Stacks`_ in the AWS CloudFormation User Guide. | |
560 Events are returned, even if the stack never existed or has | |
561 been successfully deleted. | |
562 | |
563 :type stack_name_or_id: string | |
564 :param stack_name_or_id: The name or the unique identifier associated | |
565 with the stack. | |
566 Default: There is no default value. | |
567 | |
568 :type next_token: string | |
569 :param next_token: String that identifies the start of the next list of | |
570 events, if there is one. | |
571 Default: There is no default value. | |
572 | |
573 """ | |
574 params = {} | |
575 if stack_name_or_id: | |
576 params['StackName'] = stack_name_or_id | |
577 if next_token: | |
578 params['NextToken'] = next_token | |
579 return self.get_list('DescribeStackEvents', params, [('member', | |
580 StackEvent)]) | |
581 | |
582 def describe_stack_resource(self, stack_name_or_id, logical_resource_id): | |
583 """ | |
584 Returns a description of the specified resource in the | |
585 specified stack. | |
586 | |
587 For deleted stacks, DescribeStackResource returns resource | |
588 information for up to 90 days after the stack has been | |
589 deleted. | |
590 | |
591 :type stack_name_or_id: string | |
592 :param stack_name_or_id: The name or the unique identifier associated | |
593 with the stack. | |
594 Default: There is no default value. | |
595 | |
596 :type logical_resource_id: string | |
597 :param logical_resource_id: The logical name of the resource as | |
598 specified in the template. | |
599 Default: There is no default value. | |
600 | |
601 """ | |
602 params = {'ContentType': "JSON", 'StackName': stack_name_or_id, | |
603 'LogicalResourceId': logical_resource_id} | |
604 return self._do_request('DescribeStackResource', params, '/', 'GET') | |
605 | |
606 def describe_stack_resources(self, stack_name_or_id=None, | |
607 logical_resource_id=None, | |
608 physical_resource_id=None): | |
609 """ | |
610 Returns AWS resource descriptions for running and deleted | |
611 stacks. If `StackName` is specified, all the associated | |
612 resources that are part of the stack are returned. If | |
613 `PhysicalResourceId` is specified, the associated resources of | |
614 the stack that the resource belongs to are returned. | |
615 Only the first 100 resources will be returned. If your stack | |
616 has more resources than this, you should use | |
617 `ListStackResources` instead. | |
618 For deleted stacks, `DescribeStackResources` returns resource | |
619 information for up to 90 days after the stack has been | |
620 deleted. | |
621 | |
622 You must specify either `StackName` or `PhysicalResourceId`, | |
623 but not both. In addition, you can specify `LogicalResourceId` | |
624 to filter the returned result. For more information about | |
625 resources, the `LogicalResourceId` and `PhysicalResourceId`, | |
626 go to the `AWS CloudFormation User Guide`_. | |
627 A `ValidationError` is returned if you specify both | |
628 `StackName` and `PhysicalResourceId` in the same request. | |
629 | |
630 :type stack_name_or_id: string | |
631 :param stack_name_or_id: The name or the unique identifier associated | |
632 with the stack. | |
633 Required: Conditional. If you do not specify `StackName`, you must | |
634 specify `PhysicalResourceId`. | |
635 | |
636 Default: There is no default value. | |
637 | |
638 :type logical_resource_id: string | |
639 :param logical_resource_id: The logical name of the resource as | |
640 specified in the template. | |
641 Default: There is no default value. | |
642 | |
643 :type physical_resource_id: string | |
644 :param physical_resource_id: The name or unique identifier that | |
645 corresponds to a physical instance ID of a resource supported by | |
646 AWS CloudFormation. | |
647 For example, for an Amazon Elastic Compute Cloud (EC2) instance, | |
648 `PhysicalResourceId` corresponds to the `InstanceId`. You can pass | |
649 the EC2 `InstanceId` to `DescribeStackResources` to find which | |
650 stack the instance belongs to and what other resources are part of | |
651 the stack. | |
652 | |
653 Required: Conditional. If you do not specify `PhysicalResourceId`, you | |
654 must specify `StackName`. | |
655 | |
656 Default: There is no default value. | |
657 | |
658 """ | |
659 params = {} | |
660 if stack_name_or_id: | |
661 params['StackName'] = stack_name_or_id | |
662 if logical_resource_id: | |
663 params['LogicalResourceId'] = logical_resource_id | |
664 if physical_resource_id: | |
665 params['PhysicalResourceId'] = physical_resource_id | |
666 return self.get_list('DescribeStackResources', params, | |
667 [('member', StackResource)]) | |
668 | |
669 def describe_stacks(self, stack_name_or_id=None, next_token=None): | |
670 """ | |
671 Returns the description for the specified stack; if no stack | |
672 name was specified, then it returns the description for all | |
673 the stacks created. | |
674 | |
675 :type stack_name_or_id: string | |
676 :param stack_name_or_id: The name or the unique identifier associated | |
677 with the stack. | |
678 Default: There is no default value. | |
679 | |
680 :type next_token: string | |
681 :param next_token: String that identifies the start of the next list of | |
682 stacks, if there is one. | |
683 | |
684 """ | |
685 params = {} | |
686 if stack_name_or_id: | |
687 params['StackName'] = stack_name_or_id | |
688 if next_token is not None: | |
689 params['NextToken'] = next_token | |
690 return self.get_list('DescribeStacks', params, [('member', Stack)]) | |
691 | |
692 def get_template(self, stack_name_or_id): | |
693 """ | |
694 Returns the template body for a specified stack. You can get | |
695 the template for running or deleted stacks. | |
696 | |
697 For deleted stacks, GetTemplate returns the template for up to | |
698 90 days after the stack has been deleted. | |
699 If the template does not exist, a `ValidationError` is | |
700 returned. | |
701 | |
702 :type stack_name_or_id: string | |
703 :param stack_name_or_id: The name or the unique identifier associated | |
704 with the stack, which are not always interchangeable: | |
705 | |
706 + Running stacks: You can specify either the stack's name or its unique | |
707 stack ID. | |
708 + Deleted stacks: You must specify the unique stack ID. | |
709 | |
710 | |
711 Default: There is no default value. | |
712 | |
713 """ | |
714 params = {'ContentType': "JSON", 'StackName': stack_name_or_id} | |
715 return self._do_request('GetTemplate', params, '/', 'GET') | |
716 | |
717 def list_stack_resources(self, stack_name_or_id, next_token=None): | |
718 """ | |
719 Returns descriptions of all resources of the specified stack. | |
720 | |
721 For deleted stacks, ListStackResources returns resource | |
722 information for up to 90 days after the stack has been | |
723 deleted. | |
724 | |
725 :type stack_name_or_id: string | |
726 :param stack_name_or_id: The name or the unique identifier associated | |
727 with the stack, which are not always interchangeable: | |
728 | |
729 + Running stacks: You can specify either the stack's name or its unique | |
730 stack ID. | |
731 + Deleted stacks: You must specify the unique stack ID. | |
732 | |
733 | |
734 Default: There is no default value. | |
735 | |
736 :type next_token: string | |
737 :param next_token: String that identifies the start of the next list of | |
738 stack resource summaries, if there is one. | |
739 Default: There is no default value. | |
740 | |
741 """ | |
742 params = {'StackName': stack_name_or_id} | |
743 if next_token: | |
744 params['NextToken'] = next_token | |
745 return self.get_list('ListStackResources', params, | |
746 [('member', StackResourceSummary)]) | |
747 | |
748 def list_stacks(self, stack_status_filters=None, next_token=None): | |
749 """ | |
750 Returns the summary information for stacks whose status | |
751 matches the specified StackStatusFilter. Summary information | |
752 for stacks that have been deleted is kept for 90 days after | |
753 the stack is deleted. If no StackStatusFilter is specified, | |
754 summary information for all stacks is returned (including | |
755 existing stacks and stacks that have been deleted). | |
756 | |
757 :type next_token: string | |
758 :param next_token: String that identifies the start of the next list of | |
759 stacks, if there is one. | |
760 Default: There is no default value. | |
761 | |
762 :type stack_status_filter: list | |
763 :param stack_status_filter: Stack status to use as a filter. Specify | |
764 one or more stack status codes to list only stacks with the | |
765 specified status codes. For a complete list of stack status codes, | |
766 see the `StackStatus` parameter of the Stack data type. | |
767 | |
768 """ | |
769 params = {} | |
770 if next_token: | |
771 params['NextToken'] = next_token | |
772 if stack_status_filters and len(stack_status_filters) > 0: | |
773 self.build_list_params(params, stack_status_filters, | |
774 "StackStatusFilter.member") | |
775 | |
776 return self.get_list('ListStacks', params, | |
777 [('member', StackSummary)]) | |
778 | |
779 def validate_template(self, template_body=None, template_url=None): | |
780 """ | |
781 Validates a specified template. | |
782 | |
783 :type template_body: string | |
784 :param template_body: String containing the template body. (For more | |
785 information, go to `Template Anatomy`_ in the AWS CloudFormation | |
786 User Guide.) | |
787 Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are | |
788 passed, only `TemplateBody` is used. | |
789 | |
790 :type template_url: string | |
791 :param template_url: Location of file containing the template body. The | |
792 URL must point to a template (max size: 307,200 bytes) located in | |
793 an S3 bucket in the same region as the stack. For more information, | |
794 go to `Template Anatomy`_ in the AWS CloudFormation User Guide. | |
795 Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are | |
796 passed, only `TemplateBody` is used. | |
797 | |
798 """ | |
799 params = {} | |
800 if template_body: | |
801 params['TemplateBody'] = template_body | |
802 if template_url: | |
803 params['TemplateURL'] = template_url | |
804 if template_body and template_url: | |
805 boto.log.warning("If both TemplateBody and TemplateURL are" | |
806 " specified, only TemplateBody will be honored by the API") | |
807 return self.get_object('ValidateTemplate', params, Template, | |
808 verb="POST") | |
809 | |
810 def cancel_update_stack(self, stack_name_or_id=None): | |
811 """ | |
812 Cancels an update on the specified stack. If the call | |
813 completes successfully, the stack will roll back the update | |
814 and revert to the previous stack configuration. | |
815 Only stacks that are in the UPDATE_IN_PROGRESS state can be | |
816 canceled. | |
817 | |
818 :type stack_name_or_id: string | |
819 :param stack_name_or_id: The name or the unique identifier associated with | |
820 the stack. | |
821 | |
822 """ | |
823 params = {} | |
824 if stack_name_or_id: | |
825 params['StackName'] = stack_name_or_id | |
826 return self.get_status('CancelUpdateStack', params) | |
827 | |
828 def estimate_template_cost(self, template_body=None, template_url=None, | |
829 parameters=None): | |
830 """ | |
831 Returns the estimated monthly cost of a template. The return | |
832 value is an AWS Simple Monthly Calculator URL with a query | |
833 string that describes the resources required to run the | |
834 template. | |
835 | |
836 :type template_body: string | |
837 :param template_body: Structure containing the template body. (For more | |
838 information, go to `Template Anatomy`_ in the AWS CloudFormation | |
839 User Guide.) | |
840 Conditional: You must pass `TemplateBody` or `TemplateURL`. If both are | |
841 passed, only `TemplateBody` is used. | |
842 | |
843 :type template_url: string | |
844 :param template_url: Location of file containing the template body. The | |
845 URL must point to a template located in an S3 bucket in the same | |
846 region as the stack. For more information, go to `Template | |
847 Anatomy`_ in the AWS CloudFormation User Guide. | |
848 Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are | |
849 passed, only `TemplateBody` is used. | |
850 | |
851 :type parameters: list | |
852 :param parameters: A list of key/value tuples that specify input | |
853 parameters for the template. | |
854 | |
855 :rtype: string | |
856 :returns: URL to pre-filled cost calculator | |
857 """ | |
858 params = {'ContentType': "JSON"} | |
859 if template_body is not None: | |
860 params['TemplateBody'] = template_body | |
861 if template_url is not None: | |
862 params['TemplateURL'] = template_url | |
863 if parameters and len(parameters) > 0: | |
864 for i, (key, value) in enumerate(parameters): | |
865 params['Parameters.member.%d.ParameterKey' % (i + 1)] = key | |
866 params['Parameters.member.%d.ParameterValue' % (i + 1)] = value | |
867 | |
868 response = self._do_request('EstimateTemplateCost', params, '/', 'POST') | |
869 return response['EstimateTemplateCostResponse']\ | |
870 ['EstimateTemplateCostResult']\ | |
871 ['Url'] | |
872 | |
873 def get_stack_policy(self, stack_name_or_id): | |
874 """ | |
875 Returns the stack policy for a specified stack. If a stack | |
876 doesn't have a policy, a null value is returned. | |
877 | |
878 :type stack_name_or_id: string | |
879 :param stack_name_or_id: The name or stack ID that is associated with | |
880 the stack whose policy you want to get. | |
881 | |
882 :rtype: string | |
883 :return: The policy JSON document | |
884 """ | |
885 params = {'ContentType': "JSON", 'StackName': stack_name_or_id, } | |
886 response = self._do_request('GetStackPolicy', params, '/', 'POST') | |
887 return response['GetStackPolicyResponse']\ | |
888 ['GetStackPolicyResult']\ | |
889 ['StackPolicyBody'] | |
890 | |
891 def set_stack_policy(self, stack_name_or_id, stack_policy_body=None, | |
892 stack_policy_url=None): | |
893 """ | |
894 Sets a stack policy for a specified stack. | |
895 | |
896 :type stack_name_or_id: string | |
897 :param stack_name_or_id: The name or stack ID that you want to | |
898 associate a policy with. | |
899 | |
900 :type stack_policy_body: string | |
901 :param stack_policy_body: Structure containing the stack policy body. | |
902 (For more information, go to ` Prevent Updates to Stack Resources`_ | |
903 in the AWS CloudFormation User Guide.) | |
904 You must pass `StackPolicyBody` or `StackPolicyURL`. If both are | |
905 passed, only `StackPolicyBody` is used. | |
906 | |
907 :type stack_policy_url: string | |
908 :param stack_policy_url: Location of a file containing the stack | |
909 policy. The URL must point to a policy (max size: 16KB) located in | |
910 an S3 bucket in the same region as the stack. You must pass | |
911 `StackPolicyBody` or `StackPolicyURL`. If both are passed, only | |
912 `StackPolicyBody` is used. | |
913 | |
914 """ | |
915 params = {'ContentType': "JSON", 'StackName': stack_name_or_id, } | |
916 if stack_policy_body is not None: | |
917 params['StackPolicyBody'] = stack_policy_body | |
918 if stack_policy_url is not None: | |
919 params['StackPolicyURL'] = stack_policy_url | |
920 | |
921 response = self._do_request('SetStackPolicy', params, '/', 'POST') | |
922 return response['SetStackPolicyResponse'] |