Skip to content

Commit

Permalink
feat: add 'content', 'username' and 'avatarUrl' fields in discordConfig
Browse files Browse the repository at this point in the history
Signed-off-by: Jayapriya Pai <[email protected]>
Co-authored-by: Junaid Khalid <[email protected]>
  • Loading branch information
slashpai and junaidk committed Feb 3, 2025
1 parent 8d7f58e commit 50aad31
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 3 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
* [FEATURE] Add `keepIdentifyingResourceAttributes` field in OTLPConfig for `Prometheus` and `PrometheusAgent` CRDs. #7240
* [FEATURE] Add `fallbackScrapeProtocol` field to ScrapeClass for `Prometheus` and `PrometheusAgent` CRDs. #7288
* [FEATURE] Support `MSTeamsV2Config` receiver in Alertmanager configuration Secret. #7296
* [FEATURE] Add `Timeout` field in Webhook receiver in Alertmanager configuration Secret. #7312
* [FEATURE] Add `timeout` field in Webhook receiver in Alertmanager configuration Secret. #7312
* [FEATURE] Add `content`, `username` and `avatarUrl` fields in Discord receiver in Alertmanager configuration secret. #7313
* [FEATURE] Add `scrapeFailureLogFile` field to the Prometheus and PrometheusAgent CRDs. #7038 #7311
* [BUGFIX] Validate respective api URL field in PagerDutyConfigs, DiscordConfigs, SlackConfigs and WebhookConfigs in AlertManagerConfig CRD. #6585

Expand Down
24 changes: 22 additions & 2 deletions pkg/alertmanager/amcfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -2329,13 +2329,33 @@ func (tc *telegramConfig) sanitize(amVersion semver.Version, logger *slog.Logger
return tc.HTTPConfig.sanitize(amVersion, logger)
}

func (tc *discordConfig) sanitize(amVersion semver.Version, logger *slog.Logger) error {
func (dc *discordConfig) sanitize(amVersion semver.Version, logger *slog.Logger) error {
discordAllowed := amVersion.GTE(semver.MustParse("0.25.0"))
lessThanV0_28 := amVersion.LT(semver.MustParse("0.28.0"))

if !discordAllowed {
return fmt.Errorf(`invalid syntax in receivers config; discord integration is available in Alertmanager >= 0.25.0`)
}

return tc.HTTPConfig.sanitize(amVersion, logger)
if dc.Content != "" && lessThanV0_28 {
msg := "'content' supported in Alertmanager >= 0.28.0 only - dropping field from provided config"
logger.Warn(msg, "current_version", amVersion.String())
dc.Content = ""
}

if dc.Username != "" && lessThanV0_28 {
msg := "'username' supported in Alertmanager >= 0.28.0 only - dropping field from provided config"
logger.Warn(msg, "current_version", amVersion.String())
dc.Username = ""
}

if dc.AvatarURL != "" && lessThanV0_28 {
msg := "'avatar_url' supported in Alertmanager >= 0.28.0 only - dropping field from provided config"
logger.Warn(msg, "current_version", amVersion.String())
dc.AvatarURL = ""
}

return dc.HTTPConfig.sanitize(amVersion, logger)
}

func (tc *webexConfig) sanitize(amVersion semver.Version, logger *slog.Logger) error {
Expand Down
105 changes: 105 additions & 0 deletions pkg/alertmanager/amcfg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2362,6 +2362,9 @@ func TestSanitizeConfig(t *testing.T) {
versionDiscordAllowed := semver.Version{Major: 0, Minor: 25}
versionDiscordNotAllowed := semver.Version{Major: 0, Minor: 24}

versionDiscordMessageFieldsAllowed := semver.Version{Major: 0, Minor: 28}
versionDiscordMessageFieldsNotAllowed := semver.Version{Major: 0, Minor: 27}

versionMSteamsV2Allowed := semver.Version{Major: 0, Minor: 28}
versionMSteamsV2NotAllowed := semver.Version{Major: 0, Minor: 27}

Expand Down Expand Up @@ -2613,6 +2616,108 @@ func TestSanitizeConfig(t *testing.T) {
},
expectErr: true,
},
{
name: "Test content is dropped in discord config for unsupported versions",
againstVersion: versionDiscordMessageFieldsNotAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
Content: "content added for unsupported version",
},
},
},
},
},
golden: "test_content_field_dropped_in_discord_config_for_unsupported_versions.golden",
},
{
name: "Test content is added in discord config for supported versions",
againstVersion: versionDiscordMessageFieldsAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
Content: "content added for supported version",
},
},
},
},
},
golden: "test_content_field_added_in_discord_config_for_supported_versions.golden",
},
{
name: "Test username is dropped in discord config for unsupported versions",
againstVersion: versionDiscordMessageFieldsNotAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
Username: "discord_admin",
},
},
},
},
},
golden: "test_username_field_dropped_in_discord_config_for_unsupported_versions.golden",
},
{
name: "Test username is added in discord config for supported versions",
againstVersion: versionDiscordMessageFieldsAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
Username: "discord_admin",
},
},
},
},
},
golden: "test_username_field_added_in_discord_config_for_supported_versions.golden",
},
{
name: "Test avatar_url is dropped in discord config for unsupported versions",
againstVersion: versionDiscordMessageFieldsNotAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
AvatarURL: "http://example.com/discord_avatar",
},
},
},
},
},
golden: "test_avatar_url_field_dropped_in_discord_config_for_unsupported_versions.golden",
},
{
name: "Test avatar_url is added in discord config for supported versions",
againstVersion: versionDiscordMessageFieldsAllowed,
in: &alertmanagerConfig{
Receivers: []*receiver{
{
DiscordConfigs: []*discordConfig{
{
WebhookURL: "http://example.com",
AvatarURL: "http://example.com/discord_avatar",
},
},
},
},
},
golden: "test_avatar_url_field_added_in_discord_config_for_supported_versions.golden",
},
{
name: "webex_config for supported versions",
againstVersion: versionWebexAllowed,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/alertmanager/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,9 @@ type discordConfig struct {
WebhookURL string `yaml:"webhook_url,omitempty"`
Title string `yaml:"title,omitempty"`
Message string `yaml:"message,omitempty"`
Content string `yaml:"content,omitempty"`
Username string `yaml:"username,omitempty"`
AvatarURL string `yaml:"avatar_url,omitempty"`
}

type webexConfig struct {
Expand Down

0 comments on commit 50aad31

Please sign in to comment.