| 日付 | 内容 |
|---|---|
| 2020-01-26 | v1.0.1 の内容で公開 |
| 2020-03-11 | v1.0.2 の内容で更新 |
v0.x to v1.0を見るとわかるがそれなりに破壊的変更があった。
ソースコードレベルでは一部しか見ていないので全部の変更についてはここには書かないし、Slackでしか使ってないのでそこだけ書く。
ちなみに v0.x の設定はdeprecatedなだけでまだ使える。
まずは今までどうやって書いていたかを書く。
ビルトインとしていくつかのトリガーが存在したのでそれを有効にする。
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
config.yaml: |
triggers:
- name: on-sync-status-unknown
enabled: true
- name: on-sync-failed
enabled: true
- name: on-sync-running
enabled: true
- name: on-sync-succeeded
enabled: true
- name: on-health-degraded
enabled: true
下記のようなアノテーションをつけると通知された。
metadata:
annotations:
recipients.argocd-notifications.argoproj.io: slack:my-channel
まずは提供されているマニフェストを適用する。
v1.0.0 からは2種類提供されるようになっていてcontrollerとcatalogである。
controller は controller で、catalog は通知する内容のテンプレート等が書かれている。
これを適用したら ConfigMap と annotations を追加する。
同様の動作をさせるための ConfigMap の書き方は下記のようになる。
argocd-notifications-cm は既に存在するので defaultTriggers を追加する。
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
defaultTriggers: |
- on-deployed
- on-health-degraded
- on-sync-failed
- on-sync-running
- on-sync-status-unknown
- on-sync-succeeded
v1.0.2 以降で同様の動作をさせるための annotations の書き方は下記のようになる。
improve annotation iterate #159がマージされたので下記のような書き方ができる。
metadata:
annotations:
notifications.argoproj.io/subscribe.slack: my-channel
これは古い情報だがメモとして残しておく。
. が2つ続いてるのは意味がわからないと思うが、v1.0.1 以前ではこうする必要がある。
metadata:
annotations:
notifications.argoproj.io/subscribe..slack: my-channel
アノテーションを舐める処理はpkg/subscriptions/annotations.go#L32-L55でやっているのだがここには問題がある。
ここでは変数として trigger と service が重要になる。
trigger は何を起因に通知を飛ばすか、serviceは slack 等が入る。
上に書いた例でいうと trigger には空文字、service には slack が入る。
pkg/subscriptions/annotations.go#L112-L115 に書いてあるのだが、trigger に空文字が入ることで引数として渡された defaultTriggers を使うことができる。
この defaultTriggers には先ほど ConfigMap に書いていた値が入ってくる。
さて問題点だがこの if 文は必ず通るので trigger を空文字にするためにはこのような書き方をする必要がある。
parts := strings.Split(k[len(prefix):], ".")
trigger := parts[0]
service := ""
if len(parts) >= 1 {
service = parts[1]
} else {
service = parts[0]
trigger = ""
}