获取 ArgoCD 中禁用的自动同步功能的定期松弛通知

问题描述 投票:0回答:2

我们最近的一个版本出现了问题,不得不手动回滚所有服务。这样做时,我们必须禁用“自动同步”功能。恢复有问题的 PR 后,我们忘记再次启用自动同步,应用程序一天不同步。 有没有一种方法可以启用触发器或警报,在每个持续时间(例如一小时)后触发,并在 slack 上通知我们自动同步功能已禁用?

我们还希望在每次 PR 合并后启用通知,例如“由于自动同步被禁用,无法发布提交。”。

cicd argo-workflows argocd argoproj gitops
2个回答
0
投票

ArgoCD API 有一个

api/v1/applications/{app_name}
端点。您可以从那里获取应用程序的设置。然后,您需要检查
spec.syncPolicy
对象是否有名为
automated
的键。这是用 bash 和 jq 编写的示例:

#!/usr/bin/env bash

set -e

USERNAME=admin
PASSWORD=yourpassword
ARGOCD_SERVER=https://yourserver
APP_NAME=yourapp

ARGOCD_TOKEN=$(curl -s $ARGOCD_SERVER/api/v1/session -d '{"username":"admin","password":"'$PASSWORD'"}' | jq -r ".token")

response=$(curl -s "$ARGOCD_SERVER/api/v1/applications/$APP_NAME" -H "Authorization: Bearer $ARGOCD_TOKEN")

echo $response | jq '.spec.syncPolicy | has("automated")'

0
投票

使用 ArgoCD 通知控制器可以实现类似以下内容:

template.auto-sync-disabled: |
  message: |
    Application <{{.context.argocdUrl}}/applications/{{.app.metadata.name}}|`{{.app.metadata.name}}`> auto sync was _disabled_.      

trigger.auto-sync-disabled: |
  - description: Application auto sync is disabled.
    send:
      - auto-sync-disabled
    when: app.status.sync.status == 'Synced' and app.spec.syncPolicy.automated == null

您还可以将以下条件添加到触发器中:

oncePer: app.status.operationState.syncResult.revision
© www.soinside.com 2019 - 2024. All rights reserved.