Run black on moto & test directories.
This commit is contained in:
parent
c820395dbf
commit
96e5b1993d
507 changed files with 52541 additions and 47814 deletions
|
|
@ -12,7 +12,6 @@ from .exceptions import ValidationError
|
|||
|
||||
|
||||
class CloudFormationResponse(BaseResponse):
|
||||
|
||||
@property
|
||||
def cloudformation_backend(self):
|
||||
return cloudformation_backends[self.region]
|
||||
|
|
@ -20,17 +19,18 @@ class CloudFormationResponse(BaseResponse):
|
|||
def _get_stack_from_s3_url(self, template_url):
|
||||
template_url_parts = urlparse(template_url)
|
||||
if "localhost" in template_url:
|
||||
bucket_name, key_name = template_url_parts.path.lstrip(
|
||||
"/").split("/", 1)
|
||||
bucket_name, key_name = template_url_parts.path.lstrip("/").split("/", 1)
|
||||
else:
|
||||
if template_url_parts.netloc.endswith('amazonaws.com') \
|
||||
and template_url_parts.netloc.startswith('s3'):
|
||||
if template_url_parts.netloc.endswith(
|
||||
"amazonaws.com"
|
||||
) and template_url_parts.netloc.startswith("s3"):
|
||||
# Handle when S3 url uses amazon url with bucket in path
|
||||
# Also handles getting region as technically s3 is region'd
|
||||
|
||||
# region = template_url.netloc.split('.')[1]
|
||||
bucket_name, key_name = template_url_parts.path.lstrip(
|
||||
"/").split("/", 1)
|
||||
bucket_name, key_name = template_url_parts.path.lstrip("/").split(
|
||||
"/", 1
|
||||
)
|
||||
else:
|
||||
bucket_name = template_url_parts.netloc.split(".")[0]
|
||||
key_name = template_url_parts.path.lstrip("/")
|
||||
|
|
@ -39,24 +39,26 @@ class CloudFormationResponse(BaseResponse):
|
|||
return key.value.decode("utf-8")
|
||||
|
||||
def create_stack(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
stack_body = self._get_param('TemplateBody')
|
||||
template_url = self._get_param('TemplateURL')
|
||||
role_arn = self._get_param('RoleARN')
|
||||
stack_name = self._get_param("StackName")
|
||||
stack_body = self._get_param("TemplateBody")
|
||||
template_url = self._get_param("TemplateURL")
|
||||
role_arn = self._get_param("RoleARN")
|
||||
parameters_list = self._get_list_prefix("Parameters.member")
|
||||
tags = dict((item['key'], item['value'])
|
||||
for item in self._get_list_prefix("Tags.member"))
|
||||
tags = dict(
|
||||
(item["key"], item["value"])
|
||||
for item in self._get_list_prefix("Tags.member")
|
||||
)
|
||||
|
||||
# Hack dict-comprehension
|
||||
parameters = dict([
|
||||
(parameter['parameter_key'], parameter['parameter_value'])
|
||||
for parameter
|
||||
in parameters_list
|
||||
])
|
||||
parameters = dict(
|
||||
[
|
||||
(parameter["parameter_key"], parameter["parameter_value"])
|
||||
for parameter in parameters_list
|
||||
]
|
||||
)
|
||||
if template_url:
|
||||
stack_body = self._get_stack_from_s3_url(template_url)
|
||||
stack_notification_arns = self._get_multi_param(
|
||||
'NotificationARNs.member')
|
||||
stack_notification_arns = self._get_multi_param("NotificationARNs.member")
|
||||
|
||||
stack = self.cloudformation_backend.create_stack(
|
||||
name=stack_name,
|
||||
|
|
@ -68,34 +70,37 @@ class CloudFormationResponse(BaseResponse):
|
|||
role_arn=role_arn,
|
||||
)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'CreateStackResponse': {
|
||||
'CreateStackResult': {
|
||||
'StackId': stack.stack_id,
|
||||
return json.dumps(
|
||||
{
|
||||
"CreateStackResponse": {
|
||||
"CreateStackResult": {"StackId": stack.stack_id}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
else:
|
||||
template = self.response_template(CREATE_STACK_RESPONSE_TEMPLATE)
|
||||
return template.render(stack=stack)
|
||||
|
||||
@amzn_request_id
|
||||
def create_change_set(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
change_set_name = self._get_param('ChangeSetName')
|
||||
stack_body = self._get_param('TemplateBody')
|
||||
template_url = self._get_param('TemplateURL')
|
||||
role_arn = self._get_param('RoleARN')
|
||||
update_or_create = self._get_param('ChangeSetType', 'CREATE')
|
||||
stack_name = self._get_param("StackName")
|
||||
change_set_name = self._get_param("ChangeSetName")
|
||||
stack_body = self._get_param("TemplateBody")
|
||||
template_url = self._get_param("TemplateURL")
|
||||
role_arn = self._get_param("RoleARN")
|
||||
update_or_create = self._get_param("ChangeSetType", "CREATE")
|
||||
parameters_list = self._get_list_prefix("Parameters.member")
|
||||
tags = dict((item['key'], item['value'])
|
||||
for item in self._get_list_prefix("Tags.member"))
|
||||
parameters = {param['parameter_key']: param['parameter_value']
|
||||
for param in parameters_list}
|
||||
tags = dict(
|
||||
(item["key"], item["value"])
|
||||
for item in self._get_list_prefix("Tags.member")
|
||||
)
|
||||
parameters = {
|
||||
param["parameter_key"]: param["parameter_value"]
|
||||
for param in parameters_list
|
||||
}
|
||||
if template_url:
|
||||
stack_body = self._get_stack_from_s3_url(template_url)
|
||||
stack_notification_arns = self._get_multi_param(
|
||||
'NotificationARNs.member')
|
||||
stack_notification_arns = self._get_multi_param("NotificationARNs.member")
|
||||
change_set_id, stack_id = self.cloudformation_backend.create_change_set(
|
||||
stack_name=stack_name,
|
||||
change_set_name=change_set_name,
|
||||
|
|
@ -108,66 +113,64 @@ class CloudFormationResponse(BaseResponse):
|
|||
change_set_type=update_or_create,
|
||||
)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'CreateChangeSetResponse': {
|
||||
'CreateChangeSetResult': {
|
||||
'Id': change_set_id,
|
||||
'StackId': stack_id,
|
||||
return json.dumps(
|
||||
{
|
||||
"CreateChangeSetResponse": {
|
||||
"CreateChangeSetResult": {
|
||||
"Id": change_set_id,
|
||||
"StackId": stack_id,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
else:
|
||||
template = self.response_template(CREATE_CHANGE_SET_RESPONSE_TEMPLATE)
|
||||
return template.render(stack_id=stack_id, change_set_id=change_set_id)
|
||||
|
||||
def delete_change_set(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
change_set_name = self._get_param('ChangeSetName')
|
||||
stack_name = self._get_param("StackName")
|
||||
change_set_name = self._get_param("ChangeSetName")
|
||||
|
||||
self.cloudformation_backend.delete_change_set(change_set_name=change_set_name, stack_name=stack_name)
|
||||
self.cloudformation_backend.delete_change_set(
|
||||
change_set_name=change_set_name, stack_name=stack_name
|
||||
)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'DeleteChangeSetResponse': {
|
||||
'DeleteChangeSetResult': {},
|
||||
}
|
||||
})
|
||||
return json.dumps(
|
||||
{"DeleteChangeSetResponse": {"DeleteChangeSetResult": {}}}
|
||||
)
|
||||
else:
|
||||
template = self.response_template(DELETE_CHANGE_SET_RESPONSE_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def describe_change_set(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
change_set_name = self._get_param('ChangeSetName')
|
||||
stack_name = self._get_param("StackName")
|
||||
change_set_name = self._get_param("ChangeSetName")
|
||||
change_set = self.cloudformation_backend.describe_change_set(
|
||||
change_set_name=change_set_name,
|
||||
stack_name=stack_name,
|
||||
change_set_name=change_set_name, stack_name=stack_name
|
||||
)
|
||||
template = self.response_template(DESCRIBE_CHANGE_SET_RESPONSE_TEMPLATE)
|
||||
return template.render(change_set=change_set)
|
||||
|
||||
@amzn_request_id
|
||||
def execute_change_set(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
change_set_name = self._get_param('ChangeSetName')
|
||||
stack_name = self._get_param("StackName")
|
||||
change_set_name = self._get_param("ChangeSetName")
|
||||
self.cloudformation_backend.execute_change_set(
|
||||
stack_name=stack_name,
|
||||
change_set_name=change_set_name,
|
||||
stack_name=stack_name, change_set_name=change_set_name
|
||||
)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'ExecuteChangeSetResponse': {
|
||||
'ExecuteChangeSetResult': {},
|
||||
}
|
||||
})
|
||||
return json.dumps(
|
||||
{"ExecuteChangeSetResponse": {"ExecuteChangeSetResult": {}}}
|
||||
)
|
||||
else:
|
||||
template = self.response_template(EXECUTE_CHANGE_SET_RESPONSE_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def describe_stacks(self):
|
||||
stack_name_or_id = None
|
||||
if self._get_param('StackName'):
|
||||
stack_name_or_id = self.querystring.get('StackName')[0]
|
||||
token = self._get_param('NextToken')
|
||||
if self._get_param("StackName"):
|
||||
stack_name_or_id = self.querystring.get("StackName")[0]
|
||||
token = self._get_param("NextToken")
|
||||
stacks = self.cloudformation_backend.describe_stacks(stack_name_or_id)
|
||||
stack_ids = [stack.stack_id for stack in stacks]
|
||||
if token:
|
||||
|
|
@ -175,7 +178,7 @@ class CloudFormationResponse(BaseResponse):
|
|||
else:
|
||||
start = 0
|
||||
max_results = 50 # using this to mske testing of paginated stacks more convenient than default 1 MB
|
||||
stacks_resp = stacks[start:start + max_results]
|
||||
stacks_resp = stacks[start : start + max_results]
|
||||
next_token = None
|
||||
if len(stacks) > (start + max_results):
|
||||
next_token = stacks_resp[-1].stack_id
|
||||
|
|
@ -183,9 +186,9 @@ class CloudFormationResponse(BaseResponse):
|
|||
return template.render(stacks=stacks_resp, next_token=next_token)
|
||||
|
||||
def describe_stack_resource(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
stack_name = self._get_param("StackName")
|
||||
stack = self.cloudformation_backend.get_stack(stack_name)
|
||||
logical_resource_id = self._get_param('LogicalResourceId')
|
||||
logical_resource_id = self._get_param("LogicalResourceId")
|
||||
|
||||
for stack_resource in stack.stack_resources:
|
||||
if stack_resource.logical_resource_id == logical_resource_id:
|
||||
|
|
@ -194,19 +197,18 @@ class CloudFormationResponse(BaseResponse):
|
|||
else:
|
||||
raise ValidationError(logical_resource_id)
|
||||
|
||||
template = self.response_template(
|
||||
DESCRIBE_STACK_RESOURCE_RESPONSE_TEMPLATE)
|
||||
template = self.response_template(DESCRIBE_STACK_RESOURCE_RESPONSE_TEMPLATE)
|
||||
return template.render(stack=stack, resource=resource)
|
||||
|
||||
def describe_stack_resources(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
stack_name = self._get_param("StackName")
|
||||
stack = self.cloudformation_backend.get_stack(stack_name)
|
||||
|
||||
template = self.response_template(DESCRIBE_STACK_RESOURCES_RESPONSE)
|
||||
return template.render(stack=stack)
|
||||
|
||||
def describe_stack_events(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
stack_name = self._get_param("StackName")
|
||||
stack = self.cloudformation_backend.get_stack(stack_name)
|
||||
|
||||
template = self.response_template(DESCRIBE_STACK_EVENTS_RESPONSE)
|
||||
|
|
@ -223,68 +225,82 @@ class CloudFormationResponse(BaseResponse):
|
|||
return template.render(stacks=stacks)
|
||||
|
||||
def list_stack_resources(self):
|
||||
stack_name_or_id = self._get_param('StackName')
|
||||
resources = self.cloudformation_backend.list_stack_resources(
|
||||
stack_name_or_id)
|
||||
stack_name_or_id = self._get_param("StackName")
|
||||
resources = self.cloudformation_backend.list_stack_resources(stack_name_or_id)
|
||||
|
||||
template = self.response_template(LIST_STACKS_RESOURCES_RESPONSE)
|
||||
return template.render(resources=resources)
|
||||
|
||||
def get_template(self):
|
||||
name_or_stack_id = self.querystring.get('StackName')[0]
|
||||
name_or_stack_id = self.querystring.get("StackName")[0]
|
||||
stack = self.cloudformation_backend.get_stack(name_or_stack_id)
|
||||
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
"GetTemplateResponse": {
|
||||
"GetTemplateResult": {
|
||||
"TemplateBody": stack.template,
|
||||
"ResponseMetadata": {
|
||||
"RequestId": "2d06e36c-ac1d-11e0-a958-f9382b6eb86bEXAMPLE"
|
||||
return json.dumps(
|
||||
{
|
||||
"GetTemplateResponse": {
|
||||
"GetTemplateResult": {
|
||||
"TemplateBody": stack.template,
|
||||
"ResponseMetadata": {
|
||||
"RequestId": "2d06e36c-ac1d-11e0-a958-f9382b6eb86bEXAMPLE"
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
else:
|
||||
template = self.response_template(GET_TEMPLATE_RESPONSE_TEMPLATE)
|
||||
return template.render(stack=stack)
|
||||
|
||||
def update_stack(self):
|
||||
stack_name = self._get_param('StackName')
|
||||
role_arn = self._get_param('RoleARN')
|
||||
template_url = self._get_param('TemplateURL')
|
||||
stack_body = self._get_param('TemplateBody')
|
||||
stack_name = self._get_param("StackName")
|
||||
role_arn = self._get_param("RoleARN")
|
||||
template_url = self._get_param("TemplateURL")
|
||||
stack_body = self._get_param("TemplateBody")
|
||||
stack = self.cloudformation_backend.get_stack(stack_name)
|
||||
if self._get_param('UsePreviousTemplate') == "true":
|
||||
if self._get_param("UsePreviousTemplate") == "true":
|
||||
stack_body = stack.template
|
||||
elif not stack_body and template_url:
|
||||
stack_body = self._get_stack_from_s3_url(template_url)
|
||||
|
||||
incoming_params = self._get_list_prefix("Parameters.member")
|
||||
parameters = dict([
|
||||
(parameter['parameter_key'], parameter['parameter_value'])
|
||||
for parameter
|
||||
in incoming_params if 'parameter_value' in parameter
|
||||
])
|
||||
previous = dict([
|
||||
(parameter['parameter_key'], stack.parameters[parameter['parameter_key']])
|
||||
for parameter
|
||||
in incoming_params if 'use_previous_value' in parameter
|
||||
])
|
||||
parameters = dict(
|
||||
[
|
||||
(parameter["parameter_key"], parameter["parameter_value"])
|
||||
for parameter in incoming_params
|
||||
if "parameter_value" in parameter
|
||||
]
|
||||
)
|
||||
previous = dict(
|
||||
[
|
||||
(
|
||||
parameter["parameter_key"],
|
||||
stack.parameters[parameter["parameter_key"]],
|
||||
)
|
||||
for parameter in incoming_params
|
||||
if "use_previous_value" in parameter
|
||||
]
|
||||
)
|
||||
parameters.update(previous)
|
||||
# boto3 is supposed to let you clear the tags by passing an empty value, but the request body doesn't
|
||||
# end up containing anything we can use to differentiate between passing an empty value versus not
|
||||
# passing anything. so until that changes, moto won't be able to clear tags, only update them.
|
||||
tags = dict((item['key'], item['value'])
|
||||
for item in self._get_list_prefix("Tags.member"))
|
||||
tags = dict(
|
||||
(item["key"], item["value"])
|
||||
for item in self._get_list_prefix("Tags.member")
|
||||
)
|
||||
# so that if we don't pass the parameter, we don't clear all the tags accidentally
|
||||
if not tags:
|
||||
tags = None
|
||||
|
||||
stack = self.cloudformation_backend.get_stack(stack_name)
|
||||
if stack.status == 'ROLLBACK_COMPLETE':
|
||||
if stack.status == "ROLLBACK_COMPLETE":
|
||||
raise ValidationError(
|
||||
stack.stack_id, message="Stack:{0} is in ROLLBACK_COMPLETE state and can not be updated.".format(stack.stack_id))
|
||||
stack.stack_id,
|
||||
message="Stack:{0} is in ROLLBACK_COMPLETE state and can not be updated.".format(
|
||||
stack.stack_id
|
||||
),
|
||||
)
|
||||
|
||||
stack = self.cloudformation_backend.update_stack(
|
||||
name=stack_name,
|
||||
|
|
@ -295,11 +311,7 @@ class CloudFormationResponse(BaseResponse):
|
|||
)
|
||||
if self.request_json:
|
||||
stack_body = {
|
||||
'UpdateStackResponse': {
|
||||
'UpdateStackResult': {
|
||||
'StackId': stack.name,
|
||||
}
|
||||
}
|
||||
"UpdateStackResponse": {"UpdateStackResult": {"StackId": stack.name}}
|
||||
}
|
||||
return json.dumps(stack_body)
|
||||
else:
|
||||
|
|
@ -307,56 +319,57 @@ class CloudFormationResponse(BaseResponse):
|
|||
return template.render(stack=stack)
|
||||
|
||||
def delete_stack(self):
|
||||
name_or_stack_id = self.querystring.get('StackName')[0]
|
||||
name_or_stack_id = self.querystring.get("StackName")[0]
|
||||
|
||||
self.cloudformation_backend.delete_stack(name_or_stack_id)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'DeleteStackResponse': {
|
||||
'DeleteStackResult': {},
|
||||
}
|
||||
})
|
||||
return json.dumps({"DeleteStackResponse": {"DeleteStackResult": {}}})
|
||||
else:
|
||||
template = self.response_template(DELETE_STACK_RESPONSE_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def list_exports(self):
|
||||
token = self._get_param('NextToken')
|
||||
token = self._get_param("NextToken")
|
||||
exports, next_token = self.cloudformation_backend.list_exports(token=token)
|
||||
template = self.response_template(LIST_EXPORTS_RESPONSE)
|
||||
return template.render(exports=exports, next_token=next_token)
|
||||
|
||||
def validate_template(self):
|
||||
cfn_lint = self.cloudformation_backend.validate_template(self._get_param('TemplateBody'))
|
||||
cfn_lint = self.cloudformation_backend.validate_template(
|
||||
self._get_param("TemplateBody")
|
||||
)
|
||||
if cfn_lint:
|
||||
raise ValidationError(cfn_lint[0].message)
|
||||
description = ""
|
||||
try:
|
||||
description = json.loads(self._get_param('TemplateBody'))['Description']
|
||||
description = json.loads(self._get_param("TemplateBody"))["Description"]
|
||||
except (ValueError, KeyError):
|
||||
pass
|
||||
try:
|
||||
description = yaml.load(self._get_param('TemplateBody'))['Description']
|
||||
description = yaml.load(self._get_param("TemplateBody"))["Description"]
|
||||
except (yaml.ParserError, KeyError):
|
||||
pass
|
||||
template = self.response_template(VALIDATE_STACK_RESPONSE_TEMPLATE)
|
||||
return template.render(description=description)
|
||||
|
||||
def create_stack_set(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
stack_body = self._get_param('TemplateBody')
|
||||
template_url = self._get_param('TemplateURL')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
stack_body = self._get_param("TemplateBody")
|
||||
template_url = self._get_param("TemplateURL")
|
||||
# role_arn = self._get_param('RoleARN')
|
||||
parameters_list = self._get_list_prefix("Parameters.member")
|
||||
tags = dict((item['key'], item['value'])
|
||||
for item in self._get_list_prefix("Tags.member"))
|
||||
tags = dict(
|
||||
(item["key"], item["value"])
|
||||
for item in self._get_list_prefix("Tags.member")
|
||||
)
|
||||
|
||||
# Copy-Pasta - Hack dict-comprehension
|
||||
parameters = dict([
|
||||
(parameter['parameter_key'], parameter['parameter_value'])
|
||||
for parameter
|
||||
in parameters_list
|
||||
])
|
||||
parameters = dict(
|
||||
[
|
||||
(parameter["parameter_key"], parameter["parameter_value"])
|
||||
for parameter in parameters_list
|
||||
]
|
||||
)
|
||||
if template_url:
|
||||
stack_body = self._get_stack_from_s3_url(template_url)
|
||||
|
||||
|
|
@ -368,59 +381,65 @@ class CloudFormationResponse(BaseResponse):
|
|||
# role_arn=role_arn,
|
||||
)
|
||||
if self.request_json:
|
||||
return json.dumps({
|
||||
'CreateStackSetResponse': {
|
||||
'CreateStackSetResult': {
|
||||
'StackSetId': stackset.stackset_id,
|
||||
return json.dumps(
|
||||
{
|
||||
"CreateStackSetResponse": {
|
||||
"CreateStackSetResult": {"StackSetId": stackset.stackset_id}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
else:
|
||||
template = self.response_template(CREATE_STACK_SET_RESPONSE_TEMPLATE)
|
||||
return template.render(stackset=stackset)
|
||||
|
||||
def create_stack_instances(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
accounts = self._get_multi_param('Accounts.member')
|
||||
regions = self._get_multi_param('Regions.member')
|
||||
parameters = self._get_multi_param('ParameterOverrides.member')
|
||||
self.cloudformation_backend.create_stack_instances(stackset_name, accounts, regions, parameters)
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
accounts = self._get_multi_param("Accounts.member")
|
||||
regions = self._get_multi_param("Regions.member")
|
||||
parameters = self._get_multi_param("ParameterOverrides.member")
|
||||
self.cloudformation_backend.create_stack_instances(
|
||||
stackset_name, accounts, regions, parameters
|
||||
)
|
||||
template = self.response_template(CREATE_STACK_INSTANCES_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def delete_stack_set(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
self.cloudformation_backend.delete_stack_set(stackset_name)
|
||||
template = self.response_template(DELETE_STACK_SET_RESPONSE_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def delete_stack_instances(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
accounts = self._get_multi_param('Accounts.member')
|
||||
regions = self._get_multi_param('Regions.member')
|
||||
operation = self.cloudformation_backend.delete_stack_instances(stackset_name, accounts, regions)
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
accounts = self._get_multi_param("Accounts.member")
|
||||
regions = self._get_multi_param("Regions.member")
|
||||
operation = self.cloudformation_backend.delete_stack_instances(
|
||||
stackset_name, accounts, regions
|
||||
)
|
||||
|
||||
template = self.response_template(DELETE_STACK_INSTANCES_TEMPLATE)
|
||||
return template.render(operation=operation)
|
||||
|
||||
def describe_stack_set(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
|
||||
if not stackset.admin_role:
|
||||
stackset.admin_role = 'arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole'
|
||||
stackset.admin_role = "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole"
|
||||
if not stackset.execution_role:
|
||||
stackset.execution_role = 'AWSCloudFormationStackSetExecutionRole'
|
||||
stackset.execution_role = "AWSCloudFormationStackSetExecutionRole"
|
||||
|
||||
template = self.response_template(DESCRIBE_STACK_SET_RESPONSE_TEMPLATE)
|
||||
return template.render(stackset=stackset)
|
||||
|
||||
def describe_stack_instance(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
account = self._get_param('StackInstanceAccount')
|
||||
region = self._get_param('StackInstanceRegion')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
account = self._get_param("StackInstanceAccount")
|
||||
region = self._get_param("StackInstanceRegion")
|
||||
|
||||
instance = self.cloudformation_backend.get_stack_set(stackset_name).instances.get_instance(account, region)
|
||||
instance = self.cloudformation_backend.get_stack_set(
|
||||
stackset_name
|
||||
).instances.get_instance(account, region)
|
||||
template = self.response_template(DESCRIBE_STACK_INSTANCE_TEMPLATE)
|
||||
rendered = template.render(instance=instance)
|
||||
return rendered
|
||||
|
|
@ -431,61 +450,66 @@ class CloudFormationResponse(BaseResponse):
|
|||
return template.render(stacksets=stacksets)
|
||||
|
||||
def list_stack_instances(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
template = self.response_template(LIST_STACK_INSTANCES_TEMPLATE)
|
||||
return template.render(stackset=stackset)
|
||||
|
||||
def list_stack_set_operations(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
template = self.response_template(LIST_STACK_SET_OPERATIONS_RESPONSE_TEMPLATE)
|
||||
return template.render(stackset=stackset)
|
||||
|
||||
def stop_stack_set_operation(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
operation_id = self._get_param('OperationId')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
operation_id = self._get_param("OperationId")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
stackset.update_operation(operation_id, 'STOPPED')
|
||||
stackset.update_operation(operation_id, "STOPPED")
|
||||
template = self.response_template(STOP_STACK_SET_OPERATION_RESPONSE_TEMPLATE)
|
||||
return template.render()
|
||||
|
||||
def describe_stack_set_operation(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
operation_id = self._get_param('OperationId')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
operation_id = self._get_param("OperationId")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
operation = stackset.get_operation(operation_id)
|
||||
template = self.response_template(DESCRIBE_STACKSET_OPERATION_RESPONSE_TEMPLATE)
|
||||
return template.render(stackset=stackset, operation=operation)
|
||||
|
||||
def list_stack_set_operation_results(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
operation_id = self._get_param('OperationId')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
operation_id = self._get_param("OperationId")
|
||||
stackset = self.cloudformation_backend.get_stack_set(stackset_name)
|
||||
operation = stackset.get_operation(operation_id)
|
||||
template = self.response_template(LIST_STACK_SET_OPERATION_RESULTS_RESPONSE_TEMPLATE)
|
||||
template = self.response_template(
|
||||
LIST_STACK_SET_OPERATION_RESULTS_RESPONSE_TEMPLATE
|
||||
)
|
||||
return template.render(operation=operation)
|
||||
|
||||
def update_stack_set(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
operation_id = self._get_param('OperationId')
|
||||
description = self._get_param('Description')
|
||||
execution_role = self._get_param('ExecutionRoleName')
|
||||
admin_role = self._get_param('AdministrationRoleARN')
|
||||
accounts = self._get_multi_param('Accounts.member')
|
||||
regions = self._get_multi_param('Regions.member')
|
||||
template_body = self._get_param('TemplateBody')
|
||||
template_url = self._get_param('TemplateURL')
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
operation_id = self._get_param("OperationId")
|
||||
description = self._get_param("Description")
|
||||
execution_role = self._get_param("ExecutionRoleName")
|
||||
admin_role = self._get_param("AdministrationRoleARN")
|
||||
accounts = self._get_multi_param("Accounts.member")
|
||||
regions = self._get_multi_param("Regions.member")
|
||||
template_body = self._get_param("TemplateBody")
|
||||
template_url = self._get_param("TemplateURL")
|
||||
if template_url:
|
||||
template_body = self._get_stack_from_s3_url(template_url)
|
||||
tags = dict((item['key'], item['value'])
|
||||
for item in self._get_list_prefix("Tags.member"))
|
||||
tags = dict(
|
||||
(item["key"], item["value"])
|
||||
for item in self._get_list_prefix("Tags.member")
|
||||
)
|
||||
parameters_list = self._get_list_prefix("Parameters.member")
|
||||
parameters = dict([
|
||||
(parameter['parameter_key'], parameter['parameter_value'])
|
||||
for parameter
|
||||
in parameters_list
|
||||
])
|
||||
parameters = dict(
|
||||
[
|
||||
(parameter["parameter_key"], parameter["parameter_value"])
|
||||
for parameter in parameters_list
|
||||
]
|
||||
)
|
||||
operation = self.cloudformation_backend.update_stack_set(
|
||||
stackset_name=stackset_name,
|
||||
template=template_body,
|
||||
|
|
@ -496,18 +520,20 @@ class CloudFormationResponse(BaseResponse):
|
|||
execution_role=execution_role,
|
||||
accounts=accounts,
|
||||
regions=regions,
|
||||
operation_id=operation_id
|
||||
operation_id=operation_id,
|
||||
)
|
||||
|
||||
template = self.response_template(UPDATE_STACK_SET_RESPONSE_TEMPLATE)
|
||||
return template.render(operation=operation)
|
||||
|
||||
def update_stack_instances(self):
|
||||
stackset_name = self._get_param('StackSetName')
|
||||
accounts = self._get_multi_param('Accounts.member')
|
||||
regions = self._get_multi_param('Regions.member')
|
||||
parameters = self._get_multi_param('ParameterOverrides.member')
|
||||
operation = self.cloudformation_backend.get_stack_set(stackset_name).update_instances(accounts, regions, parameters)
|
||||
stackset_name = self._get_param("StackSetName")
|
||||
accounts = self._get_multi_param("Accounts.member")
|
||||
regions = self._get_multi_param("Regions.member")
|
||||
parameters = self._get_multi_param("ParameterOverrides.member")
|
||||
operation = self.cloudformation_backend.get_stack_set(
|
||||
stackset_name
|
||||
).update_instances(accounts, regions, parameters)
|
||||
template = self.response_template(UPDATE_STACK_INSTANCES_RESPONSE_TEMPLATE)
|
||||
return template.render(operation=operation)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue