Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(623)

Unified Diff: third_party/gsutil/third_party/boto/boto/cloudformation/connection.py

Issue 1377933002: [catapult] - Copy Telemetry's gsutilz over to third_party. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: Rename to gsutil. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/third_party/boto/boto/cloudformation/connection.py
diff --git a/third_party/gsutil/third_party/boto/boto/cloudformation/connection.py b/third_party/gsutil/third_party/boto/boto/cloudformation/connection.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee850b30cae25858cb0ede019d1afef56b76fc44
--- /dev/null
+++ b/third_party/gsutil/third_party/boto/boto/cloudformation/connection.py
@@ -0,0 +1,922 @@
+# 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']

Powered by Google App Engine
This is Rietveld 408576698