Implement observability alertgroups (#778)
* feat: implement observability alertgroups * review changes
This commit is contained in:
parent
44103a1ffd
commit
289746c7d1
11 changed files with 1987 additions and 4 deletions
|
|
@ -41,6 +41,17 @@ var scrapeConfigResource = map[string]string{
|
|||
"saml2_enable_url_parameters": "false",
|
||||
}
|
||||
|
||||
var alertGroupResource = map[string]string{
|
||||
"name": fmt.Sprintf("alertgroup-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum)),
|
||||
"name_updated": fmt.Sprintf("alertgroup-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum)),
|
||||
"interval": "5h",
|
||||
"interval_updated": "1h",
|
||||
"alert": "alert1",
|
||||
"expression": "expression1",
|
||||
"expression_updated": "expression2",
|
||||
"for": "60s",
|
||||
}
|
||||
|
||||
var credentialResource = map[string]string{
|
||||
"project_id": testutil.ProjectId,
|
||||
}
|
||||
|
|
@ -228,8 +239,31 @@ func credentialResourceConfig() string {
|
|||
}`
|
||||
}
|
||||
|
||||
func resourceConfig(acl, metricsRetentionDays, metricsRetentionDays1hDownsampling, metricsRetentionDays5mDownsampling, alertConfig *string, instanceName, planName, target, saml2EnableUrlParameters string) string {
|
||||
return fmt.Sprintf("%s\n\n%s\n\n%s\n\n%s",
|
||||
func alertGroupResourceConfig(name, interval, expression string) string {
|
||||
return fmt.Sprintf(
|
||||
`resource "stackit_observability_alertgroup" "alertgroup" {
|
||||
project_id = stackit_observability_instance.instance.project_id
|
||||
instance_id = stackit_observability_instance.instance.instance_id
|
||||
name = "%s"
|
||||
interval = "%s"
|
||||
rules = [
|
||||
{
|
||||
alert = "%s"
|
||||
expression = "%s"
|
||||
for = "%s"
|
||||
}
|
||||
]
|
||||
}`,
|
||||
name,
|
||||
interval,
|
||||
alertGroupResource["alert"],
|
||||
expression,
|
||||
alertGroupResource["for"],
|
||||
)
|
||||
}
|
||||
|
||||
func resourceConfig(acl, metricsRetentionDays, metricsRetentionDays1hDownsampling, metricsRetentionDays5mDownsampling, alertConfig *string, instanceName, planName, target, saml2EnableUrlParameters, alertGroupName, alertGroupInterval, alertGroupRule1Expression string) string {
|
||||
return fmt.Sprintf("%s\n\n%s\n\n%s\n\n%s\n\n%s",
|
||||
testutil.ObservabilityProviderConfig(),
|
||||
instanceResourceConfig(acl,
|
||||
metricsRetentionDays,
|
||||
|
|
@ -240,6 +274,7 @@ func resourceConfig(acl, metricsRetentionDays, metricsRetentionDays1hDownsamplin
|
|||
planName),
|
||||
scrapeConfigResourceConfig(target, saml2EnableUrlParameters),
|
||||
credentialResourceConfig(),
|
||||
alertGroupResourceConfig(alertGroupName, alertGroupInterval, alertGroupRule1Expression),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -265,6 +300,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["plan_name"],
|
||||
scrapeConfigResource["urls"],
|
||||
scrapeConfigResource["saml2_enable_url_parameters"],
|
||||
alertGroupResource["name"],
|
||||
alertGroupResource["interval"],
|
||||
alertGroupResource["expression"],
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Instance data
|
||||
|
|
@ -349,6 +387,18 @@ func TestAccResource(t *testing.T) {
|
|||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Update Alert Config with complete Receiver (email, webhook and opsgenie configs), global options and Route with child routes
|
||||
|
|
@ -368,6 +418,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["plan_name"],
|
||||
scrapeConfigResource["urls"],
|
||||
scrapeConfigResource["saml2_enable_url_parameters"],
|
||||
alertGroupResource["name"],
|
||||
alertGroupResource["interval"],
|
||||
alertGroupResource["expression"],
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Instance data
|
||||
|
|
@ -461,6 +514,18 @@ func TestAccResource(t *testing.T) {
|
|||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Update without ACL, partial metrics retention days and NO alert configs
|
||||
|
|
@ -475,6 +540,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["plan_name"],
|
||||
scrapeConfigResource["urls"],
|
||||
scrapeConfigResource["saml2_enable_url_parameters"],
|
||||
alertGroupResource["name"],
|
||||
alertGroupResource["interval"],
|
||||
alertGroupResource["expression"],
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Instance data
|
||||
|
|
@ -530,6 +598,18 @@ func TestAccResource(t *testing.T) {
|
|||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Update with empty ACL, NO metrics retention days and NO alert configs
|
||||
|
|
@ -544,6 +624,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["plan_name"],
|
||||
scrapeConfigResource["urls"],
|
||||
scrapeConfigResource["saml2_enable_url_parameters"],
|
||||
alertGroupResource["name"],
|
||||
alertGroupResource["interval"],
|
||||
alertGroupResource["expression"],
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Instance data
|
||||
|
|
@ -599,6 +682,18 @@ func TestAccResource(t *testing.T) {
|
|||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Data source
|
||||
|
|
@ -616,6 +711,12 @@ func TestAccResource(t *testing.T) {
|
|||
instance_id = stackit_observability_scrapeconfig.scrapeconfig.instance_id
|
||||
name = stackit_observability_scrapeconfig.scrapeconfig.name
|
||||
}
|
||||
|
||||
data "stackit_observability_alertgroup" "alertgroup" {
|
||||
project_id = stackit_observability_alertgroup.alertgroup.project_id
|
||||
instance_id = stackit_observability_alertgroup.alertgroup.instance_id
|
||||
name = stackit_observability_alertgroup.alertgroup.name
|
||||
}
|
||||
`,
|
||||
resourceConfig(
|
||||
utils.Ptr(fmt.Sprintf(
|
||||
|
|
@ -631,6 +732,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["plan_name"],
|
||||
scrapeConfigResource["urls"],
|
||||
scrapeConfigResource["saml2_enable_url_parameters"],
|
||||
alertGroupResource["name"],
|
||||
alertGroupResource["interval"],
|
||||
alertGroupResource["expression"],
|
||||
),
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
|
|
@ -670,6 +774,18 @@ func TestAccResource(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]),
|
||||
resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]),
|
||||
resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", scrapeConfigResource["saml2_enable_url_parameters"]),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"data.stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("data.stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Import 1
|
||||
|
|
@ -711,6 +827,27 @@ func TestAccResource(t *testing.T) {
|
|||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Import 3
|
||||
{
|
||||
ResourceName: "stackit_observability_alertgroup.alertgroup",
|
||||
ImportStateIdFunc: func(s *terraform.State) (string, error) {
|
||||
r, ok := s.RootModule().Resources["stackit_observability_alertgroup.alertgroup"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find resource stackit_observability_alertgroup.alertgroup")
|
||||
}
|
||||
instanceId, ok := r.Primary.Attributes["instance_id"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute instance_id")
|
||||
}
|
||||
name, ok := r.Primary.Attributes["name"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("couldn't find attribute name")
|
||||
}
|
||||
return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, name), nil
|
||||
},
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
// Update
|
||||
{
|
||||
Config: resourceConfig(
|
||||
|
|
@ -727,6 +864,9 @@ func TestAccResource(t *testing.T) {
|
|||
instanceResource["new_plan_name"],
|
||||
"",
|
||||
"true",
|
||||
alertGroupResource["name_updated"],
|
||||
alertGroupResource["interval_updated"],
|
||||
alertGroupResource["expression_updated"],
|
||||
),
|
||||
Check: resource.ComposeAggregateTestCheckFunc(
|
||||
// Instance
|
||||
|
|
@ -782,6 +922,18 @@ func TestAccResource(t *testing.T) {
|
|||
// Credentials
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"),
|
||||
|
||||
// alertgroup
|
||||
resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]),
|
||||
resource.TestCheckResourceAttrPair(
|
||||
"stackit_observability_instance.instance", "instance_id",
|
||||
"stackit_observability_alertgroup.alertgroup", "instance_id",
|
||||
),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "name"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "interval"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.alert"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.expression"),
|
||||
resource.TestCheckResourceAttrSet("stackit_observability_alertgroup.alertgroup", "rules.0.for"),
|
||||
),
|
||||
},
|
||||
// Update and remove saml2 attribute
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue