feat(observability): Min/Max acceptance tests (#805)
Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de>
This commit is contained in:
parent
ab99821c30
commit
c473560332
6 changed files with 1062 additions and 908 deletions
|
|
@ -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(),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
},
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
212
stackit/internal/services/observability/testdata/resource-max.tf
vendored
Normal file
212
stackit/internal/services/observability/testdata/resource-max.tf
vendored
Normal file
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
69
stackit/internal/services/observability/testdata/resource-min.tf
vendored
Normal file
69
stackit/internal/services/observability/testdata/resource-min.tf
vendored
Normal file
|
|
@ -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] }]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue