mirror of https://github.com/grafana/grafana
Alerting: Add file provisioning for text templates (#52952)
parent
3d39594d75
commit
8fc8d00167
@ -0,0 +1,5 @@ |
|||||||
|
apiVersion: 1 |
||||||
|
templates: |
||||||
|
- orgId: 1337 |
||||||
|
name: my_first_template |
||||||
|
template: "test" |
@ -0,0 +1,4 @@ |
|||||||
|
apiVersion: 1 |
||||||
|
templates: |
||||||
|
- name: my_first_template |
||||||
|
template: "test" |
@ -0,0 +1,7 @@ |
|||||||
|
apiVersion: 1 |
||||||
|
templates: |
||||||
|
- orgId: 1337 |
||||||
|
name: my_first_template |
||||||
|
template: "test" |
||||||
|
- name: my_second_template |
||||||
|
template: "test" |
@ -0,0 +1,54 @@ |
|||||||
|
package alerting |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/infra/log" |
||||||
|
"github.com/grafana/grafana/pkg/services/ngalert/models" |
||||||
|
"github.com/grafana/grafana/pkg/services/ngalert/provisioning" |
||||||
|
) |
||||||
|
|
||||||
|
type TextTemplateProvisioner interface { |
||||||
|
Provision(ctx context.Context, files []*AlertingFile) error |
||||||
|
Unprovision(ctx context.Context, files []*AlertingFile) error |
||||||
|
} |
||||||
|
|
||||||
|
type defaultTextTemplateProvisioner struct { |
||||||
|
logger log.Logger |
||||||
|
templateService provisioning.TemplateService |
||||||
|
} |
||||||
|
|
||||||
|
func NewTextTemplateProvisioner(logger log.Logger, |
||||||
|
templateService provisioning.TemplateService) TextTemplateProvisioner { |
||||||
|
return &defaultTextTemplateProvisioner{ |
||||||
|
logger: logger, |
||||||
|
templateService: templateService, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (c *defaultTextTemplateProvisioner) Provision(ctx context.Context, |
||||||
|
files []*AlertingFile) error { |
||||||
|
for _, file := range files { |
||||||
|
for _, template := range file.Templates { |
||||||
|
template.Data.Provenance = models.ProvenanceFile |
||||||
|
_, err := c.templateService.SetTemplate(ctx, template.OrgID, template.Data) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
func (c *defaultTextTemplateProvisioner) Unprovision(ctx context.Context, |
||||||
|
files []*AlertingFile) error { |
||||||
|
for _, file := range files { |
||||||
|
for _, deleteTemplate := range file.DeleteTemplates { |
||||||
|
err := c.templateService.DeleteTemplate(ctx, deleteTemplate.OrgID, deleteTemplate.Name) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return nil |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package alerting |
||||||
|
|
||||||
|
import ( |
||||||
|
"errors" |
||||||
|
"strings" |
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" |
||||||
|
"github.com/grafana/grafana/pkg/services/provisioning/values" |
||||||
|
) |
||||||
|
|
||||||
|
type TemplateV1 struct { |
||||||
|
OrgID values.Int64Value `json:"orgId" yaml:"orgId"` |
||||||
|
Template definitions.MessageTemplate `json:",inline" yaml:",inline"` |
||||||
|
} |
||||||
|
|
||||||
|
func (v1 *TemplateV1) mapToModel() Template { |
||||||
|
orgID := v1.OrgID.Value() |
||||||
|
if orgID < 1 { |
||||||
|
orgID = 1 |
||||||
|
} |
||||||
|
return Template{ |
||||||
|
Data: v1.Template, |
||||||
|
OrgID: orgID, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
type Template struct { |
||||||
|
OrgID int64 |
||||||
|
Data definitions.MessageTemplate |
||||||
|
} |
||||||
|
|
||||||
|
type DeleteTemplateV1 struct { |
||||||
|
OrgID values.Int64Value `json:"orgId" yaml:"orgId"` |
||||||
|
Name values.StringValue `json:"name" yaml:"name"` |
||||||
|
} |
||||||
|
|
||||||
|
func (v1 *DeleteTemplateV1) mapToModel() (DeleteTemplate, error) { |
||||||
|
name := strings.TrimSpace(v1.Name.Value()) |
||||||
|
if name == "" { |
||||||
|
return DeleteTemplate{}, errors.New("delete template missing name") |
||||||
|
} |
||||||
|
orgID := v1.OrgID.Value() |
||||||
|
if orgID < 1 { |
||||||
|
orgID = 1 |
||||||
|
} |
||||||
|
return DeleteTemplate{ |
||||||
|
Name: name, |
||||||
|
OrgID: orgID, |
||||||
|
}, nil |
||||||
|
} |
||||||
|
|
||||||
|
type DeleteTemplate struct { |
||||||
|
OrgID int64 |
||||||
|
Name string |
||||||
|
} |
Loading…
Reference in new issue