Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 6 additions & 12 deletions .github/workflows/tf-acc-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,12 @@ jobs:
- name: Install project tools and dependencies
run: make project-tools
- name: Run tests
run: make test-acceptance-tf TF_ACC_PROJECT_ID=$${{ secrets.TF_ACC_PROJECT_ID }}
run: |
make test-acceptance-tf TF_ACC_PROJECT_ID=$${{ secrets.TF_ACC_PROJECT_ID }} TF_ACC_ORGANIZATION_ID=$${{ secrets.TF_ACC_ORGANIZATION_ID }}
env:
TF_ACC_ARGUS_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_ARGUS_CUSTOM_ENDPOINT }}
TF_ACC_DNS_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_DNS_CUSTOM_ENDPOINT }}
TF_ACC_LOGME_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_LOGME_CUSTOM_ENDPOINT }}
TF_ACC_MARIADB_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_MARIADB_CUSTOM_ENDPOINT }}
TF_ACC_OBSERVABILITY_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_OBSERVABILITY_CUSTOM_ENDPOINT }}
TF_ACC_OPENSEARCH_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_OPENSEARCH_CUSTOM_ENDPOINT }}
TF_ACC_POSTGRESFLEX_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_POSTGRESFLEX_CUSTOM_ENDPOINT }}
TF_ACC_RABBITMQ_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_RABBITMQ_CUSTOM_ENDPOINT }}
TF_ACC_REDIS_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_REDIS_CUSTOM_ENDPOINT }}
TF_ACC_RESOURCEMANAGER_CUSTOM_ENDPOINT: ${{ secrets.TF_ACC_RESOURCEMANAGER_CUSTOM_ENDPOINT }}
TF_ACC_SERVICE_ACCOUNT_TOKEN: ${{ secrets.TF_ACC_SERVICE_ACCOUNT_TOKEN }}
STACKIT_SERVICE_ACCOUNT_TOKEN: ${{ secrets.TF_ACC_SERVICE_ACCOUNT_TOKEN }}
TF_ACC_TEST_PROJECT_SERVICE_ACCOUNT_EMAIL: ${{ secrets.TF_ACC_TEST_PROJECT_SERVICE_ACCOUNT_EMAIL }}
TF_ACC_TEST_PROJECT_SERVICE_ACCOUNT_TOKEN: ${{ secrets.TF_ACC_TEST_PROJECT_SERVICE_ACCOUNT_TOKEN }}
TF_ACC_TEST_PROJECT_PARENT_CONTAINER_ID: ${{ secrets.TF_ACC_TEST_PROJECT_PARENT_CONTAINER_ID }}
TF_ACC_TEST_PROJECT_PARENT_UUID: ${{ secrets.TF_ACC_TEST_PROJECT_PARENT_UUID }}
TF_ACC_TEST_PROJECT_USER_EMAIL: ${{ secrets.TF_ACC_TEST_PROJECT_USER_EMAIL }}
11 changes: 9 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ test:

test-acceptance-tf:
@if [ -z $(TF_ACC_PROJECT_ID) ]; then echo "Input TF_ACC_PROJECT_ID missing"; exit 1; fi
@if [ -z $(TF_ACC_ORGANIZATION_ID) ]; then echo "Input TF_ACC_ORGANIZATION_ID missing"; exit 1; fi
@if [ -z $(TF_ACC_TEST_IMAGE_LOCAL_FILE_PATH) ]; then \
echo "Input TF_ACC_TEST_IMAGE_LOCAL_FILE_PATH missing. Creating a default file for testing."; \
fi
@echo "Running acceptance tests for the terraform provider"
@cd $(ROOT_DIR)/stackit && TF_ACC=1 TF_ACC_PROJECT_ID=$(TF_ACC_PROJECT_ID) go test ./... -count=1 -timeout=30m && cd $(ROOT_DIR)

@cd $(ROOT_DIR)/stackit && TF_ACC=1 \
TF_ACC_PROJECT_ID=$(TF_ACC_PROJECT_ID) \
TF_ACC_ORGANIZATION_ID=$(TF_ACC_ORGANIZATION_ID) \
go test ./... -count=1 -timeout=30m && \
cd $(ROOT_DIR)
22 changes: 22 additions & 0 deletions stackit/internal/services/iaas/iaas_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package iaas_test
import (
"context"
"fmt"
"os"
"path/filepath"
"strings"
"testing"

Expand Down Expand Up @@ -124,6 +126,9 @@ var imageResource = map[string]string{
"boot_menu": "true",
}

// if no local file is provided the test should create a default file and work with this instead of failing
var localFileForIaasImage os.File

func networkResourceConfig(name, nameservers string) string {
return fmt.Sprintf(`
resource "stackit_network" "network" {
Expand Down Expand Up @@ -331,6 +336,14 @@ func serviceAccountAttachmentResourceConfig() string {
}

func imageResourceConfig(name string) string {
if imageResource["local_file_path"] == "default" {
localFileForIaasImage = testutil.CreateDefaultLocalFile()
filePath, err := filepath.Abs(localFileForIaasImage.Name())
if err != nil {
fmt.Println("Absolute path for localFileForIaasImage could not be retrieved.")
}
imageResource["local_file_path"] = filePath
}
return fmt.Sprintf(`
resource "stackit_image" "image" {
project_id = "%s"
Expand Down Expand Up @@ -1866,6 +1879,15 @@ func testAccCheckIaaSImageDestroy(s *terraform.State) error {
ctx := context.Background()
var client *iaas.APIClient
var err error

if _, err := os.Stat(localFileForIaasImage.Name()); err == nil {
// file exists, delete it
err := os.Remove(localFileForIaasImage.Name())
if err != nil {
return fmt.Errorf("Error deleting localFileForIaasImage file: %w", err)
}
}

if testutil.IaaSCustomEndpoint == "" {
client, err = iaas.NewAPIClient(
config.WithRegion("eu01"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,9 @@ func TestAccObjectStorageResource(t *testing.T) {

return fmt.Sprintf("%s,%s", testutil.ProjectId, credentialsGroupId), nil
},
ImportState: true,
ImportStateVerify: true,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"region"},
},
{
ResourceName: "stackit_objectstorage_credential.credential",
Expand All @@ -214,7 +215,7 @@ func TestAccObjectStorageResource(t *testing.T) {
},
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"access_key", "secret_access_key"},
ImportStateVerifyIgnore: []string{"access_key", "secret_access_key", "region"},
},
// Deletion is done by the framework implicitly
},
Expand Down
6 changes: 3 additions & 3 deletions stackit/internal/services/opensearch/opensearch_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func TestAccOpenSearchResource(t *testing.T) {
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "plan_name", instanceResource["plan_name"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "version", instanceResource["version"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "name", instanceResource["name"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sqw_acl-1"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-1"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.syslog.#", "1"),
Expand Down Expand Up @@ -153,7 +153,7 @@ func TestAccOpenSearchResource(t *testing.T) {
"data.stackit_opensearch_credential.credential", "credential_id"),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "plan_id", instanceResource["plan_id"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "name", instanceResource["name"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sqw_acl-1"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-1"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]),
resource.TestCheckResourceAttr("data.stackit_opensearch_instance.instance", "parameters.syslog.#", "1"),
Expand Down Expand Up @@ -223,7 +223,7 @@ func TestAccOpenSearchResource(t *testing.T) {
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "plan_name", instanceResource["plan_name"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "version", instanceResource["version"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "name", instanceResource["name"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sqw_acl-2"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.sgw_acl", instanceResource["sgw_acl-2"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.max_disk_threshold", instanceResource["max_disk_threshold"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.enable_monitoring", instanceResource["enable_monitoring"]),
resource.TestCheckResourceAttr("stackit_opensearch_instance.instance", "parameters.syslog.#", "1"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,9 @@ func TestAccPostgresFlexFlexResource(t *testing.T) {

return fmt.Sprintf("%s,%s", testutil.ProjectId, instanceId), nil
},
ImportState: true,
ImportStateVerify: true,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"password"},
},
{
ResourceName: "stackit_postgresflex_user.user",
Expand All @@ -262,7 +263,7 @@ func TestAccPostgresFlexFlexResource(t *testing.T) {
},
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"password"},
ImportStateVerifyIgnore: []string{"password", "uri"},
},
{
ResourceName: "stackit_postgresflex_database.database",
Expand Down
2 changes: 0 additions & 2 deletions stackit/internal/services/redis/redis_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ func TestAccRedisResource(t *testing.T) {
"metrics_frequency": "10",
"metrics_prefix": "prefix",
"min_replicas_max_lag": "15",
"monitoring_instance_id": "mid",
"notify_keyspace_events": "Ex",
"syslog": `["syslog.example.com:123"]`,
"tls_protocols": "TLSv1.2",
Expand Down Expand Up @@ -146,7 +145,6 @@ func TestAccRedisResource(t *testing.T) {
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.metrics_frequency", "10"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.metrics_prefix", "prefix"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.min_replicas_max_lag", "15"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.monitoring_instance_id", "mid"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.notify_keyspace_events", "Ex"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.syslog.#", "1"),
resource.TestCheckResourceAttr("stackit_redis_instance.instance", "parameters.syslog.0", "syslog.example.com:123"),
Expand Down
24 changes: 23 additions & 1 deletion stackit/internal/testutil/testutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ var (
// Default email: acc-test@sa.stackit.cloud
TestProjectUserEmail = getenv("TF_ACC_TEST_PROJECT_USER_EMAIL", "acc-test@sa.stackit.cloud")
// TestImageLocalFilePath is the local path to an image file used for image acceptance tests
TestImageLocalFilePath = os.Getenv("TF_ACC_TEST_IMAGE_LOCAL_FILE_PATH")
TestImageLocalFilePath = getenv("TF_ACC_TEST_IMAGE_LOCAL_FILE_PATH", "default")

ArgusCustomEndpoint = os.Getenv("TF_ACC_ARGUS_CUSTOM_ENDPOINT")
DnsCustomEndpoint = os.Getenv("TF_ACC_DNS_CUSTOM_ENDPOINT")
Expand Down Expand Up @@ -432,3 +432,25 @@ func getenv(key, defaultValue string) string {
}
return val
}

// helper for local_file_path
// no real data is created
func CreateDefaultLocalFile() os.File {
// Define the file name and size
fileName := "test-512k.img"
size := 512 * 1024 // 512 KB

// Create the file
file, err := os.Create(fileName)
if err != nil {
panic(err)
}

// Seek to the desired position (512 KB)
_, err = file.Seek(int64(size), 0)
if err != nil {
panic(err)
}

return *file
}
Loading