mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Indicate whether templates are provisioned (#49025)
This commit is contained in:
parent
ce1b1bc36b
commit
25da759bf2
@ -232,6 +232,15 @@ func TestAlertmanagerConfig(t *testing.T) {
|
|||||||
body := asGettableUserConfig(t, response)
|
body := asGettableUserConfig(t, response)
|
||||||
require.Equal(t, ngmodels.ProvenanceNone, body.AlertmanagerConfig.Receivers[0].GrafanaManagedReceivers[0].Provenance)
|
require.Equal(t, ngmodels.ProvenanceNone, body.AlertmanagerConfig.Receivers[0].GrafanaManagedReceivers[0].Provenance)
|
||||||
})
|
})
|
||||||
|
t.Run("templates from GET config have no provenance", func(t *testing.T) {
|
||||||
|
sut := createSut(t, nil)
|
||||||
|
rc := createRequestCtxInOrg(1)
|
||||||
|
|
||||||
|
response := sut.RouteGetAlertingConfig(rc)
|
||||||
|
|
||||||
|
body := asGettableUserConfig(t, response)
|
||||||
|
require.Nil(t, body.TemplateFileProvenances)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("when objects are provisioned", func(t *testing.T) {
|
t.Run("when objects are provisioned", func(t *testing.T) {
|
||||||
@ -265,6 +274,18 @@ func TestAlertmanagerConfig(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(t, ngmodels.ProvenanceAPI, body.AlertmanagerConfig.Receivers[0].GrafanaManagedReceivers[0].Provenance)
|
require.Equal(t, ngmodels.ProvenanceAPI, body.AlertmanagerConfig.Receivers[0].GrafanaManagedReceivers[0].Provenance)
|
||||||
})
|
})
|
||||||
|
t.Run("templates from GET config have expected provenance", func(t *testing.T) {
|
||||||
|
sut := createSut(t, nil)
|
||||||
|
rc := createRequestCtxInOrg(1)
|
||||||
|
setTemplateProvenance(t, 1, "a", sut.mam.ProvStore)
|
||||||
|
|
||||||
|
response := sut.RouteGetAlertingConfig(rc)
|
||||||
|
|
||||||
|
body := asGettableUserConfig(t, response)
|
||||||
|
require.NotNil(t, body.TemplateFileProvenances)
|
||||||
|
require.Len(t, body.TemplateFileProvenances, 1)
|
||||||
|
require.Equal(t, ngmodels.ProvenanceAPI, body.TemplateFileProvenances["a"])
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -522,7 +543,29 @@ func createMultiOrgAlertmanager(t *testing.T) *notifier.MultiOrgAlertmanager {
|
|||||||
return mam
|
return mam
|
||||||
}
|
}
|
||||||
|
|
||||||
var validConfig = setting.GetAlertmanagerDefaultConfiguration()
|
var validConfig = `{
|
||||||
|
"template_files": {
|
||||||
|
"a": "template"
|
||||||
|
},
|
||||||
|
"alertmanager_config": {
|
||||||
|
"route": {
|
||||||
|
"receiver": "grafana-default-email"
|
||||||
|
},
|
||||||
|
"receivers": [{
|
||||||
|
"name": "grafana-default-email",
|
||||||
|
"grafana_managed_receiver_configs": [{
|
||||||
|
"uid": "",
|
||||||
|
"name": "email receiver",
|
||||||
|
"type": "email",
|
||||||
|
"isDefault": true,
|
||||||
|
"settings": {
|
||||||
|
"addresses": "<example@email.com>"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
var brokenConfig = `
|
var brokenConfig = `
|
||||||
"alertmanager_config": {
|
"alertmanager_config": {
|
||||||
@ -605,6 +648,13 @@ func setContactPointProvenance(t *testing.T, orgID int64, UID string, ps provisi
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setTemplateProvenance marks a template as provisioned.
|
||||||
|
func setTemplateProvenance(t *testing.T, orgID int64, name string, ps provisioning.ProvisioningStore) {
|
||||||
|
t.Helper()
|
||||||
|
err := ps.SetProvenance(context.Background(), &apimodels.MessageTemplate{Name: name}, orgID, ngmodels.ProvenanceAPI)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func asGettableUserConfig(t *testing.T, r response.Response) *apimodels.GettableUserConfig {
|
func asGettableUserConfig(t *testing.T, r response.Response) *apimodels.GettableUserConfig {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
body := &apimodels.GettableUserConfig{}
|
body := &apimodels.GettableUserConfig{}
|
||||||
|
@ -561,8 +561,9 @@ func (c *PostableUserConfig) UnmarshalYAML(value *yaml.Node) error {
|
|||||||
|
|
||||||
// swagger:model
|
// swagger:model
|
||||||
type GettableUserConfig struct {
|
type GettableUserConfig struct {
|
||||||
TemplateFiles map[string]string `yaml:"template_files" json:"template_files"`
|
TemplateFiles map[string]string `yaml:"template_files" json:"template_files"`
|
||||||
AlertmanagerConfig GettableApiAlertingConfig `yaml:"alertmanager_config" json:"alertmanager_config"`
|
TemplateFileProvenances map[string]models.Provenance `yaml:"template_file_provenances,omitempty" json:"template_file_provenances,omitempty"`
|
||||||
|
AlertmanagerConfig GettableApiAlertingConfig `yaml:"alertmanager_config" json:"alertmanager_config"`
|
||||||
|
|
||||||
// amSimple stores a map[string]interface of the decoded alertmanager config.
|
// amSimple stores a map[string]interface of the decoded alertmanager config.
|
||||||
// This enables circumventing the underlying alertmanager secret type
|
// This enables circumventing the underlying alertmanager secret type
|
||||||
|
@ -83,7 +83,7 @@ func (moa *MultiOrgAlertmanager) GetAlertmanagerConfiguration(ctx context.Contex
|
|||||||
}
|
}
|
||||||
|
|
||||||
if moa.settings.IsFeatureToggleEnabled(featuremgmt.FlagAlertProvisioning) {
|
if moa.settings.IsFeatureToggleEnabled(featuremgmt.FlagAlertProvisioning) {
|
||||||
result.AlertmanagerConfig, err = moa.mergeProvenance(ctx, result.AlertmanagerConfig, org)
|
result, err = moa.mergeProvenance(ctx, result, org)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return definitions.GettableUserConfig{}, err
|
return definitions.GettableUserConfig{}, err
|
||||||
}
|
}
|
||||||
@ -126,25 +126,34 @@ func (moa *MultiOrgAlertmanager) ApplyAlertmanagerConfiguration(ctx context.Cont
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (moa *MultiOrgAlertmanager) mergeProvenance(ctx context.Context, config definitions.GettableApiAlertingConfig, org int64) (definitions.GettableApiAlertingConfig, error) {
|
func (moa *MultiOrgAlertmanager) mergeProvenance(ctx context.Context, config definitions.GettableUserConfig, org int64) (definitions.GettableUserConfig, error) {
|
||||||
if config.Route != nil {
|
if config.AlertmanagerConfig.Route != nil {
|
||||||
provenance, err := moa.ProvStore.GetProvenance(ctx, config.Route, org)
|
provenance, err := moa.ProvStore.GetProvenance(ctx, config.AlertmanagerConfig.Route, org)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return definitions.GettableApiAlertingConfig{}, err
|
return definitions.GettableUserConfig{}, err
|
||||||
}
|
}
|
||||||
config.Route.Provenance = provenance
|
config.AlertmanagerConfig.Route.Provenance = provenance
|
||||||
}
|
}
|
||||||
|
|
||||||
cp := definitions.EmbeddedContactPoint{}
|
cp := definitions.EmbeddedContactPoint{}
|
||||||
cpProvs, err := moa.ProvStore.GetProvenances(ctx, org, cp.ResourceType())
|
cpProvs, err := moa.ProvStore.GetProvenances(ctx, org, cp.ResourceType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return definitions.GettableApiAlertingConfig{}, err
|
return definitions.GettableUserConfig{}, err
|
||||||
}
|
}
|
||||||
for _, receiver := range config.Receivers {
|
for _, receiver := range config.AlertmanagerConfig.Receivers {
|
||||||
for _, contactPoint := range receiver.GrafanaManagedReceivers {
|
for _, contactPoint := range receiver.GrafanaManagedReceivers {
|
||||||
if provenance, exists := cpProvs[contactPoint.UID]; exists {
|
if provenance, exists := cpProvs[contactPoint.UID]; exists {
|
||||||
contactPoint.Provenance = provenance
|
contactPoint.Provenance = provenance
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmpl := definitions.MessageTemplate{}
|
||||||
|
tmplProvs, err := moa.ProvStore.GetProvenances(ctx, org, tmpl.ResourceType())
|
||||||
|
if err != nil {
|
||||||
|
return definitions.GettableUserConfig{}, nil
|
||||||
|
}
|
||||||
|
config.TemplateFileProvenances = tmplProvs
|
||||||
|
|
||||||
return config, nil
|
return config, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user