mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Export of alert rules in HCL format (#73166)
* import hashicopr/hcl/v2 * add hcl package and export to HCL * annotate export structs --------- Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com>
This commit is contained in:
@@ -566,6 +566,106 @@ func TestProvisioningApi(t *testing.T) {
|
||||
require.Equal(t, 200, response.Status())
|
||||
require.Equal(t, expectedResponse, string(response.Body()))
|
||||
})
|
||||
|
||||
t.Run("hcl body content is as expected", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut(t)
|
||||
rule1 := createTestAlertRule("rule1", 1)
|
||||
rule1.Labels = map[string]string{
|
||||
"test": "label",
|
||||
}
|
||||
rule1.Annotations = map[string]string{
|
||||
"test": "annotation",
|
||||
}
|
||||
rule1.NoDataState = definitions.Alerting
|
||||
rule1.ExecErrState = definitions.ErrorErrState
|
||||
insertRule(t, sut, rule1)
|
||||
insertRule(t, sut, createTestAlertRule("rule2", 1))
|
||||
|
||||
expectedResponse := `resource "grafana_rule_group" "rule_group_0000" {
|
||||
org_id = 1
|
||||
name = "my-cool-group"
|
||||
folder_uid = "folder-uid"
|
||||
interval_seconds = 60
|
||||
|
||||
rule {
|
||||
name = "rule1"
|
||||
condition = "A"
|
||||
|
||||
data {
|
||||
ref_id = "A"
|
||||
query_type = ""
|
||||
|
||||
relative_time_range {
|
||||
from = 0
|
||||
to = 0
|
||||
}
|
||||
|
||||
datasource_uid = ""
|
||||
model = "{\"conditions\":[{\"evaluator\":{\"params\":[3],\"type\":\"gt\"},\"operator\":{\"type\":\"and\"},\"query\":{\"params\":[\"A\"]},\"reducer\":{\"type\":\"last\"},\"type\":\"query\"}],\"datasource\":{\"type\":\"__expr__\",\"uid\":\"__expr__\"},\"expression\":\"1==0\",\"intervalMs\":1000,\"maxDataPoints\":43200,\"refId\":\"A\",\"type\":\"math\"}"
|
||||
}
|
||||
|
||||
no_data_state = "Alerting"
|
||||
exec_err_state = "Error"
|
||||
for = 0
|
||||
annotations = {
|
||||
test = "annotation"
|
||||
}
|
||||
labels = {
|
||||
test = "label"
|
||||
}
|
||||
is_paused = false
|
||||
}
|
||||
rule {
|
||||
name = "rule2"
|
||||
condition = "A"
|
||||
|
||||
data {
|
||||
ref_id = "A"
|
||||
query_type = ""
|
||||
|
||||
relative_time_range {
|
||||
from = 0
|
||||
to = 0
|
||||
}
|
||||
|
||||
datasource_uid = ""
|
||||
model = "{\"conditions\":[{\"evaluator\":{\"params\":[3],\"type\":\"gt\"},\"operator\":{\"type\":\"and\"},\"query\":{\"params\":[\"A\"]},\"reducer\":{\"type\":\"last\"},\"type\":\"query\"}],\"datasource\":{\"type\":\"__expr__\",\"uid\":\"__expr__\"},\"expression\":\"1==0\",\"intervalMs\":1000,\"maxDataPoints\":43200,\"refId\":\"A\",\"type\":\"math\"}"
|
||||
}
|
||||
|
||||
no_data_state = "OK"
|
||||
exec_err_state = "OK"
|
||||
for = 0
|
||||
annotations = null
|
||||
labels = null
|
||||
is_paused = false
|
||||
}
|
||||
}
|
||||
`
|
||||
rc := createTestRequestCtx()
|
||||
rc.Context.Req.Form.Set("format", "hcl")
|
||||
rc.Context.Req.Form.Set("download", "false")
|
||||
|
||||
response := sut.RouteGetAlertRuleGroupExport(&rc, "folder-uid", "my-cool-group")
|
||||
response.WriteTo(&rc)
|
||||
|
||||
require.Equal(t, 200, response.Status())
|
||||
require.Equal(t, expectedResponse, string(response.Body()))
|
||||
require.Equal(t, "text/hcl", rc.Resp.Header().Get("Content-Type"))
|
||||
|
||||
t.Run("and add specific headers if download=true", func(t *testing.T) {
|
||||
rc := createTestRequestCtx()
|
||||
rc.Context.Req.Form.Set("format", "hcl")
|
||||
rc.Context.Req.Form.Set("download", "true")
|
||||
|
||||
response := sut.RouteGetAlertRuleGroupExport(&rc, "folder-uid", "my-cool-group")
|
||||
response.WriteTo(&rc)
|
||||
|
||||
require.Equal(t, 200, response.Status())
|
||||
require.Equal(t, expectedResponse, string(response.Body()))
|
||||
require.Equal(t, "application/terraform+hcl", rc.Resp.Header().Get("Content-Type"))
|
||||
require.Equal(t, `attachment;filename=export.tf`, rc.Resp.Header().Get("Content-Disposition"))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("alert rule", func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user