diff --git a/go.mod b/go.mod index 32f15e7b9..aea7df7bb 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/stackitcloud/stackit-sdk-go/services/cdn v1.13.0 github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1 github.com/stackitcloud/stackit-sdk-go/services/edge v0.7.0 - github.com/stackitcloud/stackit-sdk-go/services/git v0.10.3 + github.com/stackitcloud/stackit-sdk-go/services/git v0.11.0 github.com/stackitcloud/stackit-sdk-go/services/iaas v1.3.5 github.com/stackitcloud/stackit-sdk-go/services/kms v1.3.2 github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.8.0 diff --git a/go.sum b/go.sum index 5dfdc9ecc..a55f6a280 100644 --- a/go.sum +++ b/go.sum @@ -165,8 +165,8 @@ github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1 h1:VfszhFq/Snsd0Lnfl github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1/go.mod h1:gBv6YkB3Xf3c0ZXg2GwtWY8zExwGPF/Ag114XiiERxg= github.com/stackitcloud/stackit-sdk-go/services/edge v0.7.0 h1:DNBiHWQEWXHSbaZBmnXb+CaPXX1uVsSfp4FTHoH4wrM= github.com/stackitcloud/stackit-sdk-go/services/edge v0.7.0/go.mod h1:CfqSEGCW0b5JlijCwtUT1kfjThmQ5jXX47TWrdD5rTU= -github.com/stackitcloud/stackit-sdk-go/services/git v0.10.3 h1:VIjkSofZz9utOOkBdNZCIb07P/JdKc1kHV1P8Rq9dLc= -github.com/stackitcloud/stackit-sdk-go/services/git v0.10.3/go.mod h1:EJk1Ss9GTel2NPIu/w3+x9XcQcEd2k3ibea5aQDzVhQ= +github.com/stackitcloud/stackit-sdk-go/services/git v0.11.0 h1:siKBCYl7BwR5S25Y4SwUAX6eFTXSCkQ+8JIQEqyKIXo= +github.com/stackitcloud/stackit-sdk-go/services/git v0.11.0/go.mod h1:QKy74hhLVZKXItw3y+elF8s9QezFqpEsAUmaqvNDzYs= github.com/stackitcloud/stackit-sdk-go/services/iaas v1.3.5 h1:W57+XRa8wTLsi5CV9Tqa7mGgt/PvlRM//RurXSmvII8= github.com/stackitcloud/stackit-sdk-go/services/iaas v1.3.5/go.mod h1:lTWjW57eAq1bwfM6nsNinhoBr3MHFW/GaFasdAsYfDM= github.com/stackitcloud/stackit-sdk-go/services/kms v1.3.2 h1:2ulSL2IkIAKND59eAjbEhVkOoBMyvm48ojwz1a3t0U0= diff --git a/stackit/internal/services/git/git_acc_test.go b/stackit/internal/services/git/git_acc_test.go index a4a87d00d..774ee8ec4 100644 --- a/stackit/internal/services/git/git_acc_test.go +++ b/stackit/internal/services/git/git_acc_test.go @@ -5,6 +5,7 @@ import ( _ "embed" "fmt" "maps" + "slices" "strings" "testing" @@ -13,8 +14,7 @@ import ( "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" stackitSdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/git" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil" ) @@ -321,20 +321,17 @@ func testAccCheckGitInstanceDestroy(s *terraform.State) error { instancesToDestroy = append(instancesToDestroy, instanceId) } - instancesResp, err := client.ListInstances(ctx, testutil.ProjectId).Execute() + instancesResp, err := client.DefaultAPI.ListInstances(ctx, testutil.ProjectId).Execute() if err != nil { return fmt.Errorf("getting git instances: %w", err) } - gitInstances := *instancesResp.Instances + gitInstances := instancesResp.Instances for i := range gitInstances { - if gitInstances[i].Id == nil { - continue - } - if utils.Contains(instancesToDestroy, *gitInstances[i].Id) { - err := client.DeleteInstance(ctx, testutil.ProjectId, *gitInstances[i].Id).Execute() + if slices.Contains(instancesToDestroy, gitInstances[i].Id) { + err := client.DefaultAPI.DeleteInstance(ctx, testutil.ProjectId, gitInstances[i].Id).Execute() if err != nil { - return fmt.Errorf("destroying git instance %s during CheckDestroy: %w", *gitInstances[i].Id, err) + return fmt.Errorf("destroying git instance %s during CheckDestroy: %w", gitInstances[i].Id, err) } } } diff --git a/stackit/internal/services/git/instance/datasource.go b/stackit/internal/services/git/instance/datasource.go index 65aad54b1..6b8de6db2 100644 --- a/stackit/internal/services/git/instance/datasource.go +++ b/stackit/internal/services/git/instance/datasource.go @@ -15,7 +15,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/services/git" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/features" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate" @@ -139,7 +139,7 @@ func (g *gitDataSource) Read(ctx context.Context, req datasource.ReadRequest, re instanceId := model.InstanceId.ValueString() // Read the current git instance via id - gitInstanceResp, err := g.client.GetInstance(ctx, projectId, instanceId).Execute() + gitInstanceResp, err := g.client.DefaultAPI.GetInstance(ctx, projectId, instanceId).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError ok := errors.As(err, &oapiErr) diff --git a/stackit/internal/services/git/instance/resource.go b/stackit/internal/services/git/instance/resource.go index eca38f669..f2cbe8ef5 100644 --- a/stackit/internal/services/git/instance/resource.go +++ b/stackit/internal/services/git/instance/resource.go @@ -18,8 +18,8 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/services/git" - "github.com/stackitcloud/stackit-sdk-go/services/git/wait" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" + "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi/wait" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/features" @@ -209,7 +209,7 @@ func (g *gitResource) Create(ctx context.Context, req resource.CreateRequest, re } // Create the new git instance via the API client. - gitInstanceResp, err := g.client.CreateInstance(ctx, projectId). + gitInstanceResp, err := g.client.DefaultAPI.CreateInstance(ctx, projectId). CreateInstancePayload(payload). Execute() if err != nil { @@ -219,12 +219,7 @@ func (g *gitResource) Create(ctx context.Context, req resource.CreateRequest, re ctx = core.LogResponse(ctx) - if gitInstanceResp.Id == nil { - core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating git instance", "Got empty git instance id") - return - } - - gitInstanceId := *gitInstanceResp.Id + gitInstanceId := gitInstanceResp.Id // Write id attributes to state before polling via the wait handler - just in case anything goes wrong during the wait handler ctx = utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]any{ "project_id": projectId, @@ -234,7 +229,7 @@ func (g *gitResource) Create(ctx context.Context, req resource.CreateRequest, re return } - _, err = wait.CreateGitInstanceWaitHandler(ctx, g.client, projectId, gitInstanceId).WaitWithContext(ctx) + _, err = wait.CreateGitInstanceWaitHandler(ctx, g.client.DefaultAPI, projectId, gitInstanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating git instance", fmt.Sprintf("Git instance creation waiting: %v", err)) return @@ -272,7 +267,7 @@ func (g *gitResource) Read(ctx context.Context, req resource.ReadRequest, resp * instanceId := model.InstanceId.ValueString() // Read the current git instance via id - gitInstanceResp, err := g.client.GetInstance(ctx, projectId, instanceId).Execute() + gitInstanceResp, err := g.client.DefaultAPI.GetInstance(ctx, projectId, instanceId).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError ok := errors.As(err, &oapiErr) @@ -327,7 +322,7 @@ func (g *gitResource) Delete(ctx context.Context, req resource.DeleteRequest, re ctx = tflog.SetField(ctx, "instance_id", instanceId) // Call API to delete the existing git instance. - err := g.client.DeleteInstance(ctx, projectId, instanceId).Execute() + err := g.client.DefaultAPI.DeleteInstance(ctx, projectId, instanceId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting git instance", fmt.Sprintf("Calling API: %v", err)) return @@ -335,7 +330,7 @@ func (g *gitResource) Delete(ctx context.Context, req resource.DeleteRequest, re ctx = core.LogResponse(ctx) - _, err = wait.DeleteGitInstanceWaitHandler(ctx, g.client, projectId, instanceId).WaitWithContext(ctx) + _, err = wait.DeleteGitInstanceWaitHandler(ctx, g.client.DefaultAPI, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error waiting for instance deletion", fmt.Sprintf("Instance deletion waiting: %v", err)) return @@ -375,13 +370,9 @@ func mapFields(ctx context.Context, resp *git.Instance, model *Model) error { return fmt.Errorf("model input is nil") } - if resp.Id == nil { - return fmt.Errorf("git instance id not present") - } - aclList := types.ListNull(types.StringType) var diags diag.Diagnostics - if resp.Acl != nil && len(*resp.Acl) > 0 { + if len(resp.Acl) > 0 { aclList, diags = types.ListValueFrom(ctx, types.StringType, resp.Acl) if diags.HasError() { return fmt.Errorf("mapping ACL: %w", core.DiagsToError(diags)) @@ -389,20 +380,20 @@ func mapFields(ctx context.Context, resp *git.Instance, model *Model) error { } model.Created = types.StringNull() - if resp.Created != nil && resp.Created.String() != "" { + if resp.Created.String() != "" { model.Created = types.StringValue(resp.Created.String()) } // Build the ID by combining the project ID and instance id and assign the model's fields. - model.Id = utils.BuildInternalTerraformId(model.ProjectId.ValueString(), *resp.Id) + model.Id = utils.BuildInternalTerraformId(model.ProjectId.ValueString(), resp.Id) model.ACL = aclList - model.ConsumedDisk = types.StringPointerValue(resp.ConsumedDisk) - model.ConsumedObjectStorage = types.StringPointerValue(resp.ConsumedObjectStorage) - model.Flavor = types.StringPointerValue(resp.Flavor) - model.InstanceId = types.StringPointerValue(resp.Id) - model.Name = types.StringPointerValue(resp.Name) - model.Url = types.StringPointerValue(resp.Url) - model.Version = types.StringPointerValue(resp.Version) + model.ConsumedDisk = types.StringValue(resp.ConsumedDisk) + model.ConsumedObjectStorage = types.StringValue(resp.ConsumedObjectStorage) + model.Flavor = types.StringValue(resp.Flavor) + model.InstanceId = types.StringValue(resp.Id) + model.Name = types.StringValue(resp.Name) + model.Url = types.StringValue(resp.Url) + model.Version = types.StringValue(resp.Version) return nil } @@ -416,7 +407,7 @@ func toCreatePayload(ctx context.Context, model *Model) (git.CreateInstancePaylo } payload := git.CreateInstancePayload{ - Name: model.Name.ValueStringPointer(), + Name: model.Name.ValueString(), } if !(model.ACL.IsNull() || model.ACL.IsUnknown()) { @@ -424,12 +415,12 @@ func toCreatePayload(ctx context.Context, model *Model) (git.CreateInstancePaylo aclDiags := model.ACL.ElementsAs(ctx, &acl, false) diags.Append(aclDiags...) if !aclDiags.HasError() { - payload.Acl = &acl + payload.Acl = acl } } if !(model.Flavor.IsNull() || model.Flavor.IsUnknown()) { - payload.Flavor = git.CreateInstancePayloadGetFlavorAttributeType(model.Flavor.ValueStringPointer()) + payload.Flavor = model.Flavor.ValueStringPointer() } return payload, diags diff --git a/stackit/internal/services/git/instance/resource_test.go b/stackit/internal/services/git/instance/resource_test.go index 93de087f1..242bb6456 100644 --- a/stackit/internal/services/git/instance/resource_test.go +++ b/stackit/internal/services/git/instance/resource_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/git" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" ) var ( @@ -34,8 +34,8 @@ func TestMapFields(t *testing.T) { { description: "minimal_input_name_only", input: &git.Instance{ - Id: utils.Ptr(testInstanceId), - Name: utils.Ptr("git-min-instance"), + Id: testInstanceId, + Name: "git-min-instance", }, expected: &Model{ Id: types.StringValue(fmt.Sprintf("%s,%s", testProjectId, testInstanceId)), @@ -43,27 +43,27 @@ func TestMapFields(t *testing.T) { InstanceId: types.StringValue(testInstanceId), Name: types.StringValue("git-min-instance"), ACL: types.ListNull(types.StringType), - Flavor: types.StringNull(), - Url: types.StringNull(), - Version: types.StringNull(), - Created: types.StringNull(), - ConsumedDisk: types.StringNull(), - ConsumedObjectStorage: types.StringNull(), + Flavor: types.StringValue(""), + Url: types.StringValue(""), + Version: types.StringValue(""), + Created: types.StringValue("0001-01-01 00:00:00 +0000 UTC"), + ConsumedDisk: types.StringValue(""), + ConsumedObjectStorage: types.StringValue(""), }, isValid: true, }, { description: "full_input_with_acl_and_flavor", input: &git.Instance{ - Acl: &[]string{"192.168.0.0/24"}, - ConsumedDisk: utils.Ptr("1.00 GB"), - ConsumedObjectStorage: utils.Ptr("2.00 GB"), - Created: &createdTime, - Flavor: utils.Ptr("git-100"), - Id: utils.Ptr(testInstanceId), - Name: utils.Ptr("git-full-instance"), - Url: utils.Ptr("https://git-full-instance.git.onstackit.cloud"), - Version: utils.Ptr("v1.9.1"), + Acl: []string{"192.168.0.0/24"}, + ConsumedDisk: "1.00 GB", + ConsumedObjectStorage: "2.00 GB", + Created: createdTime, + Flavor: "git-100", + Id: testInstanceId, + Name: "git-full-instance", + Url: "https://git-full-instance.git.onstackit.cloud", + Version: "v1.9.1", }, expected: &Model{ Id: types.StringValue(fmt.Sprintf("%s,%s", testProjectId, testInstanceId)), @@ -83,9 +83,9 @@ func TestMapFields(t *testing.T) { { description: "empty_acls", input: &git.Instance{ - Id: utils.Ptr(testInstanceId), - Name: utils.Ptr("git-empty-acl"), - Acl: &[]string{}, + Id: testInstanceId, + Name: "git-empty-acl", + Acl: []string{}, }, expected: &Model{ Id: types.StringValue(fmt.Sprintf("%s,%s", testProjectId, testInstanceId)), @@ -93,12 +93,12 @@ func TestMapFields(t *testing.T) { InstanceId: types.StringValue(testInstanceId), Name: types.StringValue("git-empty-acl"), ACL: types.ListNull(types.StringType), - Flavor: types.StringNull(), - Url: types.StringNull(), - Version: types.StringNull(), - Created: types.StringNull(), - ConsumedDisk: types.StringNull(), - ConsumedObjectStorage: types.StringNull(), + Flavor: types.StringValue(""), + Url: types.StringValue(""), + Version: types.StringValue(""), + Created: types.StringValue("0001-01-01 00:00:00 +0000 UTC"), + ConsumedDisk: types.StringValue(""), + ConsumedObjectStorage: types.StringValue(""), }, isValid: true, }, @@ -108,20 +108,6 @@ func TestMapFields(t *testing.T) { expected: nil, isValid: false, }, - { - description: "empty_instance", - input: &git.Instance{}, - expected: nil, - isValid: false, - }, - { - description: "missing_id", - input: &git.Instance{ - Name: utils.Ptr("git-missing-id"), - }, - expected: nil, - isValid: false, - }, } for _, tt := range tests { @@ -162,7 +148,7 @@ func TestToCreatePayload(t *testing.T) { ACL: types.ListNull(types.StringType), }, expected: git.CreateInstancePayload{ - Name: utils.Ptr("example-instance"), + Name: "example-instance", }, expectError: false, }, @@ -177,9 +163,9 @@ func TestToCreatePayload(t *testing.T) { }), }, expected: git.CreateInstancePayload{ - Name: utils.Ptr("my-instance"), - Flavor: git.INSTANCEFLAVOR__100.Ptr(), - Acl: &[]string{"10.0.0.1", "10.0.0.2"}, + Name: "my-instance", + Flavor: utils.Ptr("git-100"), + Acl: []string{"10.0.0.1", "10.0.0.2"}, }, expectError: false, }, @@ -191,9 +177,9 @@ func TestToCreatePayload(t *testing.T) { ACL: types.ListValueMust(types.StringType, []attr.Value{}), }, expected: git.CreateInstancePayload{ - Name: utils.Ptr("my-instance"), - Flavor: git.INSTANCEFLAVOR__100.Ptr(), - Acl: &[]string{}, + Name: "my-instance", + Flavor: utils.Ptr("git-100"), + Acl: []string{}, }, expectError: false, }, diff --git a/stackit/internal/services/git/utils/util.go b/stackit/internal/services/git/utils/util.go index e55f2351e..f01cfb5b8 100644 --- a/stackit/internal/services/git/utils/util.go +++ b/stackit/internal/services/git/utils/util.go @@ -6,7 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/services/git" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils" ) diff --git a/stackit/internal/services/git/utils/util_test.go b/stackit/internal/services/git/utils/util_test.go index 92c812023..1f69f510d 100644 --- a/stackit/internal/services/git/utils/util_test.go +++ b/stackit/internal/services/git/utils/util_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" sdkClients "github.com/stackitcloud/stackit-sdk-go/core/clients" "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/services/git" + git "github.com/stackitcloud/stackit-sdk-go/services/git/v1betaapi" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils" )