Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/boto/cloudformation/connection.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 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'] |
