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