From c473560332d232f1307b4d57084f903c93f3bf55 Mon Sep 17 00:00:00 2001 From: Alexander Dahmen Date: Wed, 7 May 2025 10:49:34 +0200 Subject: [PATCH] feat(observability): Min/Max acceptance tests (#805) Signed-off-by: Alexander Dahmen --- .../observability/alertgroup/resource.go | 1 + .../observability/instance/datasource.go | 39 +- .../observability/log-alertgroup/resource.go | 1 + .../observability/observability_acc_test.go | 1648 ++++++++--------- .../observability/testdata/resource-max.tf | 212 +++ .../observability/testdata/resource-min.tf | 69 + 6 files changed, 1062 insertions(+), 908 deletions(-) create mode 100644 stackit/internal/services/observability/testdata/resource-max.tf create mode 100644 stackit/internal/services/observability/testdata/resource-min.tf diff --git a/stackit/internal/services/observability/alertgroup/resource.go b/stackit/internal/services/observability/alertgroup/resource.go index 5757f701..ca47816b 100644 --- a/stackit/internal/services/observability/alertgroup/resource.go +++ b/stackit/internal/services/observability/alertgroup/resource.go @@ -175,6 +175,7 @@ func (a *alertGroupResource) Schema(_ context.Context, _ resource.SchemaRequest, "interval": schema.StringAttribute{ Description: descriptions["interval"], Optional: true, + Computed: true, Validators: []validator.String{ validate.ValidDurationString(), }, diff --git a/stackit/internal/services/observability/instance/datasource.go b/stackit/internal/services/observability/instance/datasource.go index b51faa57..220cd6e8 100644 --- a/stackit/internal/services/observability/instance/datasource.go +++ b/stackit/internal/services/observability/instance/datasource.go @@ -409,6 +409,12 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + metricsRetentionResp, err := d.client.GetMetricsStorageRetention(ctx, instanceId, projectId).Execute() + if err != nil { + core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API to get metrics retention: %v", err)) + return + } + alertConfigResp, err := d.client.GetAlertConfigs(ctx, instanceId, projectId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API to get alert config: %v", err)) @@ -421,18 +427,49 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) return } + + // Set state to instance populated data + diags = resp.State.Set(ctx, model) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } + err = mapACLField(aclListResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API response for the ACL: %v", err)) return } + + // Set state to fully populated data + diags = setACL(ctx, &resp.State, &model) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } + + // Map response body to schema + err = mapMetricsRetentionField(metricsRetentionResp, &model) + if err != nil { + core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API response for the metrics retention: %v", err)) + return + } + + // Set state to fully populated data + diags = setMetricsRetentions(ctx, &resp.State, &model) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } + err = mapAlertConfigField(ctx, alertConfigResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Processing API response for the alert config: %v", err)) return } - diags = resp.State.Set(ctx, model) + // Set state to fully populated data + diags = setAlertConfig(ctx, &resp.State, &model) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return diff --git a/stackit/internal/services/observability/log-alertgroup/resource.go b/stackit/internal/services/observability/log-alertgroup/resource.go index 2747ef72..330ec1fe 100644 --- a/stackit/internal/services/observability/log-alertgroup/resource.go +++ b/stackit/internal/services/observability/log-alertgroup/resource.go @@ -175,6 +175,7 @@ func (l *logAlertGroupResource) Schema(_ context.Context, _ resource.SchemaReque "interval": schema.StringAttribute{ Description: descriptions["interval"], Optional: true, + Computed: true, Validators: []validator.String{ validate.ValidDurationString(), }, diff --git a/stackit/internal/services/observability/observability_acc_test.go b/stackit/internal/services/observability/observability_acc_test.go index 82687b5c..be41eb93 100644 --- a/stackit/internal/services/observability/observability_acc_test.go +++ b/stackit/internal/services/observability/observability_acc_test.go @@ -2,361 +2,158 @@ package observability_test import ( "context" + _ "embed" "fmt" + "maps" "strings" "testing" - "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/stackitcloud/stackit-sdk-go/core/config" "github.com/stackitcloud/stackit-sdk-go/core/utils" "github.com/stackitcloud/stackit-sdk-go/services/observability" "github.com/stackitcloud/stackit-sdk-go/services/observability/wait" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil" + + stackitSdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config" ) -var instanceResource = map[string]string{ - "project_id": testutil.ProjectId, - "name": testutil.ResourceNameWithDateTime("observability"), - "plan_name": "Observability-Medium-EU01", - "new_plan_name": "Observability-Large-EU01", - "acl-0": "1.2.3.4/32", - "acl-1": "111.222.111.222/32", - "acl-1-updated": "111.222.111.125/32", - "metrics_retention_days": "60", - "metrics_retention_days_5m_downsampling": "30", - "metrics_retention_days_1h_downsampling": "15", +//go:embed testdata/resource-min.tf +var resourceMinConfig string + +//go:embed testdata/resource-max.tf +var resourceMaxConfig string + +// To prevent conversion issues +var alert_rule_expression = "sum(kube_pod_status_phase{phase=\"Running\"}) > 0" +var logalertgroup_expression = "sum(rate({namespace=\"example\"} |= \"Simulated error message\" [1m])) > 0" +var alert_rule_expression_updated = "sum(kube_pod_status_phase{phase=\"Error\"}) > 0" +var logalertgroup_expression_updated = "sum(rate({namespace=\"example\"} |= \"Another error message\" [1m])) > 0" + +var testConfigVarsMin = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "alertgroup_name": config.StringVariable(fmt.Sprintf("tf-acc-ag%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "alert_rule_name": config.StringVariable("alert1"), + "alert_rule_expression": config.StringVariable(alert_rule_expression), + "instance_name": config.StringVariable(fmt.Sprintf("tf-acc-i%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "plan_name": config.StringVariable("Observability-Medium-EU01"), + "logalertgroup_name": config.StringVariable(fmt.Sprintf("tf-acc-lag%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "logalertgroup_alert": config.StringVariable("alert1"), + "logalertgroup_expression": config.StringVariable(logalertgroup_expression), + "scrapeconfig_name": config.StringVariable(fmt.Sprintf("tf-acc-sc%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "scrapeconfig_metrics_path": config.StringVariable("/metrics"), + "scrapeconfig_targets_url": config.StringVariable("www.y97xyrrocx2gsxx.de"), } -var scrapeConfigResource = map[string]string{ - "project_id": testutil.ProjectId, - "name": fmt.Sprintf("scrapeconfig-%s", acctest.RandStringFromCharSet(7, acctest.CharSetAlphaNum)), - "urls": fmt.Sprintf(`{urls = ["www.%s.de","%s.de"]}`, acctest.RandStringFromCharSet(15, acctest.CharSetAlphaNum), acctest.RandStringFromCharSet(15, acctest.CharSetAlphaNum)), - "metrics_path": "/metrics", - "scheme": "https", - "scrape_interval": "4m", // non-default - "sample_limit": "7", // non-default - "saml2_enable_url_parameters": "false", +var testConfigVarsMax = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "alertgroup_name": config.StringVariable(fmt.Sprintf("tf-acc-ag%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "alert_rule_name": config.StringVariable("alert1"), + "alert_rule_expression": config.StringVariable(alert_rule_expression), + "instance_name": config.StringVariable(fmt.Sprintf("tf-acc-i%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "plan_name": config.StringVariable("Observability-Medium-EU01"), + "logalertgroup_name": config.StringVariable(fmt.Sprintf("tf-acc-lag%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "logalertgroup_alert": config.StringVariable("alert1"), + "logalertgroup_expression": config.StringVariable(logalertgroup_expression), + "scrapeconfig_name": config.StringVariable(fmt.Sprintf("tf-acc-sc%s", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))), + "scrapeconfig_metrics_path": config.StringVariable("/metrics"), + "scrapeconfig_targets_url_1": config.StringVariable("www.y97xyrrocx2gsxx.de"), + "scrapeconfig_targets_url_2": config.StringVariable("f6zkn8gzeigwanh.de"), + // alert group + "alert_for_time": config.StringVariable("60s"), + "alert_label": config.StringVariable("label1"), + "alert_annotation": config.StringVariable("annotation1"), + "alert_interval": config.StringVariable("5h"), + // max instance + // "instance_parameters": config.StringVariable("param1"), -> not working right now + "metrics_retention_days": config.StringVariable("30"), + "metrics_retention_days_5m_downsampling": config.StringVariable("10"), + "metrics_retention_days_1h_downsampling": config.StringVariable("5"), + "instance_acl_1": config.StringVariable("1.2.3.4/32"), + "instance_acl_2": config.StringVariable("111.222.111.222/32"), + "receiver_name": config.StringVariable("OpsGenieReceiverInfo"), + "auth_identity": config.StringVariable("aa@bb.ccc"), + "auth_password": config.StringVariable("password"), + "auth_username": config.StringVariable("username"), + "email_from": config.StringVariable("aa@bb.ccc"), + "smart_host": config.StringVariable("smtp.gmail.com:587"), + "email_to": config.StringVariable("bb@bb.ccc"), + "opsgenie_api_key": config.StringVariable("example-api-key"), + "opsgenie_api_tags": config.StringVariable("observability-alert"), + "opsgenie_api_url": config.StringVariable("https://api.eu.opsgenie.com"), + "webhook_configs_url": config.StringVariable("https://example.com"), + "ms_teams": config.StringVariable("true"), + "group_by": config.StringVariable("alertname"), + "group_interval": config.StringVariable("10m"), + "group_wait": config.StringVariable("1m"), + "repeat_interval": config.StringVariable("1h"), + "resolve_timeout": config.StringVariable("5m"), + "smtp_auth_identity": config.StringVariable("aa@bb.ccc"), + "smtp_auth_password": config.StringVariable("password"), + "smtp_auth_username": config.StringVariable("username"), + "smtp_from": config.StringVariable("aa@bb.ccc"), + "smtp_smart_host": config.StringVariable("smtp.gmail.com:587"), + "match": config.StringVariable("alert1"), + "match_regex": config.StringVariable("alert1"), + // logalertgroup + "logalertgroup_for_time": config.StringVariable("60s"), + "logalertgroup_label": config.StringVariable("label1"), + "logalertgroup_annotation": config.StringVariable("annotation1"), + "logalertgroup_interval": config.StringVariable("5h"), + // scrapeconfig + "scrapeconfig_label": config.StringVariable("label1"), + "scrapeconfig_interval": config.StringVariable("4m"), + "scrapeconfig_limit": config.StringVariable("7"), + "scrapeconfig_enable_url_params": config.StringVariable("false"), + "scrapeconfig_scheme": config.StringVariable("https"), + "scrapeconfig_timeout": config.StringVariable("2m"), + "scrapeconfig_auth_username": config.StringVariable("username"), + "scrapeconfig_auth_password": config.StringVariable("password"), } -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": `sum(kube_pod_status_phase{phase=\"Running\"}) > 0`, - "expression_updated": `sum(kube_pod_status_phase{phase=\"Error\"}) > 0`, - "for": "60s", +func configVarsMinUpdated() config.Variables { + tempConfig := make(config.Variables, len(testConfigVarsMin)) + maps.Copy(tempConfig, testConfigVarsMin) + tempConfig["alert_rule_name"] = config.StringVariable("alert1-updated") + return tempConfig } -var logAlertGroupResource = 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": `sum(rate({namespace=\"example\"} |= \"Simulated error message\" [1m])) > 0`, - "expression_updated": `sum(rate({namespace=\"example\"} |= \"Another error message\" [1m])) > 0`, - "for": "60s", +func configVarsMaxUpdated() config.Variables { + tempConfig := make(config.Variables, len(testConfigVarsMax)) + maps.Copy(tempConfig, testConfigVarsMax) + tempConfig["plan_name"] = config.StringVariable("Observability-Large-EU01") + tempConfig["alert_interval"] = config.StringVariable("1h") + tempConfig["alert_rule_expression"] = config.StringVariable(alert_rule_expression_updated) + tempConfig["logalertgroup_interval"] = config.StringVariable("1h") + tempConfig["logalertgroup_expression"] = config.StringVariable(logalertgroup_expression_updated) + return tempConfig } -var credentialResource = map[string]string{ - "project_id": testutil.ProjectId, -} - -func buildAlertConfigReceivers(hasOpsGenie, hasEmail, hasWebhook bool) string { - if !hasOpsGenie && !hasEmail && !hasWebhook { - return "" - } - - receivers := "[" - - if hasOpsGenie { - receivers += ` - { - name = "OpsGenieReceiverInfo" - opsgenie_configs = [ - { - tags = "iam,observability-alert" - api_key = "example-api-key" - } - ] - }, -` - } - - if hasEmail { - receivers += ` - { - name = "EmailReceiverInfo" - email_configs = [ - { - to = "me@example.com" - }, - ] - }, -` - } - - if hasWebhook { - receivers += ` - { - name = "WebhookReceiverInfo" - webhooks_configs = [ - { - url = "https://example.com" - ms_teams = true - }, - ] - }, -` - } - - return receivers + "]" -} - -func buildAlertConfigRoute(childRoutes bool) string { - route := `{ - receiver = "OpsGenieReceiverInfo" - group_by = ["alertname"] - group_interval = "10m" - group_wait = "1m" - repeat_interval = "1h"` - - if childRoutes { - route += ` - routes = [ - { - match = { - severity = "critical" - } - receiver = "OpsGenieReceiverInfo" - }, - { - match = { - severity = "warning" - } - receiver = "WebhookReceiverInfo" - } - ]` - } - - return route + "\n}" -} - -func buildAlertConfigGlobal(includeEmailOptions bool) string { - defaultOptions := `{ - resolve_timeout = "5m" - opsgenie_api_key = "example-api-key" - opsgenie_api_url = "https://api.eu.opsgenie.com"` - - if !includeEmailOptions { - return defaultOptions + "\n}" - } - return defaultOptions + ` - smtp_smart_host = "smtp.example.com:587" - smtp_from = "me@example.com" -}` -} - -func buildAlertConfig(receivers, route, global string) *string { - if receivers == "" && route == "" && global == "" { - return nil - } - returnStr := fmt.Sprintf(` - alert_config = { - receivers = %s, - route = %s, - global = %s - } - `, receivers, route, global) - return &returnStr -} - -func instanceResourceConfig(acl, metricsRetentionDays, metricsRetentionDays1hDownsampling, metricsRetentionDays5mDownsampling, alertConfig *string, instanceName, planName string) string { - var aclStr string - var metricsRetentionDaysStr string - var metricsRetentionDays1hDownsamplingStr string - var metricsRetentionDays5mDownsamplingStr string - var alertConfigStr string - - if acl != nil { - aclStr = fmt.Sprintf("acl = %s", *acl) - } - - if metricsRetentionDays != nil { - metricsRetentionDaysStr = fmt.Sprintf("metrics_retention_days = %s", *metricsRetentionDays) - } - - if metricsRetentionDays1hDownsampling != nil { - metricsRetentionDays1hDownsamplingStr = fmt.Sprintf("metrics_retention_days_1h_downsampling = %s", *metricsRetentionDays1hDownsampling) - } - - if metricsRetentionDays5mDownsampling != nil { - metricsRetentionDays5mDownsamplingStr = fmt.Sprintf("metrics_retention_days_5m_downsampling = %s", *metricsRetentionDays5mDownsampling) - } - - if alertConfig != nil { - alertConfigStr = *alertConfig - } - - optionalsStr := strings.Join([]string{aclStr, metricsRetentionDaysStr, metricsRetentionDays1hDownsamplingStr, metricsRetentionDays5mDownsamplingStr, alertConfigStr}, "\n") - - return fmt.Sprintf(` - resource "stackit_observability_instance" "instance" { - project_id = "%s" - name = "%s" - plan_name = "%s" - %s - } - `, - instanceResource["project_id"], - instanceName, - planName, - optionalsStr, - ) -} - -func scrapeConfigResourceConfig(target, saml2EnableUrlParameters string) string { - return fmt.Sprintf( - `resource "stackit_observability_scrapeconfig" "scrapeconfig" { - project_id = stackit_observability_instance.instance.project_id - instance_id = stackit_observability_instance.instance.instance_id - name = "%s" - metrics_path = "%s" - targets = [%s] - scrape_interval = "%s" - sample_limit = %s - saml2 = { - enable_url_parameters = %s - } - }`, - scrapeConfigResource["name"], - scrapeConfigResource["metrics_path"], - target, - scrapeConfigResource["scrape_interval"], - scrapeConfigResource["sample_limit"], - saml2EnableUrlParameters, - ) -} - -func credentialResourceConfig() string { - return `resource "stackit_observability_credential" "credential" { - project_id = stackit_observability_instance.instance.project_id - instance_id = stackit_observability_instance.instance.instance_id - }` -} - -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 logAlertGroupResourceConfig(name, interval, expression string) string { - return fmt.Sprintf( - `resource "stackit_observability_logalertgroup" "logalertgroup" { - 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, - logAlertGroupResource["alert"], - expression, - logAlertGroupResource["for"], - ) -} - -func resourceConfig(acl, metricsRetentionDays, metricsRetentionDays1hDownsampling, metricsRetentionDays5mDownsampling, alertConfig *string, instanceName, planName, target, saml2EnableUrlParameters, alertGroupName, alertGroupInterval, alertGroupRule1Expression, logAlertGroupName, logAlertGroupInterval, logAlertGroupRule1Expression string) string { - return fmt.Sprintf("%s\n\n%s\n\n%s\n\n%s\n\n%s\n\n%s", - testutil.ObservabilityProviderConfig(), - instanceResourceConfig(acl, - metricsRetentionDays, - metricsRetentionDays1hDownsampling, - metricsRetentionDays5mDownsampling, - alertConfig, - instanceName, - planName), - scrapeConfigResourceConfig(target, saml2EnableUrlParameters), - credentialResourceConfig(), - alertGroupResourceConfig(alertGroupName, alertGroupInterval, alertGroupRule1Expression), - logAlertGroupResourceConfig(logAlertGroupName, logAlertGroupInterval, logAlertGroupRule1Expression), - ) -} - -func TestAccResource(t *testing.T) { - resource.Test(t, resource.TestCase{ +func TestAccResourceMin(t *testing.T) { + resource.ParallelTest(t, resource.TestCase{ ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, CheckDestroy: testAccCheckObservabilityDestroy, Steps: []resource.TestStep{ // Creation { - Config: resourceConfig( - utils.Ptr(fmt.Sprintf( - "[%q, %q, %q]", - instanceResource["acl-0"], - instanceResource["acl-1"], - instanceResource["acl-1"], - )), - utils.Ptr(instanceResource["metrics_retention_days"]), - utils.Ptr(instanceResource["metrics_retention_days_1h_downsampling"]), - utils.Ptr(instanceResource["metrics_retention_days_5m_downsampling"]), - buildAlertConfig(buildAlertConfigReceivers(true, false, true), buildAlertConfigRoute(false), buildAlertConfigGlobal(false)), - instanceResource["name"], - instanceResource["plan_name"], - scrapeConfigResource["urls"], - scrapeConfigResource["saml2_enable_url_parameters"], - alertGroupResource["name"], - alertGroupResource["interval"], - alertGroupResource["expression"], - logAlertGroupResource["name"], - logAlertGroupResource["interval"], - logAlertGroupResource["expression"], - ), + ConfigVariables: testConfigVarsMin, + Config: testutil.ObservabilityProviderConfig() + resourceMinConfig, Check: resource.ComposeAggregateTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["plan_name"]), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["instance_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days", instanceResource["metrics_retention_days"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling", instanceResource["metrics_retention_days_5m_downsampling"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", instanceResource["metrics_retention_days_1h_downsampling"]), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), @@ -368,38 +165,6 @@ func TestAccResource(t *testing.T) { resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), - // Alert Config - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.resolve_timeout", "5m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", "https://api.eu.opsgenie.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.receiver", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.#", "0"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.name", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", "iam,observability-alert"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", - "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.name", "WebhookReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.0.url", "https://example.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.0.ms_teams", "true"), - - // ACL - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.0", instanceResource["acl-0"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.1", instanceResource["acl-1"]), - // scrape config data resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "project_id", @@ -409,16 +174,13 @@ func TestAccResource(t *testing.T) { "stackit_observability_instance.instance", "instance_id", "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", ), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", scrapeConfigResource["saml2_enable_url_parameters"]), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_name"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "1"), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_targets_url"])), // credentials - resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "instance_id", "stackit_observability_credential.credential", "instance_id", @@ -427,372 +189,29 @@ func TestAccResource(t *testing.T) { resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"), // alertgroup - resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["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"), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["alertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMin["alert_rule_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression), // logalertgroup - resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "instance_id", "stackit_observability_logalertgroup.logalertgroup", "instance_id", ), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), - ), - }, - // Update Alert Config with complete Receiver (email, webhook and opsgenie configs), global options and Route with child routes - { - Config: resourceConfig( - utils.Ptr(fmt.Sprintf( - "[%q, %q, %q]", - instanceResource["acl-0"], - instanceResource["acl-1"], - instanceResource["acl-1"], - )), - utils.Ptr(instanceResource["metrics_retention_days"]), - utils.Ptr(instanceResource["metrics_retention_days_1h_downsampling"]), - utils.Ptr(instanceResource["metrics_retention_days_5m_downsampling"]), - buildAlertConfig(buildAlertConfigReceivers(true, true, true), buildAlertConfigRoute(true), buildAlertConfigGlobal(true)), - instanceResource["name"], - instanceResource["plan_name"], - scrapeConfigResource["urls"], - scrapeConfigResource["saml2_enable_url_parameters"], - alertGroupResource["name"], - alertGroupResource["interval"], - alertGroupResource["expression"], - logAlertGroupResource["name"], - logAlertGroupResource["interval"], - logAlertGroupResource["expression"], - ), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days", instanceResource["metrics_retention_days"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling", instanceResource["metrics_retention_days_5m_downsampling"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", instanceResource["metrics_retention_days_1h_downsampling"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), - - // Alert Config - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.#", "3"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.resolve_timeout", "5m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", "https://api.eu.opsgenie.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_smart_host", "smtp.example.com:587"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_from", "me@example.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.receiver", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match.severity", "critical"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.receiver", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.1.match.severity", "warning"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.1.receiver", "WebhookReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.name", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", "iam,observability-alert"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", - "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.name", "EmailReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.email_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.email_configs.0.to", "me@example.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.2.name", "WebhookReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.2.webhooks_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.2.webhooks_configs.0.url", "https://example.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.2.webhooks_configs.0.ms_teams", "true"), - - // ACL - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.0", instanceResource["acl-0"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.1", instanceResource["acl-1"]), - - // scrape config data - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "project_id", - "stackit_observability_scrapeconfig.scrapeconfig", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", - ), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", scrapeConfigResource["saml2_enable_url_parameters"]), - - // credentials - resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_credential.credential", "instance_id", - ), - 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"), - - // logalertgroup - resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_logalertgroup.logalertgroup", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), - ), - }, - // Update without ACL, partial metrics retention days and NO alert configs - { - Config: resourceConfig( - nil, - nil, - utils.Ptr(instanceResource["metrics_retention_days_1h_downsampling"]), - nil, - nil, - instanceResource["name"], - instanceResource["plan_name"], - scrapeConfigResource["urls"], - scrapeConfigResource["saml2_enable_url_parameters"], - alertGroupResource["name"], - alertGroupResource["interval"], - alertGroupResource["expression"], - logAlertGroupResource["name"], - logAlertGroupResource["interval"], - logAlertGroupResource["expression"], - ), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_retention_days"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", instanceResource["metrics_retention_days_1h_downsampling"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), - - // ACL - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "0"), - - // scrape config data - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "project_id", - "stackit_observability_scrapeconfig.scrapeconfig", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", - ), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", scrapeConfigResource["saml2_enable_url_parameters"]), - - // credentials - resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_credential.credential", "instance_id", - ), - 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"), - - // logalertgroup - resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_logalertgroup.logalertgroup", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), - ), - }, - // Update with empty ACL, NO metrics retention days and NO alert configs - { - Config: resourceConfig( - utils.Ptr("[]"), - nil, - nil, - nil, - nil, - instanceResource["name"], - instanceResource["plan_name"], - scrapeConfigResource["urls"], - scrapeConfigResource["saml2_enable_url_parameters"], - alertGroupResource["name"], - alertGroupResource["interval"], - alertGroupResource["expression"], - logAlertGroupResource["name"], - logAlertGroupResource["interval"], - logAlertGroupResource["expression"], - ), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance data - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_retention_days"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), - - // ACL - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "0"), - - // scrape config data - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "project_id", - "stackit_observability_scrapeconfig.scrapeconfig", "project_id", - ), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", - ), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", scrapeConfigResource["saml2_enable_url_parameters"]), - - // credentials - resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_credential.credential", "instance_id", - ), - 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"), - - // logalertgroup - resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), - resource.TestCheckResourceAttrPair( - "stackit_observability_instance.instance", "instance_id", - "stackit_observability_logalertgroup.logalertgroup", "instance_id", - ), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_alert"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression), ), }, // Data source { + ConfigVariables: testConfigVarsMin, Config: fmt.Sprintf(` %s @@ -800,9 +219,9 @@ func TestAccResource(t *testing.T) { project_id = stackit_observability_instance.instance.project_id instance_id = stackit_observability_instance.instance.instance_id } - + data "stackit_observability_scrapeconfig" "scrapeconfig" { - project_id = stackit_observability_scrapeconfig.scrapeconfig.project_id + project_id = stackit_observability_scrapeconfig.scrapeconfig.project_id instance_id = stackit_observability_scrapeconfig.scrapeconfig.instance_id name = stackit_observability_scrapeconfig.scrapeconfig.name } @@ -819,37 +238,458 @@ func TestAccResource(t *testing.T) { name = stackit_observability_logalertgroup.logalertgroup.name } `, - resourceConfig( - utils.Ptr(fmt.Sprintf( - "[%q, %q]", - instanceResource["acl-0"], - instanceResource["acl-1"], - )), - utils.Ptr(instanceResource["metrics_retention_days"]), - utils.Ptr(instanceResource["metrics_retention_days_1h_downsampling"]), - utils.Ptr(instanceResource["metrics_retention_days_5m_downsampling"]), - buildAlertConfig(buildAlertConfigReceivers(true, false, true), buildAlertConfigRoute(true), buildAlertConfigGlobal(false)), - instanceResource["name"], - instanceResource["plan_name"], - scrapeConfigResource["urls"], - scrapeConfigResource["saml2_enable_url_parameters"], - alertGroupResource["name"], - alertGroupResource["interval"], - alertGroupResource["expression"], - logAlertGroupResource["name"], - logAlertGroupResource["interval"], - logAlertGroupResource["expression"], - ), + testutil.ObservabilityProviderConfig()+resourceMinConfig, ), Check: resource.ComposeAggregateTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "plan_name", instanceResource["plan_name"]), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["instance_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "project_id", + "data.stackit_observability_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "data.stackit_observability_instance.instance", "instance_id", + ), + + // scrape config data + resource.TestCheckResourceAttrPair( + "stackit_observability_scrapeconfig.scrapeconfig", "project_id", + "data.stackit_observability_scrapeconfig.scrapeconfig", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", + "data.stackit_observability_scrapeconfig.scrapeconfig", "instance_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_scrapeconfig.scrapeconfig", "name", + "data.stackit_observability_scrapeconfig.scrapeconfig", "name", + ), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "1"), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_targets_url"])), + + // alertgroup + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_alertgroup.alertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["alertgroup_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMin["alert_rule_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression), + + // logalertgroup + resource.TestCheckResourceAttr("data.stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_logalertgroup.logalertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("data.stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_alert"])), + resource.TestCheckResourceAttr("data.stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression), + ), + }, + // Import 1 + { + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_observability_instance.instance", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_observability_instance.instance"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_observability_instance.instance") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + + return fmt.Sprintf("%s,%s", testutil.ProjectId, instanceId), nil + }, + ImportState: true, + ImportStateVerify: true, + }, + // Import 2 + { + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_observability_scrapeconfig.scrapeconfig", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_observability_scrapeconfig.scrapeconfig"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_observability_scrapeconfig.scrapeconfig") + } + 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, + }, + // Import 3 + { + ConfigVariables: testConfigVarsMin, + 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, + }, + // Import 4 + { + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_observability_logalertgroup.logalertgroup", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_observability_logalertgroup.logalertgroup"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_observability_logalertgroup.logalertgroup") + } + 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 + { + ConfigVariables: configVarsMinUpdated(), + Config: testutil.ObservabilityProviderConfig() + resourceMinConfig, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["instance_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), + + // scrape config data + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "project_id", + "stackit_observability_scrapeconfig.scrapeconfig", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_name"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "1"), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMin["scrapeconfig_targets_url"])), + + // credentials + resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_credential.credential", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"), + resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"), + + // alertgroup + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_alertgroup.alertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["alertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(configVarsMinUpdated()["alert_rule_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression), + + // logalertgroup + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_logalertgroup.logalertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMin["logalertgroup_alert"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression), + ), + }, + }, + }) +} + +func TestAccResourceMax(t *testing.T) { + resource.ParallelTest(t, resource.TestCase{ + ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, + CheckDestroy: testAccCheckObservabilityDestroy, + Steps: []resource.TestStep{ + // Creation + { + ConfigVariables: testConfigVarsMax, + Config: testutil.ObservabilityProviderConfig() + resourceMaxConfig, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["instance_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_5m_downsampling"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_1h_downsampling"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "2"), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.0", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_1"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.1", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_2"])), + + // alert config + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.name", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_identity", testutil.ConvertConfigVariable(testConfigVarsMax["auth_identity"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_password", testutil.ConvertConfigVariable(testConfigVarsMax["auth_password"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_username", testutil.ConvertConfigVariable(testConfigVarsMax["auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.from", testutil.ConvertConfigVariable(testConfigVarsMax["email_from"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.smart_host", testutil.ConvertConfigVariable(testConfigVarsMax["smart_host"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.to", testutil.ConvertConfigVariable(testConfigVarsMax["email_to"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match.match1", testutil.ConvertConfigVariable(testConfigVarsMax["match"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match_regex.match_regex1", testutil.ConvertConfigVariable(testConfigVarsMax["match_regex"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.resolve_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["resolve_timeout"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_identity", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_identity"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_password", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_password"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_username", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_from", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_from"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_smart_host", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_smart_host"])), + + // scrape config data + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "project_id", + "stackit_observability_scrapeconfig.scrapeconfig", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_name"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_1"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_2"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_label"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_interval"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_limit"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_enable_url_params"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_scheme"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_timeout"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.username", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.password", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_password"])), + + // credentials + resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_credential.credential", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "username"), + resource.TestCheckResourceAttrSet("stackit_observability_credential.credential", "password"), + + // alertgroup + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_alertgroup.alertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["alertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["alert_rule_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["alert_for_time"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_label"])), + + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_annotation"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "interval", testutil.ConvertConfigVariable(testConfigVarsMax["alert_interval"])), + + // logalertgroup + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_logalertgroup.logalertgroup", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_alert"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_for_time"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_label"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_annotation"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "interval", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_interval"])), + ), + }, + // Data source + { + ConfigVariables: testConfigVarsMax, + Config: fmt.Sprintf(` + %s + + data "stackit_observability_instance" "instance" { + project_id = stackit_observability_instance.instance.project_id + instance_id = stackit_observability_instance.instance.instance_id + } + + data "stackit_observability_scrapeconfig" "scrapeconfig" { + project_id = stackit_observability_scrapeconfig.scrapeconfig.project_id + 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 + } + + data "stackit_observability_logalertgroup" "logalertgroup" { + project_id = stackit_observability_logalertgroup.logalertgroup.project_id + instance_id = stackit_observability_logalertgroup.logalertgroup.instance_id + name = stackit_observability_logalertgroup.logalertgroup.name + } + `, + testutil.ObservabilityProviderConfig()+resourceMaxConfig, + ), + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "instance_id"), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["instance_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "is_updatable"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "grafana_public_read_access"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "grafana_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "grafana_initial_admin_user"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "grafana_initial_admin_password"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "metrics_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "metrics_push_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "targets_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "alerting_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "logs_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "logs_push_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "jaeger_traces_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "jaeger_ui_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "otlp_traces_url"), + resource.TestCheckResourceAttrSet("data.stackit_observability_instance.instance", "zipkin_spans_url"), + + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "metrics_retention_days", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_5m_downsampling"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_1h_downsampling"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "acl.#", "2"), - resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "acl.0", instanceResource["acl-0"]), - resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "acl.1", instanceResource["acl-1"]), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "acl.0", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_1"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "acl.1", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_2"])), + // alert configdata. + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.name", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_identity", testutil.ConvertConfigVariable(testConfigVarsMax["auth_identity"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_password", testutil.ConvertConfigVariable(testConfigVarsMax["auth_password"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_username", testutil.ConvertConfigVariable(testConfigVarsMax["auth_username"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.from", testutil.ConvertConfigVariable(testConfigVarsMax["email_from"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.smart_host", testutil.ConvertConfigVariable(testConfigVarsMax["smart_host"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.to", testutil.ConvertConfigVariable(testConfigVarsMax["email_to"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), + + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])), + + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.match.match1", testutil.ConvertConfigVariable(testConfigVarsMax["match"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.route.routes.0.match_regex.match_regex1", testutil.ConvertConfigVariable(testConfigVarsMax["match_regex"])), + + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.global.resolve_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["resolve_timeout"])), + resource.TestCheckResourceAttr("data.stackit_observability_instance.instance", "alert_config.global.smtp_from", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_from"])), + resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "project_id", "data.stackit_observability_instance.instance", "project_id", @@ -871,42 +711,53 @@ func TestAccResource(t *testing.T) { "stackit_observability_scrapeconfig.scrapeconfig", "name", "data.stackit_observability_scrapeconfig.scrapeconfig", "name", ), - resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_name"])), resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), - resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - 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"]), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_1"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_2"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "targets.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_label"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_interval"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_limit"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_enable_url_params"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "scheme", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_scheme"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "scrape_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_timeout"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.username", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_username"])), + resource.TestCheckResourceAttr("data.stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.password", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_password"])), // alertgroup - resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["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"), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["alertgroup_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["alert_rule_name"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["alert_for_time"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_label"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_annotation"])), + resource.TestCheckResourceAttr("data.stackit_observability_alertgroup.alertgroup", "interval", testutil.ConvertConfigVariable(testConfigVarsMax["alert_interval"])), // logalertgroup - resource.TestCheckResourceAttr("data.stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "instance_id", "data.stackit_observability_logalertgroup.logalertgroup", "instance_id", ), - resource.TestCheckResourceAttrSet("data.stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("data.stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("data.stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("data.stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("data.stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_alert"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_for_time"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_label"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_annotation"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "interval", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_interval"])), ), }, // Import 1 { - ResourceName: "stackit_observability_instance.instance", + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_observability_instance.instance", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_observability_instance.instance"] if !ok { @@ -919,12 +770,14 @@ func TestAccResource(t *testing.T) { return fmt.Sprintf("%s,%s", testutil.ProjectId, instanceId), nil }, - ImportState: true, - ImportStateVerify: true, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"alert_config.global.smtp_auth_identity", "alert_config.global.smtp_auth_password", "alert_config.global.smtp_auth_username", "alert_config.global.smtp_smart_host"}, }, // Import 2 { - ResourceName: "stackit_observability_scrapeconfig.scrapeconfig", + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_observability_scrapeconfig.scrapeconfig", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_observability_scrapeconfig.scrapeconfig"] if !ok { @@ -940,12 +793,14 @@ func TestAccResource(t *testing.T) { } return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, name), nil }, - ImportState: true, - ImportStateVerify: true, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"alert_config.global.smtp_auth_identity", "alert_config.global.smtp_auth_password", "alert_config.global.smtp_auth_username", "alert_config.global.smtp_smart_host"}, }, // Import 3 { - ResourceName: "stackit_observability_alertgroup.alertgroup", + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_observability_alertgroup.alertgroup", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_observability_alertgroup.alertgroup"] if !ok { @@ -961,12 +816,14 @@ func TestAccResource(t *testing.T) { } return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, name), nil }, - ImportState: true, - ImportStateVerify: true, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"alert_config.global.smtp_auth_identity", "alert_config.global.smtp_auth_password", "alert_config.global.smtp_auth_username", "alert_config.global.smtp_smart_host"}, }, // Import 4 { - ResourceName: "stackit_observability_logalertgroup.logalertgroup", + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_observability_logalertgroup.logalertgroup", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_observability_logalertgroup.logalertgroup"] if !ok { @@ -982,168 +839,145 @@ func TestAccResource(t *testing.T) { } return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, name), nil }, - ImportState: true, - ImportStateVerify: true, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"alert_config.global.smtp_auth_identity", "alert_config.global.smtp_auth_password", "alert_config.global.smtp_auth_username", "alert_config.global.smtp_smart_host"}, }, // Update { - Config: resourceConfig( - utils.Ptr(fmt.Sprintf( - "[%q, %q]", - instanceResource["acl-0"], - instanceResource["acl-1-updated"], - )), - utils.Ptr(instanceResource["metrics_retention_days"]), - utils.Ptr(instanceResource["metrics_retention_days_1h_downsampling"]), - utils.Ptr(instanceResource["metrics_retention_days_5m_downsampling"]), - buildAlertConfig(buildAlertConfigReceivers(true, false, true), buildAlertConfigRoute(true), buildAlertConfigGlobal(false)), - fmt.Sprintf("%s-new", instanceResource["name"]), - instanceResource["new_plan_name"], - "", - "true", - alertGroupResource["name_updated"], - alertGroupResource["interval_updated"], - alertGroupResource["expression_updated"], - logAlertGroupResource["name_updated"], - logAlertGroupResource["interval_updated"], - logAlertGroupResource["expression_updated"], - ), + ConfigVariables: configVarsMaxUpdated(), + Config: testutil.ObservabilityProviderConfig() + resourceMaxConfig, Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), + // Instance data + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]+"-new"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["new_plan_name"]), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["instance_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", testutil.ConvertConfigVariable(configVarsMaxUpdated()["plan_name"])), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "is_updatable"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_public_read_access"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_user"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "grafana_initial_admin_password"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "metrics_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "targets_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "alerting_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "logs_push_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "jaeger_ui_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "otlp_traces_url"), + resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "zipkin_spans_url"), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_5m_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_5m_downsampling"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "metrics_retention_days_1h_downsampling", testutil.ConvertConfigVariable(testConfigVarsMax["metrics_retention_days_1h_downsampling"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.0", instanceResource["acl-0"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.1", instanceResource["acl-1-updated"]), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.0", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_1"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.1", testutil.ConvertConfigVariable(testConfigVarsMax["instance_acl_2"])), - // Alert Config - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.resolve_timeout", "5m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", "https://api.eu.opsgenie.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.receiver", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", "alertname"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", "10m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", "1m"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", "1h"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match.severity", "critical"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.receiver", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.1.match.severity", "warning"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.1.receiver", "WebhookReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.#", "2"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.name", "OpsGenieReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", "iam,observability-alert"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", - "example-api-key"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.name", "WebhookReceiverInfo"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.0.url", "https://example.com"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.1.webhooks_configs.0.ms_teams", "true"), + // alert config + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.name", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_identity", testutil.ConvertConfigVariable(testConfigVarsMax["auth_identity"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_password", testutil.ConvertConfigVariable(testConfigVarsMax["auth_password"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.auth_username", testutil.ConvertConfigVariable(testConfigVarsMax["auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.from", testutil.ConvertConfigVariable(testConfigVarsMax["email_from"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.smart_host", testutil.ConvertConfigVariable(testConfigVarsMax["smart_host"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.email_configs.0.to", testutil.ConvertConfigVariable(testConfigVarsMax["email_to"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.tags", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_tags"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.opsgenie_configs.0.api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), - // Scrape Config - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.#", "0"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.%", "1"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", "true"), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.url", testutil.ConvertConfigVariable(testConfigVarsMax["webhook_configs_url"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.receivers.0.webhooks_configs.0.ms_teams", testutil.ConvertConfigVariable(testConfigVarsMax["ms_teams"])), - // Credentials + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_by.0", testutil.ConvertConfigVariable(testConfigVarsMax["group_by"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_interval", testutil.ConvertConfigVariable(testConfigVarsMax["group_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.group_wait", testutil.ConvertConfigVariable(testConfigVarsMax["group_wait"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.receiver", testutil.ConvertConfigVariable(testConfigVarsMax["receiver_name"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.repeat_interval", testutil.ConvertConfigVariable(testConfigVarsMax["repeat_interval"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match.match1", testutil.ConvertConfigVariable(testConfigVarsMax["match"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.route.routes.0.match_regex.match_regex1", testutil.ConvertConfigVariable(testConfigVarsMax["match_regex"])), + + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_key", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_key"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.opsgenie_api_url", testutil.ConvertConfigVariable(testConfigVarsMax["opsgenie_api_url"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.resolve_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["resolve_timeout"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_identity", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_identity"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_password", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_password"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_auth_username", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_from", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_from"])), + resource.TestCheckResourceAttr("stackit_observability_instance.instance", "alert_config.global.smtp_smart_host", testutil.ConvertConfigVariable(testConfigVarsMax["smtp_smart_host"])), + + // scrape config data + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "project_id", + "stackit_observability_scrapeconfig.scrapeconfig", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_scrapeconfig.scrapeconfig", "instance_id", + ), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_name"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.#", "2"), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_metrics_path"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.0", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_1"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.urls.1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_targets_url_2"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_label"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_interval"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_limit"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_enable_url_params"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_scheme"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_timeout", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_timeout"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.username", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_username"])), + resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "basic_auth.password", testutil.ConvertConfigVariable(testConfigVarsMax["scrapeconfig_auth_password"])), + + // credentials + resource.TestCheckResourceAttr("stackit_observability_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrPair( + "stackit_observability_instance.instance", "instance_id", + "stackit_observability_credential.credential", "instance_id", + ), 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.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["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"), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["alertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["alert_rule_name"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.expression", alert_rule_expression_updated), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["alert_for_time"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_label"])), + + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["alert_annotation"])), + resource.TestCheckResourceAttr("stackit_observability_alertgroup.alertgroup", "interval", testutil.ConvertConfigVariable(configVarsMaxUpdated()["alert_interval"])), // logalertgroup - resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", credentialResource["project_id"]), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), resource.TestCheckResourceAttrPair( "stackit_observability_instance.instance", "instance_id", "stackit_observability_logalertgroup.logalertgroup", "instance_id", ), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "name"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "interval"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression"), - resource.TestCheckResourceAttrSet("stackit_observability_logalertgroup.logalertgroup", "rules.0.for"), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "name", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_name"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.alert", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_alert"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.expression", logalertgroup_expression_updated), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.for", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_for_time"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.labels.label1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_label"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "rules.0.annotations.annotation1", testutil.ConvertConfigVariable(testConfigVarsMax["logalertgroup_annotation"])), + resource.TestCheckResourceAttr("stackit_observability_logalertgroup.logalertgroup", "interval", testutil.ConvertConfigVariable(configVarsMaxUpdated()["logalertgroup_interval"])), ), }, - // Update and remove saml2 attribute - { - Config: fmt.Sprintf(` - %s - - resource "stackit_observability_instance" "instance" { - project_id = "%s" - name = "%s" - plan_name = "%s" - } - - resource "stackit_observability_scrapeconfig" "scrapeconfig" { - project_id = stackit_observability_instance.instance.project_id - instance_id = stackit_observability_instance.instance.instance_id - name = "%s" - targets = [%s] - scrape_interval = "%s" - sample_limit = %s - metrics_path = "%s" - saml2 = { - enable_url_parameters = false - } - } - `, - testutil.ObservabilityProviderConfig(), - instanceResource["project_id"], - instanceResource["name"], - instanceResource["new_plan_name"], - scrapeConfigResource["name"], - scrapeConfigResource["urls"], - scrapeConfigResource["scrape_interval"], - scrapeConfigResource["sample_limit"], - scrapeConfigResource["metrics_path"], - ), - Check: resource.ComposeAggregateTestCheckFunc( - // Instance - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_observability_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "plan_name", instanceResource["new_plan_name"]), - - // ACL - resource.TestCheckResourceAttr("stackit_observability_instance.instance", "acl.#", "0"), - - // Scrape Config - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "name", scrapeConfigResource["name"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "targets.#", "1"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "metrics_path", scrapeConfigResource["metrics_path"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scheme", scrapeConfigResource["scheme"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "scrape_interval", scrapeConfigResource["scrape_interval"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "sample_limit", scrapeConfigResource["sample_limit"]), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.%", "1"), - resource.TestCheckResourceAttr("stackit_observability_scrapeconfig.scrapeconfig", "saml2.enable_url_parameters", "false"), - ), - }, - // Deletion is done by the framework implicitly }, }) @@ -1155,11 +989,11 @@ func testAccCheckObservabilityDestroy(s *terraform.State) error { var err error if testutil.ObservabilityCustomEndpoint == "" { client, err = observability.NewAPIClient( - config.WithRegion("eu01"), + stackitSdkConfig.WithRegion("eu01"), ) } else { client, err = observability.NewAPIClient( - config.WithEndpoint(testutil.ObservabilityCustomEndpoint), + stackitSdkConfig.WithEndpoint(testutil.ObservabilityCustomEndpoint), ) } if err != nil { diff --git a/stackit/internal/services/observability/testdata/resource-max.tf b/stackit/internal/services/observability/testdata/resource-max.tf new file mode 100644 index 00000000..e284ca48 --- /dev/null +++ b/stackit/internal/services/observability/testdata/resource-max.tf @@ -0,0 +1,212 @@ + +variable "project_id" {} + +variable "alertgroup_name" {} +variable "alert_rule_name" {} +variable "alert_rule_expression" {} +variable "alert_for_time" {} +variable "alert_label" {} +variable "alert_annotation" {} +variable "alert_interval" {} + +variable "instance_name" {} +variable "plan_name" {} +##variable "instance_parameters" {} +variable "metrics_retention_days" {} +variable "metrics_retention_days_5m_downsampling" {} +variable "metrics_retention_days_1h_downsampling" {} +variable "instance_acl_1" {} +variable "instance_acl_2" {} +variable "receiver_name" {} +variable "auth_identity" {} +variable "auth_password" {} +variable "auth_username" {} +variable "email_from" {} +variable "smart_host" {} +variable "email_to" {} +variable "opsgenie_api_key" {} +variable "opsgenie_api_tags" {} +variable "opsgenie_api_url" {} +variable "webhook_configs_url" {} +variable "ms_teams" {} +variable "group_by" {} +variable "group_interval" {} +variable "group_wait" {} +variable "repeat_interval" {} +variable "resolve_timeout" {} +variable "smtp_auth_identity" {} +variable "smtp_auth_password" {} +variable "smtp_auth_username" {} +variable "smtp_from" {} +variable "smtp_smart_host" {} +variable "match" {} +variable "match_regex" {} + +variable "logalertgroup_name" {} +variable "logalertgroup_alert" {} +variable "logalertgroup_expression" {} +variable "logalertgroup_for_time" {} +variable "logalertgroup_label" {} +variable "logalertgroup_annotation" {} +variable "logalertgroup_interval" {} + +variable "scrapeconfig_name" {} +variable "scrapeconfig_metrics_path" {} +variable "scrapeconfig_targets_url_1" {} +variable "scrapeconfig_targets_url_2" {} +variable "scrapeconfig_label" {} +variable "scrapeconfig_interval" {} +variable "scrapeconfig_limit" {} +variable "scrapeconfig_enable_url_params" {} +variable "scrapeconfig_scheme" {} +variable "scrapeconfig_timeout" {} +variable "scrapeconfig_auth_username" {} +variable "scrapeconfig_auth_password" {} + +resource "stackit_observability_alertgroup" "alertgroup" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.alertgroup_name + rules = [ + { + alert = var.alert_rule_name + expression = var.alert_rule_expression + for = var.alert_for_time + labels = { + label1 = var.alert_label + }, + annotations = { + annotation1 = var.alert_annotation + } + } + ] + interval = var.alert_interval +} + +resource "stackit_observability_credential" "credential" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id +} + +resource "stackit_observability_instance" "instance" { + project_id = var.project_id + name = var.instance_name + plan_name = var.plan_name + + metrics_retention_days = var.metrics_retention_days + metrics_retention_days_5m_downsampling = var.metrics_retention_days_5m_downsampling + metrics_retention_days_1h_downsampling = var.metrics_retention_days_1h_downsampling + acl = [var.instance_acl_1, var.instance_acl_2] + + // alert config + alert_config = { + receivers = [ + { + name = var.receiver_name + email_configs = [ + { + auth_identity = var.auth_identity + auth_password = var.auth_password + auth_username = var.auth_username + from = var.email_from + smart_host = var.smart_host + to = var.email_to + } + ] + opsgenie_configs = [ + { + api_key = var.opsgenie_api_key + tags = var.opsgenie_api_tags + api_url = var.opsgenie_api_url + } + ] + webhooks_configs = [ + { + url = var.webhook_configs_url + ms_teams = var.ms_teams + } + ] + }, + ], + + route = { + group_by = [var.group_by] + group_interval = var.group_interval + group_wait = var.group_wait + receiver = var.receiver_name + repeat_interval = var.repeat_interval + routes = [ + { + group_by = [var.group_by] + group_interval = var.group_interval + group_wait = var.group_wait + receiver = var.receiver_name + repeat_interval = var.repeat_interval + match = { + match1 = var.match + } + match_regex = { + match_regex1 = var.match_regex + } + } + ] + }, + + global = { + opsgenie_api_key = var.opsgenie_api_key + opsgenie_api_url = var.opsgenie_api_url + resolve_timeout = var.resolve_timeout + smtp_auth_identity = var.smtp_auth_identity + smtp_auth_password = var.smtp_auth_password + smtp_auth_username = var.smtp_auth_username + smtp_from = var.smtp_from + smtp_smart_host = var.smtp_smart_host + } + } +} + +resource "stackit_observability_logalertgroup" "logalertgroup" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.logalertgroup_name + rules = [ + { + alert = var.logalertgroup_alert + expression = var.logalertgroup_expression + for = var.logalertgroup_for_time + labels = { + label1 = var.logalertgroup_label + }, + annotations = { + annotation1 = var.logalertgroup_annotation + } + } + ] + interval = var.logalertgroup_interval +} + +resource "stackit_observability_scrapeconfig" "scrapeconfig" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.scrapeconfig_name + metrics_path = var.scrapeconfig_metrics_path + + targets = [{ + urls = [var.scrapeconfig_targets_url_1, var.scrapeconfig_targets_url_2] + labels = { + label1 = var.scrapeconfig_label + } + }] + scheme = var.scrapeconfig_scheme + scrape_timeout = var.scrapeconfig_timeout + basic_auth = { + username = var.scrapeconfig_auth_username + password = var.scrapeconfig_auth_password + } + scrape_interval = var.scrapeconfig_interval + sample_limit = var.scrapeconfig_limit + saml2 = { + enable_url_parameters = var.scrapeconfig_enable_url_params + } + +} diff --git a/stackit/internal/services/observability/testdata/resource-min.tf b/stackit/internal/services/observability/testdata/resource-min.tf new file mode 100644 index 00000000..68d405f0 --- /dev/null +++ b/stackit/internal/services/observability/testdata/resource-min.tf @@ -0,0 +1,69 @@ + +variable "project_id" {} + +variable "alertgroup_name" {} +variable "alert_rule_name" {} +variable "alert_rule_expression" {} + +variable "instance_name" {} +variable "plan_name" {} + +variable "logalertgroup_name" {} +variable "logalertgroup_alert" {} +variable "logalertgroup_expression" {} + + +variable "scrapeconfig_name" {} +variable "scrapeconfig_metrics_path" {} +variable "scrapeconfig_targets_url" {} + + +resource "stackit_observability_alertgroup" "alertgroup" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.alertgroup_name + rules = [ + { + alert = var.alert_rule_name + expression = var.alert_rule_expression + } + ] +} + +resource "stackit_observability_credential" "credential" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id +} + + +resource "stackit_observability_instance" "instance" { + project_id = var.project_id + name = var.instance_name + plan_name = var.plan_name +} + +resource "stackit_observability_logalertgroup" "logalertgroup" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.logalertgroup_name + rules = [ + { + alert = var.logalertgroup_alert + expression = var.logalertgroup_expression + } + ] +} + + +resource "stackit_observability_scrapeconfig" "scrapeconfig" { + project_id = var.project_id + instance_id = stackit_observability_instance.instance.instance_id + name = var.scrapeconfig_name + metrics_path = var.scrapeconfig_metrics_path + + targets = [{ urls = [var.scrapeconfig_targets_url] }] +} + + + +