😶🌫️
ArgoCDのtracking-idを活用して通知をいい感じに分岐させる
1. 背景
ArgoCDにAPIサーバー、フロントエンドアプリケーションなど複数のアプリケーションに対応したargocd notificationsを実装してたのですが、ある悩みを抱えていました。APIサーバーで使われるDBのmigrationはAPIサーバーアプリケーションのInitContainer時に行うのではなく、別でマイグレーションJobを手動する形を取っており、その手動実行がcompletedであれば、通知をしたい形でいました。
よって、app.status.operationState.phase in ['Succeeded'] and app.status.sync.status == 'Synced'
とは別の通知分岐が欲しい形になる。
ですが、どうやら通知の際に使うargocd-notifications-cmで使われる.app
の情報がDeployment時とJobの時では内容に差異があった。
Jobの時の.app
の情報でも分岐させることはできないことはなさそうだが、簡単な分岐で通知を送るようにしたい。
2. ArgoCDのtracking-idとは
ArgoCDのv2.2で追加された機能。
-
argocd.argoproj.io/tracking-id
アノテーションを使用してアプリケーションリソースを追跡できる。(ラベルとアノテーションの両方を維持する必要がない場合に使用) - 他のKubernetesツールとの衝突がなくなる。
- クラスターに複数のArgoCDをデプロイしてもリソースとArgoCDの関係がわかるようになる。
3. tracking-idの設定方法
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: test-app
annotations:
argocd.argoproj.io/tracking-id: "1"
spec:
project: default
...
4. 実際の設定
実際のmigrationのArgoCDアプリケーションに上記と同じようにannotationsを設定した後、argocd-notifications-cmに分岐を追加します。
argocd-notifications-cmの実装についてはArgoCD Notification Triggersをご覧ください。
- description: Migration Job Notification
send:
- job-notification
when: app.status.health.status == 'Healthy' and app.metadata.annotations['argocd.argoproj.io/tracking-id'] == '1'
※ちなみにカスタム的に入れたannotationsは.app.metadata.annotations
に認識されない。
Discussion