Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/boto/cloudformation/connection.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/boto/cloudformation/connection.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,922 +0,0 @@ -# Copyright (c) 2006-2009 Mitch Garnaat http://garnaat.org/ -# Copyright (c) 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, dis- -# tribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the fol- -# lowing conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- -# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. - -import boto -from boto.cloudformation.stack import Stack, StackSummary, StackEvent -from boto.cloudformation.stack import StackResource, StackResourceSummary -from boto.cloudformation.template import Template -from boto.connection import AWSQueryConnection -from boto.regioninfo import RegionInfo -from boto.compat import json - - -class CloudFormationConnection(AWSQueryConnection): - """ - AWS CloudFormation - AWS CloudFormation enables you to create and manage AWS - infrastructure deployments predictably and repeatedly. AWS - CloudFormation helps you leverage AWS products such as Amazon EC2, - EBS, Amazon SNS, ELB, and Auto Scaling to build highly-reliable, - highly scalable, cost effective applications without worrying - about creating and configuring the underlying AWS infrastructure. - - With AWS CloudFormation, you declare all of your resources and - dependencies in a template file. The template defines a collection - of resources as a single unit called a stack. AWS CloudFormation - creates and deletes all member resources of the stack together and - manages all dependencies between the resources for you. - - For more information about this product, go to the `CloudFormation - Product Page`_. - - Amazon CloudFormation makes use of other AWS products. If you need - additional technical information about a specific AWS product, you - can find the product's technical documentation at - `http://aws.amazon.com/documentation/`_. - """ - APIVersion = boto.config.get('Boto', 'cfn_version', '2010-05-15') - DefaultRegionName = boto.config.get('Boto', 'cfn_region_name', 'us-east-1') - DefaultRegionEndpoint = boto.config.get('Boto', 'cfn_region_endpoint', - 'cloudformation.us-east-1.amazonaws.com') - - valid_states = ( - 'CREATE_IN_PROGRESS', 'CREATE_FAILED', 'CREATE_COMPLETE', - 'ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'ROLLBACK_COMPLETE', - 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'DELETE_COMPLETE', - 'UPDATE_IN_PROGRESS', 'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS', - 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_IN_PROGRESS', - 'UPDATE_ROLLBACK_FAILED', - 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS', - 'UPDATE_ROLLBACK_COMPLETE') - - def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, - is_secure=True, port=None, proxy=None, proxy_port=None, - proxy_user=None, proxy_pass=None, debug=0, - https_connection_factory=None, region=None, path='/', - converter=None, security_token=None, validate_certs=True, - profile_name=None): - if not region: - region = RegionInfo(self, self.DefaultRegionName, - self.DefaultRegionEndpoint, CloudFormationConnection) - self.region = region - super(CloudFormationConnection, self).__init__(aws_access_key_id, - aws_secret_access_key, - is_secure, port, proxy, proxy_port, - proxy_user, proxy_pass, - self.region.endpoint, debug, - https_connection_factory, path, - security_token, - validate_certs=validate_certs, - profile_name=profile_name) - - def _required_auth_capability(self): - return ['hmac-v4'] - - def encode_bool(self, v): - v = bool(v) - return {True: "true", False: "false"}[v] - - def _build_create_or_update_params(self, stack_name, template_body, - template_url, parameters, disable_rollback, timeout_in_minutes, - notification_arns, capabilities, on_failure, stack_policy_body, - stack_policy_url, tags, use_previous_template=None, - stack_policy_during_update_body=None, - stack_policy_during_update_url=None): - """ - Helper that creates JSON parameters needed by a Stack Create or - Stack Update call. - - :type stack_name: string - :param stack_name: - The name associated with the stack. The name must be unique within your - AWS account. - - Must contain only alphanumeric characters (case sensitive) and start - with an alpha character. Maximum length of the name is 255 - characters. - - :type template_body: string - :param template_body: Structure containing the template body. (For more - information, go to `Template Anatomy`_ in the AWS CloudFormation - User Guide.) - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and - `TemplateUrl` are passed, only `TemplateBody` is used. - `TemplateBody`. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template (max size: 307,200 bytes) located in - an S3 bucket in the same region as the stack. For more information, - go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and - `TemplateUrl` are passed, only `TemplateBody` is used. - `TemplateBody`. - - :type parameters: list - :param parameters: A list of key/value tuples that specify input - parameters for the stack. A 3-tuple (key, value, bool) may be used to - specify the `UsePreviousValue` option. - - :type disable_rollback: boolean - :param disable_rollback: Set to `True` to disable rollback of the stack - if stack creation failed. You can specify either `DisableRollback` - or `OnFailure`, but not both. - Default: `False` - - :type timeout_in_minutes: integer - :param timeout_in_minutes: The amount of time that can pass before the - stack status becomes CREATE_FAILED; if `DisableRollback` is not set - or is set to `False`, the stack will be rolled back. - - :type notification_arns: list - :param notification_arns: The Simple Notification Service (SNS) topic - ARNs to publish stack related events. You can find your SNS topic - ARNs using the `SNS console`_ or your Command Line Interface (CLI). - - :type capabilities: list - :param capabilities: The list of capabilities that you want to allow in - the stack. If your template contains certain resources, you must - specify the CAPABILITY_IAM value for this parameter; otherwise, - this action returns an InsufficientCapabilities error. The - following resources require you to specify the capabilities - parameter: `AWS::CloudFormation::Stack`_, `AWS::IAM::AccessKey`_, - `AWS::IAM::Group`_, `AWS::IAM::InstanceProfile`_, - `AWS::IAM::Policy`_, `AWS::IAM::Role`_, `AWS::IAM::User`_, and - `AWS::IAM::UserToGroupAddition`_. - - :type on_failure: string - :param on_failure: Determines what action will be taken if stack - creation fails. This must be one of: DO_NOTHING, ROLLBACK, or - DELETE. You can specify either `OnFailure` or `DisableRollback`, - but not both. - Default: `ROLLBACK` - - :type stack_policy_body: string - :param stack_policy_body: Structure containing the stack policy body. - (For more information, go to ` Prevent Updates to Stack Resources`_ - in the AWS CloudFormation User Guide.) - If you pass `StackPolicyBody` and `StackPolicyURL`, only - `StackPolicyBody` is used. - - :type stack_policy_url: string - :param stack_policy_url: Location of a file containing the stack - policy. The URL must point to a policy (max size: 16KB) located in - an S3 bucket in the same region as the stack. If you pass - `StackPolicyBody` and `StackPolicyURL`, only `StackPolicyBody` is - used. - - :type tags: list - :param tags: A set of user-defined `Tags` to associate with this stack, - represented by key/value pairs. Tags defined for the stack are - propagated to EC2 resources that are created as part of the stack. - A maximum number of 10 tags can be specified. - - :type use_previous_template: boolean - :param use_previous_template: Set to `True` to use the previous - template instead of uploading a new one via `TemplateBody` or - `TemplateURL`. - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. - - :type stack_policy_during_update_body: string - :param stack_policy_during_update_body: Structure containing the - temporary overriding stack policy body. If you pass - `StackPolicyDuringUpdateBody` and `StackPolicyDuringUpdateURL`, - only `StackPolicyDuringUpdateBody` is used. - If you want to update protected resources, specify a temporary - overriding stack policy during this update. If you do not specify a - stack policy, the current policy that associated with the stack - will be used. - - :type stack_policy_during_update_url: string - :param stack_policy_during_update_url: Location of a file containing - the temporary overriding stack policy. The URL must point to a - policy (max size: 16KB) located in an S3 bucket in the same region - as the stack. If you pass `StackPolicyDuringUpdateBody` and - `StackPolicyDuringUpdateURL`, only `StackPolicyDuringUpdateBody` is - used. - If you want to update protected resources, specify a temporary - overriding stack policy during this update. If you do not specify a - stack policy, the current policy that is associated with the stack - will be used. - - :rtype: dict - :return: JSON parameters represented as a Python dict. - """ - params = {'ContentType': "JSON", 'StackName': stack_name, - 'DisableRollback': self.encode_bool(disable_rollback)} - if template_body: - params['TemplateBody'] = template_body - if template_url: - params['TemplateURL'] = template_url - if use_previous_template is not None: - params['UsePreviousTemplate'] = self.encode_bool(use_previous_template) - if template_body and template_url: - boto.log.warning("If both TemplateBody and TemplateURL are" - " specified, only TemplateBody will be honored by the API") - if parameters and len(parameters) > 0: - for i, parameter_tuple in enumerate(parameters): - key, value = parameter_tuple[:2] - use_previous = (parameter_tuple[2] - if len(parameter_tuple) > 2 else False) - params['Parameters.member.%d.ParameterKey' % (i + 1)] = key - if use_previous: - params['Parameters.member.%d.UsePreviousValue' - % (i + 1)] = self.encode_bool(use_previous) - else: - params['Parameters.member.%d.ParameterValue' % (i + 1)] = value - - if capabilities: - for i, value in enumerate(capabilities): - params['Capabilities.member.%d' % (i + 1)] = value - if tags: - for i, (key, value) in enumerate(tags.items()): - params['Tags.member.%d.Key' % (i + 1)] = key - params['Tags.member.%d.Value' % (i + 1)] = value - if notification_arns and len(notification_arns) > 0: - self.build_list_params(params, notification_arns, - "NotificationARNs.member") - if timeout_in_minutes: - params['TimeoutInMinutes'] = int(timeout_in_minutes) - if disable_rollback is not None: - params['DisableRollback'] = str( - disable_rollback).lower() - if on_failure is not None: - params['OnFailure'] = on_failure - if stack_policy_body is not None: - params['StackPolicyBody'] = stack_policy_body - if stack_policy_url is not None: - params['StackPolicyURL'] = stack_policy_url - if stack_policy_during_update_body is not None: - params['StackPolicyDuringUpdateBody'] = stack_policy_during_update_body - if stack_policy_during_update_url is not None: - params['StackPolicyDuringUpdateURL'] = stack_policy_during_update_url - return params - - def _do_request(self, call, params, path, method): - """ - Do a request via ``self.make_request`` and parse the JSON response. - - :type call: string - :param call: Call name, e.g. ``CreateStack`` - - :type params: dict - :param params: Dictionary of call parameters - - :type path: string - :param path: Server path - - :type method: string - :param method: HTTP method to use - - :rtype: dict - :return: Parsed JSON response data - """ - response = self.make_request(call, params, path, method) - body = response.read().decode('utf-8') - if response.status == 200: - body = json.loads(body) - return body - else: - boto.log.error('%s %s' % (response.status, response.reason)) - boto.log.error('%s' % body) - raise self.ResponseError(response.status, response.reason, body=body) - - def create_stack(self, stack_name, template_body=None, template_url=None, - parameters=None, notification_arns=None, disable_rollback=None, - timeout_in_minutes=None, capabilities=None, tags=None, - on_failure=None, stack_policy_body=None, stack_policy_url=None): - """ - Creates a stack as specified in the template. After the call - completes successfully, the stack creation starts. You can - check the status of the stack via the DescribeStacks API. - Currently, the limit for stacks is 20 stacks per account per - region. - - :type stack_name: string - :param stack_name: - The name associated with the stack. The name must be unique within your - AWS account. - - Must contain only alphanumeric characters (case sensitive) and start - with an alpha character. Maximum length of the name is 255 - characters. - - :type template_body: string - :param template_body: Structure containing the template body. (For more - information, go to `Template Anatomy`_ in the AWS CloudFormation - User Guide.) - Conditional: You must pass `TemplateBody` or `TemplateURL`. If both are - passed, only `TemplateBody` is used. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template (max size: 307,200 bytes) located in - an S3 bucket in the same region as the stack. For more information, - go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are - passed, only `TemplateBody` is used. - - :type parameters: list - :param parameters: A list of key/value tuples that specify input - parameters for the stack. - - :type disable_rollback: boolean - :param disable_rollback: Set to `True` to disable rollback of the stack - if stack creation failed. You can specify either `DisableRollback` - or `OnFailure`, but not both. - Default: `False` - - :type timeout_in_minutes: integer - :param timeout_in_minutes: The amount of time that can pass before the - stack status becomes CREATE_FAILED; if `DisableRollback` is not set - or is set to `False`, the stack will be rolled back. - - :type notification_arns: list - :param notification_arns: The Simple Notification Service (SNS) topic - ARNs to publish stack related events. You can find your SNS topic - ARNs using the `SNS console`_ or your Command Line Interface (CLI). - - :type capabilities: list - :param capabilities: The list of capabilities that you want to allow in - the stack. If your template contains certain resources, you must - specify the CAPABILITY_IAM value for this parameter; otherwise, - this action returns an InsufficientCapabilities error. The - following resources require you to specify the capabilities - parameter: `AWS::CloudFormation::Stack`_, `AWS::IAM::AccessKey`_, - `AWS::IAM::Group`_, `AWS::IAM::InstanceProfile`_, - `AWS::IAM::Policy`_, `AWS::IAM::Role`_, `AWS::IAM::User`_, and - `AWS::IAM::UserToGroupAddition`_. - - :type on_failure: string - :param on_failure: Determines what action will be taken if stack - creation fails. This must be one of: DO_NOTHING, ROLLBACK, or - DELETE. You can specify either `OnFailure` or `DisableRollback`, - but not both. - Default: `ROLLBACK` - - :type stack_policy_body: string - :param stack_policy_body: Structure containing the stack policy body. - (For more information, go to ` Prevent Updates to Stack Resources`_ - in the AWS CloudFormation User Guide.) - If you pass `StackPolicyBody` and `StackPolicyURL`, only - `StackPolicyBody` is used. - - :type stack_policy_url: string - :param stack_policy_url: Location of a file containing the stack - policy. The URL must point to a policy (max size: 16KB) located in - an S3 bucket in the same region as the stack. If you pass - `StackPolicyBody` and `StackPolicyURL`, only `StackPolicyBody` is - used. - - :type tags: dict - :param tags: A set of user-defined `Tags` to associate with this stack, - represented by key/value pairs. Tags defined for the stack are - propagated to EC2 resources that are created as part of the stack. - A maximum number of 10 tags can be specified. - """ - params = self._build_create_or_update_params(stack_name, template_body, - template_url, parameters, disable_rollback, timeout_in_minutes, - notification_arns, capabilities, on_failure, stack_policy_body, - stack_policy_url, tags) - body = self._do_request('CreateStack', params, '/', 'POST') - return body['CreateStackResponse']['CreateStackResult']['StackId'] - - def update_stack(self, stack_name, template_body=None, template_url=None, - parameters=None, notification_arns=None, disable_rollback=False, - timeout_in_minutes=None, capabilities=None, tags=None, - use_previous_template=None, - stack_policy_during_update_body=None, - stack_policy_during_update_url=None, - stack_policy_body=None, stack_policy_url=None): - """ - Updates a stack as specified in the template. After the call - completes successfully, the stack update starts. You can check - the status of the stack via the DescribeStacks action. - - - - **Note: **You cannot update `AWS::S3::Bucket`_ resources, for - example, to add or modify tags. - - - - To get a copy of the template for an existing stack, you can - use the GetTemplate action. - - Tags that were associated with this stack during creation time - will still be associated with the stack after an `UpdateStack` - operation. - - For more information about creating an update template, - updating a stack, and monitoring the progress of the update, - see `Updating a Stack`_. - - :type stack_name: string - :param stack_name: - The name or stack ID of the stack to update. - - Must contain only alphanumeric characters (case sensitive) and start - with an alpha character. Maximum length of the name is 255 - characters. - - :type template_body: string - :param template_body: Structure containing the template body. (For more - information, go to `Template Anatomy`_ in the AWS CloudFormation - User Guide.) - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and - `TemplateUrl` are passed, only `TemplateBody` is used. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template (max size: 307,200 bytes) located in - an S3 bucket in the same region as the stack. For more information, - go to the `Template Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. If both `TemplateBody` and - `TemplateUrl` are passed, only `TemplateBody` is used. - `TemplateBody`. - - :type use_previous_template: boolean - :param use_previous_template: Set to `True` to use the previous - template instead of uploading a new one via `TemplateBody` or - `TemplateURL`. - Conditional: You must pass either `UsePreviousTemplate` or one of - `TemplateBody` or `TemplateUrl`. - - :type parameters: list - :param parameters: A list of key/value tuples that specify input - parameters for the stack. A 3-tuple (key, value, bool) may be used to - specify the `UsePreviousValue` option. - - :type notification_arns: list - :param notification_arns: The Simple Notification Service (SNS) topic - ARNs to publish stack related events. You can find your SNS topic - ARNs using the `SNS console`_ or your Command Line Interface (CLI). - - :type disable_rollback: bool - :param disable_rollback: Indicates whether or not to rollback on - failure. - - :type timeout_in_minutes: integer - :param timeout_in_minutes: The amount of time that can pass before the - stack status becomes CREATE_FAILED; if `DisableRollback` is not set - or is set to `False`, the stack will be rolled back. - - :type capabilities: list - :param capabilities: The list of capabilities you want to allow in - the stack. Currently, the only valid capability is - 'CAPABILITY_IAM'. - - :type tags: dict - :param tags: A set of user-defined `Tags` to associate with this stack, - represented by key/value pairs. Tags defined for the stack are - propagated to EC2 resources that are created as part of the stack. - A maximum number of 10 tags can be specified. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template located in an S3 bucket in the same - region as the stack. For more information, go to `Template - Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are - passed, only `TemplateBody` is used. - - :type stack_policy_during_update_body: string - :param stack_policy_during_update_body: Structure containing the - temporary overriding stack policy body. If you pass - `StackPolicyDuringUpdateBody` and `StackPolicyDuringUpdateURL`, - only `StackPolicyDuringUpdateBody` is used. - If you want to update protected resources, specify a temporary - overriding stack policy during this update. If you do not specify a - stack policy, the current policy that associated with the stack - will be used. - - :type stack_policy_during_update_url: string - :param stack_policy_during_update_url: Location of a file containing - the temporary overriding stack policy. The URL must point to a - policy (max size: 16KB) located in an S3 bucket in the same region - as the stack. If you pass `StackPolicyDuringUpdateBody` and - `StackPolicyDuringUpdateURL`, only `StackPolicyDuringUpdateBody` is - used. - If you want to update protected resources, specify a temporary - overriding stack policy during this update. If you do not specify a - stack policy, the current policy that is associated with the stack - will be used. - - :rtype: string - :return: The unique Stack ID. - """ - params = self._build_create_or_update_params(stack_name, template_body, - template_url, parameters, disable_rollback, timeout_in_minutes, - notification_arns, capabilities, None, stack_policy_body, - stack_policy_url, tags, use_previous_template, - stack_policy_during_update_body, stack_policy_during_update_url) - body = self._do_request('UpdateStack', params, '/', 'POST') - return body['UpdateStackResponse']['UpdateStackResult']['StackId'] - - def delete_stack(self, stack_name_or_id): - """ - Deletes a specified stack. Once the call completes - successfully, stack deletion starts. Deleted stacks do not - show up in the DescribeStacks API if the deletion has been - completed successfully. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack. - - """ - params = {'ContentType': "JSON", 'StackName': stack_name_or_id} - return self._do_request('DeleteStack', params, '/', 'GET') - - def describe_stack_events(self, stack_name_or_id=None, next_token=None): - """ - Returns all stack related events for a specified stack. For - more information about a stack's event history, go to - `Stacks`_ in the AWS CloudFormation User Guide. - Events are returned, even if the stack never existed or has - been successfully deleted. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack. - Default: There is no default value. - - :type next_token: string - :param next_token: String that identifies the start of the next list of - events, if there is one. - Default: There is no default value. - - """ - params = {} - if stack_name_or_id: - params['StackName'] = stack_name_or_id - if next_token: - params['NextToken'] = next_token - return self.get_list('DescribeStackEvents', params, [('member', - StackEvent)]) - - def describe_stack_resource(self, stack_name_or_id, logical_resource_id): - """ - Returns a description of the specified resource in the - specified stack. - - For deleted stacks, DescribeStackResource returns resource - information for up to 90 days after the stack has been - deleted. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack. - Default: There is no default value. - - :type logical_resource_id: string - :param logical_resource_id: The logical name of the resource as - specified in the template. - Default: There is no default value. - - """ - params = {'ContentType': "JSON", 'StackName': stack_name_or_id, - 'LogicalResourceId': logical_resource_id} - return self._do_request('DescribeStackResource', params, '/', 'GET') - - def describe_stack_resources(self, stack_name_or_id=None, - logical_resource_id=None, - physical_resource_id=None): - """ - Returns AWS resource descriptions for running and deleted - stacks. If `StackName` is specified, all the associated - resources that are part of the stack are returned. If - `PhysicalResourceId` is specified, the associated resources of - the stack that the resource belongs to are returned. - Only the first 100 resources will be returned. If your stack - has more resources than this, you should use - `ListStackResources` instead. - For deleted stacks, `DescribeStackResources` returns resource - information for up to 90 days after the stack has been - deleted. - - You must specify either `StackName` or `PhysicalResourceId`, - but not both. In addition, you can specify `LogicalResourceId` - to filter the returned result. For more information about - resources, the `LogicalResourceId` and `PhysicalResourceId`, - go to the `AWS CloudFormation User Guide`_. - A `ValidationError` is returned if you specify both - `StackName` and `PhysicalResourceId` in the same request. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack. - Required: Conditional. If you do not specify `StackName`, you must - specify `PhysicalResourceId`. - - Default: There is no default value. - - :type logical_resource_id: string - :param logical_resource_id: The logical name of the resource as - specified in the template. - Default: There is no default value. - - :type physical_resource_id: string - :param physical_resource_id: The name or unique identifier that - corresponds to a physical instance ID of a resource supported by - AWS CloudFormation. - For example, for an Amazon Elastic Compute Cloud (EC2) instance, - `PhysicalResourceId` corresponds to the `InstanceId`. You can pass - the EC2 `InstanceId` to `DescribeStackResources` to find which - stack the instance belongs to and what other resources are part of - the stack. - - Required: Conditional. If you do not specify `PhysicalResourceId`, you - must specify `StackName`. - - Default: There is no default value. - - """ - params = {} - if stack_name_or_id: - params['StackName'] = stack_name_or_id - if logical_resource_id: - params['LogicalResourceId'] = logical_resource_id - if physical_resource_id: - params['PhysicalResourceId'] = physical_resource_id - return self.get_list('DescribeStackResources', params, - [('member', StackResource)]) - - def describe_stacks(self, stack_name_or_id=None, next_token=None): - """ - Returns the description for the specified stack; if no stack - name was specified, then it returns the description for all - the stacks created. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack. - Default: There is no default value. - - :type next_token: string - :param next_token: String that identifies the start of the next list of - stacks, if there is one. - - """ - params = {} - if stack_name_or_id: - params['StackName'] = stack_name_or_id - if next_token is not None: - params['NextToken'] = next_token - return self.get_list('DescribeStacks', params, [('member', Stack)]) - - def get_template(self, stack_name_or_id): - """ - Returns the template body for a specified stack. You can get - the template for running or deleted stacks. - - For deleted stacks, GetTemplate returns the template for up to - 90 days after the stack has been deleted. - If the template does not exist, a `ValidationError` is - returned. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack, which are not always interchangeable: - - + Running stacks: You can specify either the stack's name or its unique - stack ID. - + Deleted stacks: You must specify the unique stack ID. - - - Default: There is no default value. - - """ - params = {'ContentType': "JSON", 'StackName': stack_name_or_id} - return self._do_request('GetTemplate', params, '/', 'GET') - - def list_stack_resources(self, stack_name_or_id, next_token=None): - """ - Returns descriptions of all resources of the specified stack. - - For deleted stacks, ListStackResources returns resource - information for up to 90 days after the stack has been - deleted. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated - with the stack, which are not always interchangeable: - - + Running stacks: You can specify either the stack's name or its unique - stack ID. - + Deleted stacks: You must specify the unique stack ID. - - - Default: There is no default value. - - :type next_token: string - :param next_token: String that identifies the start of the next list of - stack resource summaries, if there is one. - Default: There is no default value. - - """ - params = {'StackName': stack_name_or_id} - if next_token: - params['NextToken'] = next_token - return self.get_list('ListStackResources', params, - [('member', StackResourceSummary)]) - - def list_stacks(self, stack_status_filters=None, next_token=None): - """ - Returns the summary information for stacks whose status - matches the specified StackStatusFilter. Summary information - for stacks that have been deleted is kept for 90 days after - the stack is deleted. If no StackStatusFilter is specified, - summary information for all stacks is returned (including - existing stacks and stacks that have been deleted). - - :type next_token: string - :param next_token: String that identifies the start of the next list of - stacks, if there is one. - Default: There is no default value. - - :type stack_status_filter: list - :param stack_status_filter: Stack status to use as a filter. Specify - one or more stack status codes to list only stacks with the - specified status codes. For a complete list of stack status codes, - see the `StackStatus` parameter of the Stack data type. - - """ - params = {} - if next_token: - params['NextToken'] = next_token - if stack_status_filters and len(stack_status_filters) > 0: - self.build_list_params(params, stack_status_filters, - "StackStatusFilter.member") - - return self.get_list('ListStacks', params, - [('member', StackSummary)]) - - def validate_template(self, template_body=None, template_url=None): - """ - Validates a specified template. - - :type template_body: string - :param template_body: String containing the template body. (For more - information, go to `Template Anatomy`_ in the AWS CloudFormation - User Guide.) - Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are - passed, only `TemplateBody` is used. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template (max size: 307,200 bytes) located in - an S3 bucket in the same region as the stack. For more information, - go to `Template Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are - passed, only `TemplateBody` is used. - - """ - params = {} - if template_body: - params['TemplateBody'] = template_body - if template_url: - params['TemplateURL'] = template_url - if template_body and template_url: - boto.log.warning("If both TemplateBody and TemplateURL are" - " specified, only TemplateBody will be honored by the API") - return self.get_object('ValidateTemplate', params, Template, - verb="POST") - - def cancel_update_stack(self, stack_name_or_id=None): - """ - Cancels an update on the specified stack. If the call - completes successfully, the stack will roll back the update - and revert to the previous stack configuration. - Only stacks that are in the UPDATE_IN_PROGRESS state can be - canceled. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or the unique identifier associated with - the stack. - - """ - params = {} - if stack_name_or_id: - params['StackName'] = stack_name_or_id - return self.get_status('CancelUpdateStack', params) - - def estimate_template_cost(self, template_body=None, template_url=None, - parameters=None): - """ - Returns the estimated monthly cost of a template. The return - value is an AWS Simple Monthly Calculator URL with a query - string that describes the resources required to run the - template. - - :type template_body: string - :param template_body: Structure containing the template body. (For more - information, go to `Template Anatomy`_ in the AWS CloudFormation - User Guide.) - Conditional: You must pass `TemplateBody` or `TemplateURL`. If both are - passed, only `TemplateBody` is used. - - :type template_url: string - :param template_url: Location of file containing the template body. The - URL must point to a template located in an S3 bucket in the same - region as the stack. For more information, go to `Template - Anatomy`_ in the AWS CloudFormation User Guide. - Conditional: You must pass `TemplateURL` or `TemplateBody`. If both are - passed, only `TemplateBody` is used. - - :type parameters: list - :param parameters: A list of key/value tuples that specify input - parameters for the template. - - :rtype: string - :returns: URL to pre-filled cost calculator - """ - params = {'ContentType': "JSON"} - if template_body is not None: - params['TemplateBody'] = template_body - if template_url is not None: - params['TemplateURL'] = template_url - if parameters and len(parameters) > 0: - for i, (key, value) in enumerate(parameters): - params['Parameters.member.%d.ParameterKey' % (i + 1)] = key - params['Parameters.member.%d.ParameterValue' % (i + 1)] = value - - response = self._do_request('EstimateTemplateCost', params, '/', 'POST') - return response['EstimateTemplateCostResponse']\ - ['EstimateTemplateCostResult']\ - ['Url'] - - def get_stack_policy(self, stack_name_or_id): - """ - Returns the stack policy for a specified stack. If a stack - doesn't have a policy, a null value is returned. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or stack ID that is associated with - the stack whose policy you want to get. - - :rtype: string - :return: The policy JSON document - """ - params = {'ContentType': "JSON", 'StackName': stack_name_or_id, } - response = self._do_request('GetStackPolicy', params, '/', 'POST') - return response['GetStackPolicyResponse']\ - ['GetStackPolicyResult']\ - ['StackPolicyBody'] - - def set_stack_policy(self, stack_name_or_id, stack_policy_body=None, - stack_policy_url=None): - """ - Sets a stack policy for a specified stack. - - :type stack_name_or_id: string - :param stack_name_or_id: The name or stack ID that you want to - associate a policy with. - - :type stack_policy_body: string - :param stack_policy_body: Structure containing the stack policy body. - (For more information, go to ` Prevent Updates to Stack Resources`_ - in the AWS CloudFormation User Guide.) - You must pass `StackPolicyBody` or `StackPolicyURL`. If both are - passed, only `StackPolicyBody` is used. - - :type stack_policy_url: string - :param stack_policy_url: Location of a file containing the stack - policy. The URL must point to a policy (max size: 16KB) located in - an S3 bucket in the same region as the stack. You must pass - `StackPolicyBody` or `StackPolicyURL`. If both are passed, only - `StackPolicyBody` is used. - - """ - params = {'ContentType': "JSON", 'StackName': stack_name_or_id, } - if stack_policy_body is not None: - params['StackPolicyBody'] = stack_policy_body - if stack_policy_url is not None: - params['StackPolicyURL'] = stack_policy_url - - response = self._do_request('SetStackPolicy', params, '/', 'POST') - return response['SetStackPolicyResponse']