in lambdas/index.py [0:0]
def lambda_handler(event, context):
logger.info(event)
project = event["detail"]["project-name"]
status = event["detail"]["build-status"]
env_vars = event["detail"]["additional-information"]["environment"]["environment-variables"]
template_params = {
"PROJECT": project,
"STATUS": status,
}
template_params.update({i["name"]: i["value"] for i in env_vars})
logger.info("Template params: %s", template_params)
hooks = get_hooks_for_project(project)
logger.info("Obtained %s hooks for project %s", len(hooks), project)
for i in hooks:
try:
hook_url_param = i["hook_url_param_name"]
statuses = i["statuses"]
message = compile_template(template_params, i.get("template"))
logger.info("Compiled template: %s", message)
if status in statuses:
logger.info("Invoking hook with SSM param '%s' for status '%s'", hook_url_param, status)
hook_url = get_ssm_param(hook_url_param)
headers = None
header_param_name = i.get("hook_headers_param_name", None)
if header_param_name:
headers = json.loads(get_ssm_param(header_param_name))
invoke_webhook(hook_url, message, headers)
except ClientError as e:
logger.error(
"Unable to retrieve webhook url from Parameter Store for item %s",
hook_url_param)
logger.error(str(e))
except ValueError as e:
logger.error(
"Unable to post to webhook url from Parameter Store for item %s",
hook_url_param)
logger.error(str(e))
except KeyError as e:
logger.error("Invalid DDB item. Verify your template is valid.")
logger.error(str(e))