diff --git a/gitops_server/settings.py b/gitops_server/settings.py index f51d5ef..0d5bcbc 100644 --- a/gitops_server/settings.py +++ b/gitops_server/settings.py @@ -12,5 +12,7 @@ # The slack channel ID starts with C SLACK_CHANNEL_ID = os.environ.get("SLACK_CHANNEL_ID", "") +SLACK_ALERT_CHANNEL_ID = os.environ.get("SLACK_ALERT_CHANNEL_ID", "") + # How many parallel deploys can be done at once GITOPS_MAX_PARALLEL_DEPLOYS = os.environ.get("GITOPS_MAX_PARALLEL_DEPLOYS", "5") diff --git a/gitops_server/utils/slack.py b/gitops_server/utils/slack.py index 9e91105..855c5a1 100644 --- a/gitops_server/utils/slack.py +++ b/gitops_server/utils/slack.py @@ -27,11 +27,22 @@ def __str__(self) -> str: return f"" +async def post_alert(message: str) -> str | None: + """ + Post a message to a slack alert channel (if it's configured) or the default slack channel + """ + return await post_to_channel(message, channel_id=settings.SLACK_ALERT_CHANNEL_ID or settings.SLACK_CHANNEL_ID) + + async def post(message: str) -> str | None: """Post a message to a slack channel""" + return await post_to_channel(message, channel_id=settings.SLACK_CHANNEL_ID) + + +async def post_to_channel(message: str, channel_id: str | None) -> str | None: logger.info("POSTING TO SLACK") - if settings.SLACK_TOKEN and settings.SLACK_CHANNEL_ID: - response = client.chat_postMessage(channel=settings.SLACK_CHANNEL_ID, text=message) + if settings.SLACK_TOKEN and channel_id: + response = client.chat_postMessage(channel=channel_id, text=message) if response.status_code >= 300: logger.warning("Failed to post a message to slack (see below):") logger.error(f"{message}", exc_info=True) diff --git a/gitops_server/workers/deployer/deploy.py b/gitops_server/workers/deployer/deploy.py index 3121fe5..fc9cb88 100644 --- a/gitops_server/workers/deployer/deploy.py +++ b/gitops_server/workers/deployer/deploy.py @@ -271,7 +271,7 @@ async def post_result(self, app: App, result: UpdateAppResult, deployer: "Deploy deploy_result["slack_message"] or f"Failed to deploy app `{result['app_name']}` for cluster `{settings.CLUSTER_NAME}`:\n>>>{result['output']}" ) - await slack.post(message) + await slack.post_alert(message) else: self.successful_apps.add(app.name) await handle_successful_deploy(app, result, deployer)