日付 | 内容 |
---|---|
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 = ""
}