diff --git a/stackit/internal/services/logme/logme_acc_test.go b/stackit/internal/services/logme/logme_acc_test.go index 0a9af998..614b6524 100644 --- a/stackit/internal/services/logme/logme_acc_test.go +++ b/stackit/internal/services/logme/logme_acc_test.go @@ -2,13 +2,17 @@ package logme_test import ( "context" + _ "embed" "fmt" + "maps" "strings" "testing" + "github.com/google/uuid" + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/stackitcloud/stackit-sdk-go/core/config" + core_config "github.com/stackitcloud/stackit-sdk-go/core/config" "github.com/stackitcloud/stackit-sdk-go/core/utils" "github.com/stackitcloud/stackit-sdk-go/services/logme" "github.com/stackitcloud/stackit-sdk-go/services/logme/wait" @@ -16,76 +20,80 @@ import ( "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil" ) +var ( + //go:embed testdata/resource-min.tf + resourceMinConfig string + + //go:embed testdata/resource-max.tf + resourceMaxConfig string +) + +var ( + minTestName = testutil.ResourceNameWithDateTime("logme-min") + maxTestName = testutil.ResourceNameWithDateTime("logme-max") +) + // Instance resource data -var instanceResource = map[string]string{ - "project_id": testutil.ProjectId, - "name": testutil.ResourceNameWithDateTime("logme"), - "plan_id": "201d743c-0f06-4af2-8f20-649baf4819ae", - "plan_name": "stackit-logme2-1.2.50-replica", - "version": "2", - "sgw_acl-1": "192.168.0.0/16", - "sgw_acl-2": "192.168.0.0/24", - "fluent_tcp": "4", - "max_disk_threshold": "80", - "enable_monitoring": "false", - "syslog-0": "syslog.example.com:514", - "ism_jitter": "0.6", +var testConfigVarsMin = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "name": config.StringVariable(minTestName), + "plan_id": config.StringVariable("7a54492c-8a2e-4d3c-b6c2-a4f20cb65912"), // stackit-logme2-1.4.10-single + "plan_name": config.StringVariable("stackit-logme2-1.4.10-single"), + "logme_version": config.StringVariable("2"), } -func parametersConfig(params map[string]string) string { - nonStringParams := []string{ - "enable_monitoring", - "fluentd_tcp", - "fluentd_tls", - "fluentd_udp", - "ism_jitter", - "ism_job_interval", - "java_heapspace", - "java_maxmetaspace", - "max_disk_threshold", - "metrics_frequency", - "opensearch_tls_ciphers", - "opensearch_tls_protocols", - "syslog", - } - parameters := "parameters = {" - for k, v := range params { - if utils.Contains(nonStringParams, k) { - parameters += fmt.Sprintf("%s = %s\n", k, v) - } else { - parameters += fmt.Sprintf("%s = %q\n", k, v) - } - } - parameters += "\n}" - return parameters +var testConfigVarsMax = config.Variables{ + "project_id": config.StringVariable(testutil.ProjectId), + "name": config.StringVariable(maxTestName), + "plan_id": config.StringVariable("7a54492c-8a2e-4d3c-b6c2-a4f20cb65912"), // stackit-logme2-1.4.10-single + "logme_version": config.StringVariable("2"), + + "plan_name": config.StringVariable("stackit-logme2-1.4.10-single"), + "params_enable_monitoring": config.BoolVariable(false), + "params_fluentd_tcp": config.IntegerVariable(4), + "params_fluentd_tls": config.IntegerVariable(1), + "params_fluentd_tls_ciphers": config.StringVariable("ALL:!aNULL:!eNULL:!SSLv2"), + "params_fluentd_tls_max_version": config.StringVariable("TLS1_3"), + "params_fluentd_tls_min_version": config.StringVariable("TLS1_1"), + "params_fluentd_tls_version": config.StringVariable("TLS1_2"), + "params_fluentd_udp": config.IntegerVariable(1234), + "params_graphite": config.StringVariable("graphite.example.com:12345"), + "params_ism_deletion_after": config.StringVariable("30d"), + "params_ism_jitter": config.FloatVariable(0.6), + "params_ism_job_interval": config.IntegerVariable(5), + "params_java_heapspace": config.IntegerVariable(256), + "params_java_maxmetaspace": config.IntegerVariable(512), + "params_max_disk_threshold": config.IntegerVariable(80), + "params_metrics_frequency": config.IntegerVariable(10), + "params_metrics_prefix": config.StringVariable("actest"), + "params_monitoring_instance_id": config.StringVariable(uuid.NewString()), + "params_opensearch_tls_ciphers": config.StringVariable("TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"), + "params_opensearch_tls_cipher1": config.StringVariable("TLS_DHE_RSA_WITH_AES_256_CBC_SHA"), + "params_opensearch_tls_cipher2": config.StringVariable("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"), + "params_opensearch_tls_protocol1": config.StringVariable("TLSv1.2"), + "params_opensearch_tls_protocol2": config.StringVariable("TLSv1.3"), + "params_sgw_acl": config.StringVariable("192.168.0.0/16,192.168.0.0/24"), + "params_syslog1": config.StringVariable("syslog1.example.com:514"), + "params_syslog2": config.StringVariable("syslog2.example.com:514"), } -func resourceConfig(params map[string]string) string { - return fmt.Sprintf(` - %s - - resource "stackit_logme_instance" "instance" { - project_id = "%s" - name = "%s" - plan_name = "%s" - version = "%s" - %s - } - - resource "stackit_logme_credential" "credential" { - project_id = stackit_logme_instance.instance.project_id - instance_id = stackit_logme_instance.instance.instance_id - } - `, - testutil.LogMeProviderConfig(), - instanceResource["project_id"], - instanceResource["name"], - instanceResource["plan_name"], - instanceResource["version"], - parametersConfig(params), - ) +func configVarsMinUpdated() config.Variables { + updatedConfig := maps.Clone(testConfigVarsMax) + updatedConfig["name"] = config.StringVariable(minTestName + "-updated") + return updatedConfig } -func TestAccLogMeResource(t *testing.T) { + +func configVarsMaxUpdated() config.Variables { + updatedConfig := maps.Clone(testConfigVarsMax) + updatedConfig["parameters_max_disk_threshold"] = config.IntegerVariable(85) + updatedConfig["parameters_metrics_frequency"] = config.IntegerVariable(10) + updatedConfig["parameters_graphite"] = config.StringVariable("graphite.stackit.cloud:2003") + updatedConfig["parameters_sgw_acl"] = config.StringVariable("192.168.1.0/24") + updatedConfig["parameters_syslog"] = config.StringVariable("test.log:514") + return updatedConfig +} + +func TestAccLogMeMinResource(t *testing.T) { resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, CheckDestroy: testAccCheckLogMeDestroy, @@ -93,30 +101,15 @@ func TestAccLogMeResource(t *testing.T) { // Creation { - Config: resourceConfig( - map[string]string{ - "sgw_acl": instanceResource["sgw_acl-1"], - "fluentd_tcp": instanceResource["fluent_tcp"], - "max_disk_threshold": instanceResource["max_disk_threshold"], - "enable_monitoring": instanceResource["enable_monitoring"], - "syslog": fmt.Sprintf(`[%q]`, instanceResource["syslog-0"]), - "ism_jitter": instanceResource["ism_jitter"], - }), + Config: testutil.LogMeProviderConfig() + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, Check: resource.ComposeAggregateTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_logme_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", instanceResource["version"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-1"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tcp", instanceResource["fluent_tcp"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.#", "1"), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.0", instanceResource["syslog-0"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_jitter", instanceResource["ism_jitter"]), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(testConfigVarsMin["plan_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMin["logme_version"])), // Credential data resource.TestCheckResourceAttrPair( @@ -133,49 +126,32 @@ func TestAccLogMeResource(t *testing.T) { }, // Data source { - Config: fmt.Sprintf(` - %s - - data "stackit_logme_instance" "instance" { - project_id = stackit_logme_instance.instance.project_id - instance_id = stackit_logme_instance.instance.instance_id - } - - data "stackit_logme_credential" "credential" { - project_id = stackit_logme_credential.credential.project_id - instance_id = stackit_logme_credential.credential.instance_id - credential_id = stackit_logme_credential.credential.credential_id - }`, - resourceConfig(map[string]string{ - "sgw_acl": instanceResource["sgw_acl-1"], - "fluentd_tcp": instanceResource["fluent_tcp"], - "max_disk_threshold": instanceResource["max_disk_threshold"], - "enable_monitoring": instanceResource["enable_monitoring"], - "syslog": fmt.Sprintf(`[%q]`, instanceResource["syslog-0"]), - "ism_jitter": instanceResource["ism_jitter"], - }), - ), + Config: testutil.LogMeProviderConfig() + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, Check: resource.ComposeAggregateTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "project_id", instanceResource["project_id"]), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), - resource.TestCheckResourceAttrPair("stackit_logme_instance.instance", "instance_id", - "data.stackit_logme_instance.instance", "instance_id"), - resource.TestCheckResourceAttrPair("stackit_logme_credential.credential", "credential_id", - "data.stackit_logme_credential.credential", "credential_id"), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-1"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tcp", instanceResource["fluent_tcp"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.syslog.#", "1"), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.syslog.0", instanceResource["syslog-0"]), - resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.ism_jitter", instanceResource["ism_jitter"]), + resource.TestCheckResourceAttrPair( + "stackit_logme_instance.instance", "instance_id", + "data.stackit_logme_instance.instance", "instance_id", + ), + + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "id"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "image_url"), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMin["name"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(testConfigVarsMin["plan_id"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMin["plan_name"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMin["logme_version"])), // Credential data - resource.TestCheckResourceAttr("data.stackit_logme_credential.credential", "project_id", instanceResource["project_id"]), + resource.TestCheckResourceAttr("data.stackit_logme_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])), resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "credential_id"), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "password"), resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "host"), resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "port"), resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "uri"), @@ -183,7 +159,9 @@ func TestAccLogMeResource(t *testing.T) { }, // Import { - ResourceName: "stackit_logme_instance.instance", + Config: testutil.LogMeProviderConfig() + "\n" + resourceMinConfig, + ConfigVariables: testConfigVarsMin, + ResourceName: "stackit_logme_instance.instance", ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_logme_instance.instance"] if !ok { @@ -199,7 +177,9 @@ func TestAccLogMeResource(t *testing.T) { ImportStateVerify: true, }, { - ResourceName: "stackit_logme_credential.credential", + ResourceName: "stackit_logme_credential.credential", + ConfigVariables: testConfigVarsMin, + ImportStateIdFunc: func(s *terraform.State) (string, error) { r, ok := s.RootModule().Resources["stackit_logme_credential.credential"] if !ok { @@ -220,29 +200,219 @@ func TestAccLogMeResource(t *testing.T) { }, // Update { - Config: resourceConfig(map[string]string{ - "sgw_acl": instanceResource["sgw_acl-2"], - "fluentd_tcp": instanceResource["fluent_tcp"], - "max_disk_threshold": instanceResource["max_disk_threshold"], - "enable_monitoring": instanceResource["enable_monitoring"], - "syslog": fmt.Sprintf(`[%q]`, instanceResource["syslog-0"]), - "ism_jitter": instanceResource["ism_jitter"], - }), + Config: testutil.LogMeProviderConfig() + "\n" + resourceMinConfig, + ConfigVariables: configVarsMinUpdated(), Check: resource.ComposeAggregateTestCheckFunc( // Instance data - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", instanceResource["project_id"]), - resource.TestCheckResourceAttrSet("stackit_logme_instance.instance", "instance_id"), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", instanceResource["plan_id"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", instanceResource["plan_name"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", instanceResource["version"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", instanceResource["name"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-2"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tcp", instanceResource["fluent_tcp"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.#", "1"), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.0", instanceResource["syslog-0"]), - resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_jitter", instanceResource["ism_jitter"]), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(configVarsMinUpdated()["project_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(configVarsMinUpdated()["plan_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(configVarsMinUpdated()["name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(configVarsMinUpdated()["plan_name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(configVarsMinUpdated()["logme_version"])), + ), + }, + // Deletion is done by the framework implicitly + }, + }) +} + +func TestAccLogMeMaxResource(t *testing.T) { + resource.Test(t, resource.TestCase{ + ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories, + CheckDestroy: testAccCheckLogMeDestroy, + Steps: []resource.TestStep{ + + // Creation + { + Config: testutil.LogMeProviderConfig() + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(testConfigVarsMax["plan_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMax["logme_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.enable_monitoring", testutil.ConvertConfigVariable(testConfigVarsMax["params_enable_monitoring"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tcp", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tcp"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_ciphers", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_ciphers"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_max_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_max_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_min_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_min_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_udp", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_udp"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.graphite", testutil.ConvertConfigVariable(testConfigVarsMax["params_graphite"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_deletion_after", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_deletion_after"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_jitter", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_jitter"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_job_interval", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_job_interval"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.java_heapspace", testutil.ConvertConfigVariable(testConfigVarsMax["params_java_heapspace"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.java_maxmetaspace", testutil.ConvertConfigVariable(testConfigVarsMax["params_java_maxmetaspace"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.max_disk_threshold", testutil.ConvertConfigVariable(testConfigVarsMax["params_max_disk_threshold"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.metrics_frequency", testutil.ConvertConfigVariable(testConfigVarsMax["params_metrics_frequency"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.metrics_prefix", testutil.ConvertConfigVariable(testConfigVarsMax["params_metrics_prefix"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_cipher1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_cipher2"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_protocol1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_protocol2"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.sgw_acl", testutil.ConvertConfigVariable(testConfigVarsMax["params_sgw_acl"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_syslog1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_syslog2"])), + + // // Credential data + resource.TestCheckResourceAttrPair( + "stackit_logme_credential.credential", "project_id", + "stackit_logme_instance.instance", "project_id", + ), + resource.TestCheckResourceAttrPair( + "stackit_logme_credential.credential", "instance_id", + "stackit_logme_instance.instance", "instance_id", + ), + resource.TestCheckResourceAttrSet("stackit_logme_credential.credential", "credential_id"), + resource.TestCheckResourceAttrSet("stackit_logme_credential.credential", "host"), + ), + }, + // Data source + { + Config: testutil.LogMeProviderConfig() + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + + resource.TestCheckResourceAttrPair( + "stackit_logme_instance.instance", "instance_id", + "data.stackit_logme_instance.instance", "instance_id", + ), + + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_organization_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "cf_space_guid"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "dashboard_url"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "id"), + resource.TestCheckResourceAttrSet("data.stackit_logme_instance.instance", "image_url"), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(testConfigVarsMax["name"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(testConfigVarsMax["plan_id"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(testConfigVarsMax["plan_name"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(testConfigVarsMax["logme_version"])), + + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.enable_monitoring", testutil.ConvertConfigVariable(testConfigVarsMax["params_enable_monitoring"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tcp", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tcp"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tls", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tls_ciphers", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_ciphers"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tls_max_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_max_version"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tls_min_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_min_version"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_tls_version", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_tls_version"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.fluentd_udp", testutil.ConvertConfigVariable(testConfigVarsMax["params_fluentd_udp"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.ism_deletion_after", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_deletion_after"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.ism_jitter", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_jitter"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.ism_job_interval", testutil.ConvertConfigVariable(testConfigVarsMax["params_ism_job_interval"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.java_heapspace", testutil.ConvertConfigVariable(testConfigVarsMax["params_java_heapspace"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.java_maxmetaspace", testutil.ConvertConfigVariable(testConfigVarsMax["params_java_maxmetaspace"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.max_disk_threshold", testutil.ConvertConfigVariable(testConfigVarsMax["params_max_disk_threshold"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.metrics_frequency", testutil.ConvertConfigVariable(testConfigVarsMax["params_metrics_frequency"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.metrics_prefix", testutil.ConvertConfigVariable(testConfigVarsMax["params_metrics_prefix"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.#", "2"), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_cipher1"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_cipher2"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.#", "2"), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_protocol1"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_opensearch_tls_protocol2"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.sgw_acl", testutil.ConvertConfigVariable(testConfigVarsMax["params_sgw_acl"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.syslog.#", "2"), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.syslog.0", testutil.ConvertConfigVariable(testConfigVarsMax["params_syslog1"])), + resource.TestCheckResourceAttr("data.stackit_logme_instance.instance", "parameters.syslog.1", testutil.ConvertConfigVariable(testConfigVarsMax["params_syslog2"])), + + // Credential data + resource.TestCheckResourceAttr("data.stackit_logme_credential.credential", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "credential_id"), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "password"), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "host"), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "port"), + resource.TestCheckResourceAttrSet("data.stackit_logme_credential.credential", "uri"), + ), + }, + // Import + { + Config: testutil.LogMeProviderConfig() + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + ResourceName: "stackit_logme_instance.instance", + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_logme_instance.instance"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_logme_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, + }, + { + ResourceName: "stackit_logme_credential.credential", + ConfigVariables: testConfigVarsMax, + + ImportStateIdFunc: func(s *terraform.State) (string, error) { + r, ok := s.RootModule().Resources["stackit_logme_credential.credential"] + if !ok { + return "", fmt.Errorf("couldn't find resource stackit_logme_credential.credential") + } + instanceId, ok := r.Primary.Attributes["instance_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute instance_id") + } + credentialId, ok := r.Primary.Attributes["credential_id"] + if !ok { + return "", fmt.Errorf("couldn't find attribute credential_id") + } + return fmt.Sprintf("%s,%s,%s", testutil.ProjectId, instanceId, credentialId), nil + }, + ImportState: true, + ImportStateVerify: true, + }, + // Update + { + Config: testutil.LogMeProviderConfig() + "\n" + resourceMaxConfig, + ConfigVariables: testConfigVarsMax, + Check: resource.ComposeAggregateTestCheckFunc( + // Instance data + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "project_id", testutil.ConvertConfigVariable(configVarsMaxUpdated()["project_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_id", testutil.ConvertConfigVariable(configVarsMaxUpdated()["plan_id"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "name", testutil.ConvertConfigVariable(configVarsMaxUpdated()["name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "plan_name", testutil.ConvertConfigVariable(configVarsMaxUpdated()["plan_name"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "version", testutil.ConvertConfigVariable(configVarsMaxUpdated()["logme_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.enable_monitoring", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_enable_monitoring"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tcp", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tcp"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tls"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_ciphers", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tls_ciphers"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_max_version", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tls_max_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_min_version", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tls_min_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_tls_version", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_tls_version"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.fluentd_udp", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_fluentd_udp"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.graphite", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_graphite"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_deletion_after", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_ism_deletion_after"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_jitter", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_ism_jitter"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.ism_job_interval", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_ism_job_interval"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.java_heapspace", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_java_heapspace"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.java_maxmetaspace", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_java_maxmetaspace"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.max_disk_threshold", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_max_disk_threshold"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.metrics_frequency", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_metrics_frequency"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.metrics_prefix", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_metrics_prefix"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.0", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_opensearch_tls_cipher1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_ciphers.1", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_opensearch_tls_cipher2"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.0", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_opensearch_tls_protocol1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.opensearch_tls_protocols.1", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_opensearch_tls_protocol2"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.sgw_acl", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_sgw_acl"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.#", "2"), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.0", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_syslog1"])), + resource.TestCheckResourceAttr("stackit_logme_instance.instance", "parameters.syslog.1", testutil.ConvertConfigVariable(configVarsMaxUpdated()["params_syslog2"])), ), }, // Deletion is done by the framework implicitly @@ -256,11 +426,11 @@ func testAccCheckLogMeDestroy(s *terraform.State) error { var err error if testutil.LogMeCustomEndpoint == "" { client, err = logme.NewAPIClient( - config.WithRegion("eu01"), + core_config.WithRegion("eu01"), ) } else { client, err = logme.NewAPIClient( - config.WithEndpoint(testutil.LogMeCustomEndpoint), + core_config.WithEndpoint(testutil.LogMeCustomEndpoint), ) } if err != nil { diff --git a/stackit/internal/services/logme/testdata/resource-max.tf b/stackit/internal/services/logme/testdata/resource-max.tf new file mode 100644 index 00000000..5184566e --- /dev/null +++ b/stackit/internal/services/logme/testdata/resource-max.tf @@ -0,0 +1,78 @@ +variable "project_id" {} +variable "name" {} +variable "plan_name" {} +variable "logme_version" {} +variable "params_enable_monitoring" {} +variable "params_fluentd_tcp" {} +variable "params_fluentd_tls" {} +variable "params_fluentd_tls_ciphers" {} +variable "params_fluentd_tls_max_version" {} +variable "params_fluentd_tls_min_version" {} +variable "params_fluentd_tls_version" {} +variable "params_fluentd_udp" {} +variable "params_graphite" {} +variable "params_ism_deletion_after" {} +variable "params_ism_jitter" {} +variable "params_ism_job_interval" {} +variable "params_java_heapspace" {} +variable "params_java_maxmetaspace" {} +variable "params_max_disk_threshold" {} +variable "params_metrics_frequency" {} +variable "params_metrics_prefix" {} +variable "params_monitoring_instance_id" {} +variable "params_opensearch_tls_cipher1" {} +variable "params_opensearch_tls_cipher2" {} +variable "params_opensearch_tls_protocol1" {} +variable "params_opensearch_tls_protocol2" {} +variable "params_sgw_acl" {} +variable "params_syslog1" {} +variable "params_syslog2" {} + +resource "stackit_logme_instance" "instance" { + project_id = var.project_id + name = var.name + plan_name = var.plan_name + version = var.logme_version + + parameters = { + enable_monitoring = var.params_enable_monitoring + fluentd_tcp = var.params_fluentd_tcp + fluentd_tls = var.params_fluentd_tls + fluentd_tls_ciphers = var.params_fluentd_tls_ciphers + fluentd_tls_max_version = var.params_fluentd_tls_max_version + fluentd_tls_min_version = var.params_fluentd_tls_min_version + fluentd_tls_version = var.params_fluentd_tls_version + fluentd_udp = var.params_fluentd_udp + graphite = var.params_graphite + ism_deletion_after = var.params_ism_deletion_after + ism_jitter = var.params_ism_jitter + ism_job_interval = var.params_ism_job_interval + java_heapspace = var.params_java_heapspace + java_maxmetaspace = var.params_java_maxmetaspace + max_disk_threshold = var.params_max_disk_threshold + metrics_frequency = var.params_metrics_frequency + metrics_prefix = var.params_metrics_prefix + opensearch_tls_ciphers = [var.params_opensearch_tls_cipher1, var.params_opensearch_tls_cipher2] + opensearch_tls_protocols = [var.params_opensearch_tls_protocol1, var.params_opensearch_tls_protocol2] + sgw_acl = var.params_sgw_acl + syslog = [var.params_syslog1, var.params_syslog2] + + } +} + +resource "stackit_logme_credential" "credential" { + project_id = stackit_logme_instance.instance.project_id + instance_id = stackit_logme_instance.instance.instance_id +} + + +data "stackit_logme_instance" "instance" { + project_id = stackit_logme_instance.instance.project_id + instance_id = stackit_logme_instance.instance.instance_id +} + +data "stackit_logme_credential" "credential" { + project_id = stackit_logme_credential.credential.project_id + instance_id = stackit_logme_credential.credential.instance_id + credential_id = stackit_logme_credential.credential.credential_id +} diff --git a/stackit/internal/services/logme/testdata/resource-min.tf b/stackit/internal/services/logme/testdata/resource-min.tf new file mode 100644 index 00000000..8552c77f --- /dev/null +++ b/stackit/internal/services/logme/testdata/resource-min.tf @@ -0,0 +1,28 @@ +variable "project_id" {} +variable "name" {} +variable "plan_name" {} +variable "logme_version" {} + +resource "stackit_logme_instance" "instance" { + project_id = var.project_id + name = var.name + plan_name = var.plan_name + version = var.logme_version +} + +resource "stackit_logme_credential" "credential" { + project_id = stackit_logme_instance.instance.project_id + instance_id = stackit_logme_instance.instance.instance_id +} + + +data "stackit_logme_instance" "instance" { + project_id = stackit_logme_instance.instance.project_id + instance_id = stackit_logme_instance.instance.instance_id +} + +data "stackit_logme_credential" "credential" { + project_id = stackit_logme_credential.credential.project_id + instance_id = stackit_logme_credential.credential.instance_id + credential_id = stackit_logme_credential.credential.credential_id +}