def create_or_update_stack()

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