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
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down
17 changes: 7 additions & 10 deletions stackit/internal/services/git/git_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
_ "embed"
"fmt"
"maps"
"slices"
"strings"
"testing"

Expand All @@ -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"
)
Expand Down Expand Up @@ -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)
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions stackit/internal/services/git/instance/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand Down
51 changes: 21 additions & 30 deletions stackit/internal/services/git/instance/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 {
Expand All @@ -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,
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -327,15 +322,15 @@ 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
}

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
Expand Down Expand Up @@ -375,34 +370,30 @@ 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))
}
}

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
}
Expand All @@ -416,20 +407,20 @@ 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()) {
var acl []string
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
Expand Down
82 changes: 34 additions & 48 deletions stackit/internal/services/git/instance/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -34,36 +34,36 @@ 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)),
ProjectId: types.StringValue(testProjectId),
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)),
Expand All @@ -83,22 +83,22 @@ 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)),
ProjectId: types.StringValue(testProjectId),
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,
},
Expand All @@ -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 {
Expand Down Expand Up @@ -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,
},
Expand All @@ -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,
},
Expand All @@ -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,
},
Expand Down
2 changes: 1 addition & 1 deletion stackit/internal/services/git/utils/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down
2 changes: 1 addition & 1 deletion stackit/internal/services/git/utils/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down
Loading