Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions config/notifiers.go
Original file line number Diff line number Diff line change
Expand Up @@ -976,10 +976,11 @@ type JiraConfig struct {
Priority string `yaml:"priority,omitempty" json:"priority,omitempty"`
IssueType string `yaml:"issue_type,omitempty" json:"issue_type,omitempty"`

ReopenTransition string `yaml:"reopen_transition,omitempty" json:"reopen_transition,omitempty"`
ResolveTransition string `yaml:"resolve_transition,omitempty" json:"resolve_transition,omitempty"`
WontFixResolution string `yaml:"wont_fix_resolution,omitempty" json:"wont_fix_resolution,omitempty"`
ReopenDuration model.Duration `yaml:"reopen_duration,omitempty" json:"reopen_duration,omitempty"`
ReopenTransition string `yaml:"reopen_transition,omitempty" json:"reopen_transition,omitempty"`
ResolveTransition string `yaml:"resolve_transition,omitempty" json:"resolve_transition,omitempty"`
WontFixResolution string `yaml:"wont_fix_resolution,omitempty" json:"wont_fix_resolution,omitempty"`
ReopenDuration model.Duration `yaml:"reopen_duration,omitempty" json:"reopen_duration,omitempty"`
DisableUpdateDescription bool `yaml:"disable_update_description,omitempty" json:"disable_update_description,omitempty"`

Fields map[string]any `yaml:"fields,omitempty" json:"custom_fields,omitempty"`
}
Expand Down
4 changes: 4 additions & 0 deletions notify/jira/jira.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
return false, err
}

if method == http.MethodPut && requestBody.Fields != nil && n.conf.DisableUpdateDescription {
requestBody.Fields.Description = nil
}

_, shouldRetry, err = n.doAPIRequest(ctx, method, path, requestBody)
if err != nil {
return shouldRetry, fmt.Errorf("failed to %s request to %q: %w", method, path, err)
Expand Down
61 changes: 61 additions & 0 deletions notify/jira/jira_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -747,6 +747,66 @@ func TestJiraNotify(t *testing.T) {
customFieldAssetFn: func(t *testing.T, issue map[string]any) {},
errMsg: "can't find transition REOPEN for issue OPS-3",
},
{
title: "update existing issue when setting disableupdatedescription to true",
cfg: &config.JiraConfig{
Summary: `{{ template "jira.default.summary" . }}`,
Description: `{{ template "jira.default.description" . }}`,
IssueType: "Incident",
Project: "OPS",
Priority: `{{ template "jira.default.priority" . }}`,
Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"},
DisableUpdateDescription: true,
},
alert: &types.Alert{
Alert: model.Alert{
Labels: model.LabelSet{
"alertname": "test",
"instance": "vm1",
"severity": "critical",
},
StartsAt: time.Now(),
EndsAt: time.Now().Add(time.Hour),
},
},
searchResponse: issueSearchResult{
Issues: []issue{
{
Key: "OPS-4",
Fields: &issueFields{
Status: &issueStatus{
Name: "Open",
StatusCategory: struct {
Key string `json:"key"`
}{
Key: "open",
},
},
},
},
},
},
issue: issue{
Key: "",
Fields: &issueFields{
Summary: "[FIRING:1] test (vm1 critical)",
Description: nil,
Issuetype: &idNameValue{Name: "Incident"},
Labels: []string{
"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}",
"alertmanager",
"test",
},
Project: &issueProject{Key: "OPS"},
Priority: &idNameValue{Name: "High"},
},
},
customFieldAssetFn: func(t *testing.T, fields map[string]any) {
_, has := fields["description"]
require.False(t, has, "description field must be omitted on update when UpdateDescription=false")
},
errMsg: "",
},
} {
tc := tc

Expand Down Expand Up @@ -841,6 +901,7 @@ func TestJiraNotify(t *testing.T) {
case "/issue/OPS-1":
case "/issue/OPS-2":
case "/issue/OPS-3":
case "/issue/OPS-4":
fallthrough
case "/issue":
body, err := io.ReadAll(r.Body)
Expand Down
8 changes: 5 additions & 3 deletions notify/jira/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,13 @@ type issueTransitions struct {

// MarshalJSON merges the struct issueFields and issueFields.CustomField together.
func (i issueFields) MarshalJSON() ([]byte, error) {
jsonFields := map[string]any{
"description": i.Description,
"summary": i.Summary,
jsonFields := map[string]interface{}{
"summary": i.Summary,
}

if i.Description != nil {
jsonFields["description"] = i.Description
}
if i.Issuetype != nil {
jsonFields["issuetype"] = i.Issuetype
}
Expand Down
Loading