From b2f1caac5057edc1233c2931d6c655bdd17a0339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Fri, 24 May 2024 12:49:57 +0100 Subject: [PATCH 1/5] Implement instance waiters and add example --- examples/sqlserverflex/go.mod | 11 ++ examples/sqlserverflex/go.sum | 9 + examples/sqlserverflex/sqlserverflex.go | 76 +++++++ go.work | 1 + services/sqlserverflex/go.mod | 1 + services/sqlserverflex/go.sum | 1 + services/sqlserverflex/wait/wait.go | 110 +++++++++++ services/sqlserverflex/wait/wait_test.go | 241 +++++++++++++++++++++++ 8 files changed, 450 insertions(+) create mode 100644 examples/sqlserverflex/go.mod create mode 100644 examples/sqlserverflex/go.sum create mode 100644 examples/sqlserverflex/sqlserverflex.go create mode 100644 services/sqlserverflex/wait/wait.go create mode 100644 services/sqlserverflex/wait/wait_test.go diff --git a/examples/sqlserverflex/go.mod b/examples/sqlserverflex/go.mod new file mode 100644 index 000000000..0b7f769e5 --- /dev/null +++ b/examples/sqlserverflex/go.mod @@ -0,0 +1,11 @@ +module github.com/stackitcloud/stackit-sdk-go/examples/sqlserverflex + +go 1.18 + +require github.com/stackitcloud/stackit-sdk-go/core v0.12.0 + +require ( + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0 +) diff --git a/examples/sqlserverflex/go.sum b/examples/sqlserverflex/go.sum new file mode 100644 index 000000000..b07895c19 --- /dev/null +++ b/examples/sqlserverflex/go.sum @@ -0,0 +1,9 @@ +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/stackitcloud/stackit-sdk-go/core v0.12.0 h1:auIzUUNRuydKOScvpICP4MifGgvOajiDQd+ncGmBL0U= +github.com/stackitcloud/stackit-sdk-go/core v0.12.0/go.mod h1:mDX1mSTsB3mP+tNBGcFNx6gH1mGBN4T+dVt+lcw7nlw= +github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0 h1:zndnPbQLR9aeJXK7bWomQP1WcZgrzfPpDXlti4v4DP0= +github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0/go.mod h1:27rHZe5pbIuDOdO2aZpUAWoRgOC2UB7rBJfmFnR1pBw= diff --git a/examples/sqlserverflex/sqlserverflex.go b/examples/sqlserverflex/sqlserverflex.go new file mode 100644 index 000000000..997109b25 --- /dev/null +++ b/examples/sqlserverflex/sqlserverflex.go @@ -0,0 +1,76 @@ +package main + +import ( + "context" + "fmt" + "os" + + "github.com/stackitcloud/stackit-sdk-go/core/config" + "github.com/stackitcloud/stackit-sdk-go/core/utils" + "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" + "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex/wait" +) + +func main() { + // Specify the project ID + projectId := "16f49d71-37ad-4137-8b97-44d9c55c4094" + + // Specify instance configuration options + // flavorId := "FLAVOR_ID" + // version := "VERSION" + flavorId := "4.16-Single" + version := "2022" + + ctx := context.Background() + + // Create a new API client, that uses default authentication and configuration + sqlserverflexClient, err := sqlserverflex.NewAPIClient( + config.WithRegion("eu01"), + ) + if err != nil { + fmt.Fprintf(os.Stderr, "Creating API client: %v\n", err) + os.Exit(1) + } + + // Get the MongoDB Flex instances for your project + getInstancesResp, err := sqlserverflexClient.ListInstances(ctx, projectId).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `GetInstances`: %v\n", err) + os.Exit(1) + } + items := *getInstancesResp.Items + fmt.Printf("Number of instances: %v\n", len(items)) + + // Create an instance + createInstancePayload := sqlserverflex.CreateInstancePayload{ + Name: utils.Ptr("my-instance-3"), + FlavorId: utils.Ptr(flavorId), + Version: utils.Ptr(version), + } + instance, err := sqlserverflexClient.CreateInstance(ctx, projectId).CreateInstancePayload(createInstancePayload).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error creating SQL Server Flex instance: %v\n", err) + } + instanceId := *instance.Id + + _, err = wait.CreateInstanceWaitHandler(ctx, sqlserverflexClient, projectId, instanceId).WaitWithContext(ctx) + if err != nil { + fmt.Fprintf(os.Stderr, "Error when waiting for SQL Server Flex instance creation: %v\n", err) + } + + fmt.Printf("Created SQL Server Flex instance \"%s\".\n", instanceId) + + // Delete an instance + err = sqlserverflexClient.DeleteInstance(ctx, projectId, instanceId).Execute() + + if err != nil { + fmt.Fprintf(os.Stderr, "Error deleting SQL Server Flex instance: %v\n", err) + } + + _, err = wait.DeleteInstanceWaitHandler(ctx, sqlserverflexClient, projectId, instanceId).WaitWithContext(ctx) + if err != nil { + fmt.Fprintf(os.Stderr, "Error when waiting for SQL Server Flex instance deletion: %v\n", err) + } + + fmt.Printf("Deleted SQL Server Flex instance \"%s\".\n", instanceId) +} diff --git a/go.work b/go.work index 8d3e808b6..49d3244df 100644 --- a/go.work +++ b/go.work @@ -26,6 +26,7 @@ use ( ./examples/secretsmanager ./examples/serviceaccount ./examples/ske + ./examples/sqlserverflex ./examples/waiter ./scripts ./services/argus diff --git a/services/sqlserverflex/go.mod b/services/sqlserverflex/go.mod index 4abca37f1..2abec127f 100644 --- a/services/sqlserverflex/go.mod +++ b/services/sqlserverflex/go.mod @@ -6,5 +6,6 @@ require github.com/stackitcloud/stackit-sdk-go/core v0.12.0 require ( github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/google/go-cmp v0.6.0 github.com/google/uuid v1.6.0 // indirect ) diff --git a/services/sqlserverflex/go.sum b/services/sqlserverflex/go.sum index bf66ecfdf..0967721c8 100644 --- a/services/sqlserverflex/go.sum +++ b/services/sqlserverflex/go.sum @@ -1,6 +1,7 @@ github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/stackitcloud/stackit-sdk-go/core v0.12.0 h1:auIzUUNRuydKOScvpICP4MifGgvOajiDQd+ncGmBL0U= diff --git a/services/sqlserverflex/wait/wait.go b/services/sqlserverflex/wait/wait.go new file mode 100644 index 000000000..2699d3cfc --- /dev/null +++ b/services/sqlserverflex/wait/wait.go @@ -0,0 +1,110 @@ +package wait + +import ( + "context" + "fmt" + "net/http" + "time" + + "github.com/stackitcloud/stackit-sdk-go/core/oapierror" + "github.com/stackitcloud/stackit-sdk-go/core/wait" + "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" +) + +const ( + InstanceStateEmpty = "" + InstanceStateProcessing = "Progressing" + InstanceStateUnknown = "Unknown" + InstanceStateSuccess = "Ready" + InstanceStateFailed = "Failed" +) + +// Interface needed for tests +type APIClientInstanceInterface interface { + GetInstanceExecute(ctx context.Context, projectId, instanceId string) (*sqlserverflex.GetInstanceResponse, error) +} + +// CreateInstanceWaitHandler will wait for instance creation +func CreateInstanceWaitHandler(ctx context.Context, a APIClientInstanceInterface, projectId, instanceId string) *wait.AsyncActionHandler[sqlserverflex.GetInstanceResponse] { + handler := wait.New(func() (waitFinished bool, response *sqlserverflex.GetInstanceResponse, err error) { + s, err := a.GetInstanceExecute(ctx, projectId, instanceId) + if err != nil { + return false, nil, err + } + if s == nil || s.Item == nil || s.Item.Id == nil || *s.Item.Id != instanceId || s.Item.Status == nil { + return false, nil, nil + } + switch *s.Item.Status { + default: + return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Item.Status) + case InstanceStateEmpty: + return false, s, nil + case InstanceStateProcessing: + return false, s, nil + case InstanceStateUnknown: + return false, s, nil + case InstanceStateSuccess: + return true, s, nil + case InstanceStateFailed: + return true, s, fmt.Errorf("create failed for instance with id %s", instanceId) + } + }) + handler.SetTimeout(45 * time.Minute) + handler.SetSleepBeforeWait(5 * time.Second) + return handler +} + +// UpdateInstanceWaitHandler will wait for instance update +func UpdateInstanceWaitHandler(ctx context.Context, a APIClientInstanceInterface, projectId, instanceId string) *wait.AsyncActionHandler[sqlserverflex.GetInstanceResponse] { + handler := wait.New(func() (waitFinished bool, response *sqlserverflex.GetInstanceResponse, err error) { + s, err := a.GetInstanceExecute(ctx, projectId, instanceId) + if err != nil { + return false, nil, err + } + if s == nil || s.Item == nil || s.Item.Id == nil || *s.Item.Id != instanceId || s.Item.Status == nil { + return false, nil, nil + } + switch *s.Item.Status { + default: + return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Item.Status) + case InstanceStateEmpty: + return false, s, nil + case InstanceStateProcessing: + return false, s, nil + case InstanceStateUnknown: + return false, s, nil + case InstanceStateSuccess: + return true, s, nil + case InstanceStateFailed: + return true, s, fmt.Errorf("update failed for instance with id %s", instanceId) + } + }) + handler.SetSleepBeforeWait(2 * time.Second) + handler.SetTimeout(45 * time.Minute) + return handler +} + +// PartialUpdateInstanceWaitHandler will wait for instance update +func PartialUpdateInstanceWaitHandler(ctx context.Context, a APIClientInstanceInterface, projectId, instanceId string) *wait.AsyncActionHandler[sqlserverflex.GetInstanceResponse] { + return UpdateInstanceWaitHandler(ctx, a, projectId, instanceId) +} + +// DeleteInstanceWaitHandler will wait for instance deletion +func DeleteInstanceWaitHandler(ctx context.Context, a APIClientInstanceInterface, projectId, instanceId string) *wait.AsyncActionHandler[struct{}] { + handler := wait.New(func() (waitFinished bool, response *struct{}, err error) { + _, err = a.GetInstanceExecute(ctx, projectId, instanceId) + if err == nil { + return false, nil, nil + } + oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped + if !ok { + return false, nil, fmt.Errorf("could not convert error to oapierror.GenericOpenAPIError") + } + if oapiErr.StatusCode != http.StatusNotFound { + return false, nil, err + } + return true, nil, nil + }) + handler.SetTimeout(15 * time.Minute) + return handler +} diff --git a/services/sqlserverflex/wait/wait_test.go b/services/sqlserverflex/wait/wait_test.go new file mode 100644 index 000000000..f779b4e91 --- /dev/null +++ b/services/sqlserverflex/wait/wait_test.go @@ -0,0 +1,241 @@ +package wait + +import ( + "context" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/stackitcloud/stackit-sdk-go/core/oapierror" + "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" +) + +// Used for testing instance operations +type apiClientInstanceMocked struct { + instanceId string + instanceState string + instanceIsDeleted bool + instanceGetFails bool +} + +func (a *apiClientInstanceMocked) GetInstanceExecute(_ context.Context, _, _ string) (*sqlserverflex.GetInstanceResponse, error) { + if a.instanceGetFails { + return nil, &oapierror.GenericOpenAPIError{ + StatusCode: 500, + } + } + + if a.instanceIsDeleted { + return nil, &oapierror.GenericOpenAPIError{ + StatusCode: 404, + } + } + + return &sqlserverflex.GetInstanceResponse{ + Item: &sqlserverflex.Instance{ + Id: &a.instanceId, + Status: &a.instanceState, + }, + }, nil +} +func TestCreateInstanceWaitHandler(t *testing.T) { + tests := []struct { + desc string + instanceGetFails bool + instanceState string + usersGetErrorStatus int + wantErr bool + wantResp bool + }{ + { + desc: "create_succeeded", + instanceGetFails: false, + instanceState: InstanceStateSuccess, + wantErr: false, + wantResp: true, + }, + { + desc: "create_failed", + instanceGetFails: false, + instanceState: InstanceStateFailed, + wantErr: true, + wantResp: true, + }, + { + desc: "create_failed_2", + instanceGetFails: false, + instanceState: InstanceStateEmpty, + wantErr: true, + wantResp: false, + }, + { + desc: "instance_get_fails", + instanceGetFails: true, + wantErr: true, + wantResp: false, + }, + { + desc: "timeout", + instanceGetFails: false, + instanceState: InstanceStateProcessing, + wantErr: true, + wantResp: false, + }, + } + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + instanceId := "foo-bar" + + apiClient := &apiClientInstanceMocked{ + instanceId: instanceId, + instanceState: tt.instanceState, + instanceGetFails: tt.instanceGetFails, + } + + var wantRes *sqlserverflex.GetInstanceResponse + if tt.wantResp { + wantRes = &sqlserverflex.GetInstanceResponse{ + Item: &sqlserverflex.Instance{ + Id: &instanceId, + Status: &tt.instanceState, + }, + } + } + + handler := CreateInstanceWaitHandler(context.Background(), apiClient, "", instanceId) + + gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * time.Millisecond).WaitWithContext(context.Background()) + + if (err != nil) != tt.wantErr { + t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) + } + if !cmp.Equal(gotRes, wantRes) { + t.Fatalf("handler gotRes = %v, want %v", gotRes, wantRes) + } + }) + } +} + +func TestUpdateInstanceWaitHandler(t *testing.T) { + tests := []struct { + desc string + instanceGetFails bool + instanceState string + wantErr bool + wantResp bool + }{ + { + desc: "update_succeeded", + instanceGetFails: false, + instanceState: InstanceStateSuccess, + wantErr: false, + wantResp: true, + }, + { + desc: "update_failed", + instanceGetFails: false, + instanceState: InstanceStateFailed, + wantErr: true, + wantResp: true, + }, + { + desc: "update_failed_2", + instanceGetFails: false, + instanceState: InstanceStateEmpty, + wantErr: true, + wantResp: false, + }, + { + desc: "get_fails", + instanceGetFails: true, + wantErr: true, + wantResp: false, + }, + { + desc: "timeout", + instanceGetFails: false, + instanceState: InstanceStateProcessing, + wantErr: true, + wantResp: false, + }, + } + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + instanceId := "foo-bar" + + apiClient := &apiClientInstanceMocked{ + instanceId: instanceId, + instanceState: tt.instanceState, + instanceGetFails: tt.instanceGetFails, + } + + var wantRes *sqlserverflex.GetInstanceResponse + if tt.wantResp { + wantRes = &sqlserverflex.GetInstanceResponse{ + Item: &sqlserverflex.Instance{ + Id: &instanceId, + Status: &tt.instanceState, + }, + } + } + + handler := UpdateInstanceWaitHandler(context.Background(), apiClient, "", instanceId) + + gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * time.Millisecond).WaitWithContext(context.Background()) + + if (err != nil) != tt.wantErr { + t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) + } + if !cmp.Equal(gotRes, wantRes) { + t.Fatalf("handler gotRes = %v, want %v", gotRes, wantRes) + } + }) + } +} + +func TestDeleteInstanceWaitHandler(t *testing.T) { + tests := []struct { + desc string + instanceGetFails bool + instanceState string + wantErr bool + }{ + { + desc: "delete_succeeded", + instanceGetFails: false, + instanceState: InstanceStateSuccess, + wantErr: false, + }, + { + desc: "delete_failed", + instanceGetFails: false, + instanceState: InstanceStateFailed, + wantErr: true, + }, + { + desc: "get_fails", + instanceGetFails: true, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + instanceId := "foo-bar" + + apiClient := &apiClientInstanceMocked{ + instanceGetFails: tt.instanceGetFails, + instanceIsDeleted: tt.instanceState == InstanceStateSuccess, + instanceId: instanceId, + instanceState: tt.instanceState, + } + + handler := DeleteInstanceWaitHandler(context.Background(), apiClient, "", instanceId) + + _, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) + + if (err != nil) != tt.wantErr { + t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} From 8973aba4cda2662e5f71b62d57376c6e8ec07305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Fri, 24 May 2024 12:50:27 +0100 Subject: [PATCH 2/5] Speed up mongodb and postgresflex waiter tests --- services/mongodbflex/wait/wait_test.go | 2 +- services/postgresflex/wait/wait_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/mongodbflex/wait/wait_test.go b/services/mongodbflex/wait/wait_test.go index afeea3ca9..9c3d7f44c 100644 --- a/services/mongodbflex/wait/wait_test.go +++ b/services/mongodbflex/wait/wait_test.go @@ -126,7 +126,7 @@ func TestCreateInstanceWaitHandler(t *testing.T) { handler := CreateInstanceWaitHandler(context.Background(), apiClient, "", instanceId) - gotRes, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) + gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * time.Millisecond).WaitWithContext(context.Background()) if (err != nil) != tt.wantErr { t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) diff --git a/services/postgresflex/wait/wait_test.go b/services/postgresflex/wait/wait_test.go index afc55be6e..50cd9e071 100644 --- a/services/postgresflex/wait/wait_test.go +++ b/services/postgresflex/wait/wait_test.go @@ -164,7 +164,7 @@ func TestCreateInstanceWaitHandler(t *testing.T) { handler := CreateInstanceWaitHandler(context.Background(), apiClient, "", instanceId) - gotRes, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) + gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * time.Millisecond).WaitWithContext(context.Background()) if (err != nil) != tt.wantErr { t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) From 26a17825b49929d32e5ddfe2a2faffbb542bb622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Fri, 24 May 2024 12:50:38 +0100 Subject: [PATCH 3/5] Add changelogs --- CHANGELOG.md | 4 +++- services/sqlserverflex/CHANGELOG.md | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c23c532e..8ba14f4a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -Release (2024-XX-XX) +## Release (2024-XX-XX) - `secretsmanager`: [v0.8.0](services/secretsmanager/CHANGELOG.md#v080-2024-05-23) - **Breaking change**: Rename data types for uniformity @@ -20,6 +20,8 @@ Release (2024-XX-XX) - **Feature**: New methods `ExportRecordSets` and `ImportRecordSets` - **Feature**: New methods `RestoreZone` and `RestoreRecordSet` to restore inactive zones and record-sets, respectively - **Feature**: New method `RetrieveZone` to queue a secondary zone for a zone transfer request +- `sqlserverflex`: [v0.2.0](services/sqlserverflex/CHANGELOG.md#v020-2024-05-24) + - **Feature** Waiters for async operations `CreateInstanceWaitHandler`, `UpdateInstanceWaitHandler`, and `DeleteInstanceWaitHandler` ## Release (2024-05-22) diff --git a/services/sqlserverflex/CHANGELOG.md b/services/sqlserverflex/CHANGELOG.md index e0fd57bf9..99e46d245 100644 --- a/services/sqlserverflex/CHANGELOG.md +++ b/services/sqlserverflex/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.2.0 (2024-05-24) + +- **Feature** Waiters for async operations `CreateInstanceWaitHandler`, `UpdateInstanceWaitHandler`, and `DeleteInstanceWaitHandler` + ## v0.1.0 (2024-05-22) -- Manage your STACKIT SQL Server Flex resources: `Instance`, `Flavors`, `Users`, `Databases`, `Backups` +- Manage your STACKIT SQL Server Flex resources: `Instance`, `Flavors`, `Users`, `Databases`, `Backups` From e98075d95b9e36cb3bf66e15f9fad03e7115a84e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Fri, 24 May 2024 14:37:00 +0100 Subject: [PATCH 4/5] Remove example --- examples/sqlserverflex/go.mod | 11 ---- examples/sqlserverflex/go.sum | 9 --- examples/sqlserverflex/sqlserverflex.go | 76 ------------------------- go.work | 1 - 4 files changed, 97 deletions(-) delete mode 100644 examples/sqlserverflex/go.mod delete mode 100644 examples/sqlserverflex/go.sum delete mode 100644 examples/sqlserverflex/sqlserverflex.go diff --git a/examples/sqlserverflex/go.mod b/examples/sqlserverflex/go.mod deleted file mode 100644 index 0b7f769e5..000000000 --- a/examples/sqlserverflex/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/stackitcloud/stackit-sdk-go/examples/sqlserverflex - -go 1.18 - -require github.com/stackitcloud/stackit-sdk-go/core v0.12.0 - -require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0 -) diff --git a/examples/sqlserverflex/go.sum b/examples/sqlserverflex/go.sum deleted file mode 100644 index b07895c19..000000000 --- a/examples/sqlserverflex/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/stackitcloud/stackit-sdk-go/core v0.12.0 h1:auIzUUNRuydKOScvpICP4MifGgvOajiDQd+ncGmBL0U= -github.com/stackitcloud/stackit-sdk-go/core v0.12.0/go.mod h1:mDX1mSTsB3mP+tNBGcFNx6gH1mGBN4T+dVt+lcw7nlw= -github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0 h1:zndnPbQLR9aeJXK7bWomQP1WcZgrzfPpDXlti4v4DP0= -github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex v0.1.0/go.mod h1:27rHZe5pbIuDOdO2aZpUAWoRgOC2UB7rBJfmFnR1pBw= diff --git a/examples/sqlserverflex/sqlserverflex.go b/examples/sqlserverflex/sqlserverflex.go deleted file mode 100644 index 997109b25..000000000 --- a/examples/sqlserverflex/sqlserverflex.go +++ /dev/null @@ -1,76 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - - "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex" - "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex/wait" -) - -func main() { - // Specify the project ID - projectId := "16f49d71-37ad-4137-8b97-44d9c55c4094" - - // Specify instance configuration options - // flavorId := "FLAVOR_ID" - // version := "VERSION" - flavorId := "4.16-Single" - version := "2022" - - ctx := context.Background() - - // Create a new API client, that uses default authentication and configuration - sqlserverflexClient, err := sqlserverflex.NewAPIClient( - config.WithRegion("eu01"), - ) - if err != nil { - fmt.Fprintf(os.Stderr, "Creating API client: %v\n", err) - os.Exit(1) - } - - // Get the MongoDB Flex instances for your project - getInstancesResp, err := sqlserverflexClient.ListInstances(ctx, projectId).Execute() - if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `GetInstances`: %v\n", err) - os.Exit(1) - } - items := *getInstancesResp.Items - fmt.Printf("Number of instances: %v\n", len(items)) - - // Create an instance - createInstancePayload := sqlserverflex.CreateInstancePayload{ - Name: utils.Ptr("my-instance-3"), - FlavorId: utils.Ptr(flavorId), - Version: utils.Ptr(version), - } - instance, err := sqlserverflexClient.CreateInstance(ctx, projectId).CreateInstancePayload(createInstancePayload).Execute() - if err != nil { - fmt.Fprintf(os.Stderr, "Error creating SQL Server Flex instance: %v\n", err) - } - instanceId := *instance.Id - - _, err = wait.CreateInstanceWaitHandler(ctx, sqlserverflexClient, projectId, instanceId).WaitWithContext(ctx) - if err != nil { - fmt.Fprintf(os.Stderr, "Error when waiting for SQL Server Flex instance creation: %v\n", err) - } - - fmt.Printf("Created SQL Server Flex instance \"%s\".\n", instanceId) - - // Delete an instance - err = sqlserverflexClient.DeleteInstance(ctx, projectId, instanceId).Execute() - - if err != nil { - fmt.Fprintf(os.Stderr, "Error deleting SQL Server Flex instance: %v\n", err) - } - - _, err = wait.DeleteInstanceWaitHandler(ctx, sqlserverflexClient, projectId, instanceId).WaitWithContext(ctx) - if err != nil { - fmt.Fprintf(os.Stderr, "Error when waiting for SQL Server Flex instance deletion: %v\n", err) - } - - fmt.Printf("Deleted SQL Server Flex instance \"%s\".\n", instanceId) -} diff --git a/go.work b/go.work index 49d3244df..8d3e808b6 100644 --- a/go.work +++ b/go.work @@ -26,7 +26,6 @@ use ( ./examples/secretsmanager ./examples/serviceaccount ./examples/ske - ./examples/sqlserverflex ./examples/waiter ./scripts ./services/argus From 12e9faed26aa2786f84d8a4f1369c45db8e4310c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Palet?= Date: Fri, 24 May 2024 14:41:36 +0100 Subject: [PATCH 5/5] Adjust tests --- services/sqlserverflex/wait/wait_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/sqlserverflex/wait/wait_test.go b/services/sqlserverflex/wait/wait_test.go index f779b4e91..3012d095b 100644 --- a/services/sqlserverflex/wait/wait_test.go +++ b/services/sqlserverflex/wait/wait_test.go @@ -66,7 +66,7 @@ func TestCreateInstanceWaitHandler(t *testing.T) { instanceGetFails: false, instanceState: InstanceStateEmpty, wantErr: true, - wantResp: false, + wantResp: true, }, { desc: "instance_get_fails", @@ -79,7 +79,7 @@ func TestCreateInstanceWaitHandler(t *testing.T) { instanceGetFails: false, instanceState: InstanceStateProcessing, wantErr: true, - wantResp: false, + wantResp: true, }, } for _, tt := range tests { @@ -143,7 +143,7 @@ func TestUpdateInstanceWaitHandler(t *testing.T) { instanceGetFails: false, instanceState: InstanceStateEmpty, wantErr: true, - wantResp: false, + wantResp: true, }, { desc: "get_fails", @@ -156,7 +156,7 @@ func TestUpdateInstanceWaitHandler(t *testing.T) { instanceGetFails: false, instanceState: InstanceStateProcessing, wantErr: true, - wantResp: false, + wantResp: true, }, } for _, tt := range tests {