in lib/cf_util.py [0:0]
def create_or_update_stack(stack_name, template_file_path, params, capabilities=[]):
template_data = __parse_template(template_file_path)
parameter_map = __get_parameter_map(params)
try:
if stack_exists(stack_name):
response = cf.update_stack(
StackName=stack_name,
TemplateBody=template_data,
Parameters=parameter_map,
Capabilities=capabilities
)
action = "update"
waiter = cf.get_waiter('stack_update_complete')
else:
response = cf.create_stack(
StackName=stack_name,
TemplateBody=template_data,
Parameters=parameter_map,
Capabilities=capabilities,
OnFailure='DELETE'
)
action = "create"
waiter = cf.get_waiter('stack_create_complete')
# Wait until stack creation has finished
waiter.wait(StackName=stack_name)
except ClientError as ex:
error_message = ex.response['Error']['Message']
if error_message == 'No updates are to be performed.':
action = "none"
else:
raise
return action