| Index: third_party/boto/boto/cloudformation/connection.py
|
| ===================================================================
|
| --- third_party/boto/boto/cloudformation/connection.py (revision 33376)
|
| +++ third_party/boto/boto/cloudformation/connection.py (working copy)
|
| @@ -1,4 +1,5 @@
|
| # 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
|
| @@ -29,10 +30,29 @@
|
|
|
|
|
| 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/`_.
|
| """
|
| - A Connection to the CloudFormation Service.
|
| - """
|
| 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',
|
| @@ -52,7 +72,8 @@
|
| 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):
|
| + converter=None, security_token=None, validate_certs=True,
|
| + profile_name=None):
|
| if not region:
|
| region = RegionInfo(self, self.DefaultRegionName,
|
| self.DefaultRegionEndpoint, CloudFormationConnection)
|
| @@ -64,7 +85,8 @@
|
| self.region.endpoint, debug,
|
| https_connection_factory, path,
|
| security_token,
|
| - validate_certs=validate_certs)
|
| + validate_certs=validate_certs,
|
| + profile_name=profile_name)
|
|
|
| def _required_auth_capability(self):
|
| return ['hmac-v4']
|
| @@ -74,51 +96,118 @@
|
| return {True: "true", False: "false"}[v]
|
|
|
| def _build_create_or_update_params(self, stack_name, template_body,
|
| - template_url, parameters,
|
| - notification_arns, disable_rollback,
|
| - timeout_in_minutes, capabilities, tags):
|
| + template_url, parameters, disable_rollback, timeout_in_minutes,
|
| + notification_arns, capabilities, on_failure, stack_policy_body,
|
| + stack_policy_url, tags, 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 of the Stack, must be unique amoung running
|
| - Stacks
|
| + :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: The template body (JSON 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: An S3 URL of a stored template JSON document. If
|
| - both the template_body and template_url are
|
| - specified, the template_body takes precedence
|
| + :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 of tuples
|
| - :param parameters: A list of (key, value) pairs for template input
|
| - parameters.
|
| + :type parameters: list
|
| + :param parameters: A list of key/value tuples that specify input
|
| + parameters for the stack.
|
|
|
| - :type notification_arns: list of strings
|
| - :param notification_arns: A list of SNS topics to send Stack event
|
| - notifications to.
|
| + :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 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 timeout_in_minutes: int
|
| - :param timeout_in_minutes: Maximum amount of time to let the Stack
|
| - spend creating itself. If this timeout is exceeded,
|
| - the Stack will enter the CREATE_FAILED state.
|
| + :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 you want to allow in
|
| - the stack. Currently, the only valid capability is
|
| - 'CAPABILITY_IAM'.
|
| + :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 tags: dict
|
| - :param tags: A dictionary of (key, value) pairs of tags to
|
| - associate with this stack.
|
| + :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 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.
|
| """
|
| @@ -131,7 +220,7 @@
|
| 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 len(parameters) > 0:
|
| + 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
|
| @@ -142,107 +231,224 @@
|
| 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 len(notification_arns) > 0:
|
| + 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()
|
| + 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=[], notification_arns=[], disable_rollback=False,
|
| - timeout_in_minutes=None, capabilities=None, tags=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 CloudFormation Stack as specified by the template.
|
| + 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 of the Stack, must be unique amoung running
|
| - Stacks
|
| + :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: The template body (JSON 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: An S3 URL of a stored template JSON document. If
|
| - both the template_body and template_url are
|
| - specified, the template_body takes precedence
|
| + :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 of tuples
|
| - :param parameters: A list of (key, value) pairs for template input
|
| - parameters.
|
| + :type parameters: list
|
| + :param parameters: A list of key/value tuples that specify input
|
| + parameters for the stack.
|
|
|
| - :type notification_arns: list of strings
|
| - :param notification_arns: A list of SNS topics to send Stack event
|
| - notifications to.
|
| + :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 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 timeout_in_minutes: int
|
| - :param timeout_in_minutes: Maximum amount of time to let the Stack
|
| - spend creating itself. If this timeout is exceeded,
|
| - the Stack will enter the CREATE_FAILED state.
|
| + :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 you want to allow in
|
| - the stack. Currently, the only valid capability is
|
| - 'CAPABILITY_IAM'.
|
| + :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 dictionary of (key, value) pairs of tags to
|
| - associate with this stack.
|
| -
|
| - :rtype: string
|
| - :return: The unique Stack ID.
|
| + :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, notification_arns,
|
| - disable_rollback, timeout_in_minutes, capabilities, tags)
|
| - response = self.make_request('CreateStack', params, '/', 'POST')
|
| - body = response.read()
|
| - if response.status == 200:
|
| - body = json.loads(body)
|
| - return body['CreateStackResponse']['CreateStackResult']['StackId']
|
| - else:
|
| - boto.log.error('%s %s' % (response.status, response.reason))
|
| - boto.log.error('%s' % body)
|
| - raise self.ResponseError(response.status, response.reason, body)
|
| + 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=[], notification_arns=[], disable_rollback=False,
|
| - timeout_in_minutes=None, capabilities=None, tags=None):
|
| + parameters=None, notification_arns=None, disable_rollback=False,
|
| + timeout_in_minutes=None, capabilities=None, tags=None,
|
| + stack_policy_during_update_body=None,
|
| + stack_policy_during_update_url=None,
|
| + stack_policy_body=None, stack_policy_url=None):
|
| """
|
| - Updates a CloudFormation Stack as specified by the template.
|
| + 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 of the Stack, must be unique amoung running
|
| - Stacks.
|
| + :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: The template body (JSON 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: An S3 URL of a stored template JSON document. If
|
| - both the template_body and template_url are
|
| - specified, the template_body takes precedence.
|
| + :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 of tuples
|
| - :param parameters: A list of (key, value) pairs for template input
|
| - parameters.
|
| + :type parameters: list
|
| + :param parameters: A list of key/value tuples that specify input
|
| + parameters for the stack.
|
|
|
| - :type notification_arns: list of strings
|
| - :param notification_arns: A list of SNS topics to send Stack event
|
| - notifications to.
|
| + :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: int
|
| - :param timeout_in_minutes: Maximum amount of time to let the Stack
|
| - spend creating itself. If this timeout is exceeded,
|
| - the Stack will enter the CREATE_FAILED state
|
| + :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
|
| @@ -250,38 +456,86 @@
|
| 'CAPABILITY_IAM'.
|
|
|
| :type tags: dict
|
| - :param tags: A dictionary of (key, value) pairs of tags to
|
| - associate with this stack.
|
| + :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, notification_arns,
|
| - disable_rollback, timeout_in_minutes, capabilities, tags)
|
| - response = self.make_request('UpdateStack', params, '/', 'POST')
|
| - body = response.read()
|
| - if response.status == 200:
|
| - body = json.loads(body)
|
| - return body['UpdateStackResponse']['UpdateStackResult']['StackId']
|
| - else:
|
| - boto.log.error('%s %s' % (response.status, response.reason))
|
| - boto.log.error('%s' % body)
|
| - raise self.ResponseError(response.status, response.reason, body)
|
| + 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, 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}
|
| - # TODO: change this to get_status ?
|
| - response = self.make_request('DeleteStack', params, '/', 'GET')
|
| - body = response.read()
|
| - if response.status == 200:
|
| - return json.loads(body)
|
| - else:
|
| - boto.log.error('%s %s' % (response.status, response.reason))
|
| - boto.log.error('%s' % body)
|
| - raise self.ResponseError(response.status, response.reason, body)
|
| + 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
|
| @@ -291,21 +545,82 @@
|
| 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}
|
| - response = self.make_request('DescribeStackResource', params,
|
| - '/', 'GET')
|
| - body = response.read()
|
| - if response.status == 200:
|
| - return json.loads(body)
|
| - else:
|
| - boto.log.error('%s %s' % (response.status, response.reason))
|
| - boto.log.error('%s' % body)
|
| - raise self.ResponseError(response.status, response.reason, body)
|
| + 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
|
| @@ -316,35 +631,110 @@
|
| return self.get_list('DescribeStackResources', params,
|
| [('member', StackResource)])
|
|
|
| - def describe_stacks(self, stack_name_or_id=None):
|
| + 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}
|
| - response = self.make_request('GetTemplate', params, '/', 'GET')
|
| - body = response.read()
|
| - if response.status == 200:
|
| - return json.loads(body)
|
| - else:
|
| - boto.log.error('%s %s' % (response.status, response.reason))
|
| - boto.log.error('%s' % body)
|
| - raise self.ResponseError(response.status, response.reason, body)
|
| + 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=[], next_token=None):
|
| + 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 len(stack_status_filters) > 0:
|
| + if stack_status_filters and len(stack_status_filters) > 0:
|
| self.build_list_params(params, stack_status_filters,
|
| "StackStatusFilter.member")
|
|
|
| @@ -352,6 +742,25 @@
|
| [('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
|
| @@ -364,7 +773,116 @@
|
| 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']\
|
| + ['SetStackPolicyResult']
|
|
|