Skip to content
Merged
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ require (
github.com/stackitcloud/stackit-sdk-go/services/redis v0.28.1
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.20.0
github.com/stackitcloud/stackit-sdk-go/services/scf v0.7.0
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.14.3
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0
github.com/stackitcloud/stackit-sdk-go/services/serverupdate v1.5.0
github.com/stackitcloud/stackit-sdk-go/services/serviceaccount v0.12.0
github.com/stackitcloud/stackit-sdk-go/services/serviceenablement v1.4.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,8 @@ github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0 h1:6gDKTx
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.17.0/go.mod h1:vSWUMTsMbtniEo1I+eCsjCOTODR4iproNAeqG3vr/4I=
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8 h1:LLyANBzE8sQa0/49tQBqq4sVLhNgwdqCeQm76srJHWw=
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8/go.mod h1:/bmg57XZu+bGczzcoumrukiGMPGzI2mOyTT4BVIQUBs=
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0 h1:OGAaEbuoxTZnsWbtFmhkvdvCCV/RpYuE3ALQXmRyOOc=
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.6.0/go.mod h1:h2fhcXRiSFP9yJXY8eb37e+2PhMW11g1GB8LL/EQ1aU=
github.com/stackitcloud/stackit-sdk-go/services/serverupdate v1.5.0 h1:4MYNb3VQjVnVPfJ9xhDbSQgoSkxQZJ0tsv9N7O43/RI=
github.com/stackitcloud/stackit-sdk-go/services/serverupdate v1.5.0/go.mod h1:iVCh5xZW/DHBMnJW4Zrw8KMhQIBRAETcnTPi5bbcQIE=
github.com/stackitcloud/stackit-sdk-go/services/serviceaccount v0.12.0 h1:l1EDIlXce2C8JcbBDHVa6nZ4SjPTqmnALTgrhms+NKI=
Expand Down
4 changes: 2 additions & 2 deletions stackit/internal/services/serverbackup/enable/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/stackitcloud/stackit-sdk-go/services/serverbackup"
serverbackup "github.com/stackitcloud/stackit-sdk-go/services/serverbackup/v2api"

"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
Expand Down Expand Up @@ -130,7 +130,7 @@ func (d *serverBackupEnableDataSource) Read(ctx context.Context, req datasource.
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "region", region)

serviceResp, err := d.client.GetServiceResource(ctx, projectId, serverId, region).Execute()
serviceResp, err := d.client.DefaultAPI.GetServiceResource(ctx, projectId, serverId, region).Execute()
if err != nil {
utils.LogError(
ctx,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

"github.com/google/go-cmp/cmp"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/stackitcloud/stackit-sdk-go/services/serverbackup"
serverbackup "github.com/stackitcloud/stackit-sdk-go/services/serverbackup/v2api"
)

func TestDataMapFields(t *testing.T) {
Expand Down
10 changes: 5 additions & 5 deletions stackit/internal/services/serverbackup/enable/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
"github.com/stackitcloud/stackit-sdk-go/services/serverbackup"
serverbackup "github.com/stackitcloud/stackit-sdk-go/services/serverbackup/v2api"

"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
Expand Down Expand Up @@ -189,7 +189,7 @@ func (r *serverBackupEnableResource) Create(ctx context.Context, req resource.Cr
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "region", region)

err := r.client.EnableServiceResource(ctx, projectId, serverId, region).EnableServiceResourcePayload(serverbackup.EnableServiceResourcePayload{}).Execute()
err := r.client.DefaultAPI.EnableServiceResource(ctx, projectId, serverId, region).EnableServiceResourcePayload(serverbackup.EnableServiceResourcePayload{}).Execute()
if err != nil {
var oapiErr *oapierror.GenericOpenAPIError
ok := errors.As(err, &oapiErr)
Expand All @@ -201,7 +201,7 @@ func (r *serverBackupEnableResource) Create(ctx context.Context, req resource.Cr
tflog.Info(ctx, "Server backup is already enabled for this server. Please check duplicate resources.")
}

serviceResp, err := r.client.GetServiceResource(ctx, projectId, serverId, region).Execute()
serviceResp, err := r.client.DefaultAPI.GetServiceResource(ctx, projectId, serverId, region).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading server backup enable", fmt.Sprintf("Calling API: %v", err))
return
Expand Down Expand Up @@ -243,7 +243,7 @@ func (r *serverBackupEnableResource) Read(ctx context.Context, req resource.Read
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "region", region)

serviceResp, err := r.client.GetServiceResource(ctx, projectId, serverId, region).Execute()
serviceResp, err := r.client.DefaultAPI.GetServiceResource(ctx, projectId, serverId, region).Execute()
if err != 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 && oapiErr.StatusCode == http.StatusNotFound {
Expand Down Expand Up @@ -297,7 +297,7 @@ func (r *serverBackupEnableResource) Delete(ctx context.Context, req resource.De
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "region", region)

err := r.client.DisableServiceResource(ctx, projectId, serverId, region).Execute()
err := r.client.DefaultAPI.DisableServiceResource(ctx, projectId, serverId, region).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server backup enable", fmt.Sprintf("Calling API: %v", err))
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/google/go-cmp/cmp"
"github.com/hashicorp/terraform-plugin-framework/types"

"github.com/stackitcloud/stackit-sdk-go/services/serverbackup"
serverbackup "github.com/stackitcloud/stackit-sdk-go/services/serverbackup/v2api"
)

func TestMapFields(t *testing.T) {
Expand Down
93 changes: 45 additions & 48 deletions stackit/internal/services/serverbackup/schedule/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ import (
"strconv"
"strings"

"github.com/hashicorp/terraform-plugin-framework-validators/int32validator"
"github.com/hashicorp/terraform-plugin-framework-validators/listvalidator"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/int32planmodifier"

serverbackupUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/serverbackup/utils"

"github.com/hashicorp/terraform-plugin-framework-validators/int64validator"
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
Expand All @@ -30,7 +30,7 @@ import (
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate"

"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
"github.com/stackitcloud/stackit-sdk-go/services/serverbackup"
serverbackup "github.com/stackitcloud/stackit-sdk-go/services/serverbackup/v2api"
)

// Ensure the implementation satisfies the expected interfaces.
Expand All @@ -45,7 +45,7 @@ type Model struct {
ID types.String `tfsdk:"id"`
ProjectId types.String `tfsdk:"project_id"`
ServerId types.String `tfsdk:"server_id"`
BackupScheduleId types.Int64 `tfsdk:"backup_schedule_id"`
BackupScheduleId types.Int32 `tfsdk:"backup_schedule_id"`
Name types.String `tfsdk:"name"`
Rrule types.String `tfsdk:"rrule"`
Enabled types.Bool `tfsdk:"enabled"`
Expand All @@ -56,7 +56,7 @@ type Model struct {
// scheduleBackupPropertiesModel maps schedule backup_properties data
type scheduleBackupPropertiesModel struct {
BackupName types.String `tfsdk:"name"`
RetentionPeriod types.Int64 `tfsdk:"retention_period"`
RetentionPeriod types.Int32 `tfsdk:"retention_period"`
VolumeIds types.List `tfsdk:"volume_ids"`
}

Expand Down Expand Up @@ -145,14 +145,14 @@ func (r *scheduleResource) Schema(_ context.Context, _ resource.SchemaRequest, r
stringvalidator.LengthBetween(1, 255),
},
},
"backup_schedule_id": schema.Int64Attribute{
"backup_schedule_id": schema.Int32Attribute{
Description: "Backup schedule ID.",
Computed: true,
PlanModifiers: []planmodifier.Int64{
int64planmodifier.UseStateForUnknown(),
PlanModifiers: []planmodifier.Int32{
int32planmodifier.UseStateForUnknown(),
},
Validators: []validator.Int64{
int64validator.AtLeast(1),
Validators: []validator.Int32{
int32validator.AtLeast(1),
},
},
"project_id": schema.StringAttribute{
Expand Down Expand Up @@ -209,10 +209,10 @@ func (r *scheduleResource) Schema(_ context.Context, _ resource.SchemaRequest, r
"name": schema.StringAttribute{
Required: true,
},
"retention_period": schema.Int64Attribute{
"retention_period": schema.Int32Attribute{
Required: true,
Validators: []validator.Int64{
int64validator.AtLeast(1),
Validators: []validator.Int32{
int32validator.AtLeast(1),
},
},
},
Expand Down Expand Up @@ -268,15 +268,15 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating server backup schedule", fmt.Sprintf("Creating API payload: %v", err))
return
}
scheduleResp, err := r.client.CreateBackupSchedule(ctx, projectId, serverId, region).CreateBackupSchedulePayload(*payload).Execute()
scheduleResp, err := r.client.DefaultAPI.CreateBackupSchedule(ctx, projectId, serverId, region).CreateBackupSchedulePayload(*payload).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating server backup schedule", fmt.Sprintf("Calling API: %v", err))
return
}

ctx = core.LogResponse(ctx)

ctx = tflog.SetField(ctx, "backup_schedule_id", *scheduleResp.Id)
ctx = tflog.SetField(ctx, "backup_schedule_id", scheduleResp.Id)

// Map response body to schema
err = mapFields(ctx, scheduleResp, &model, region)
Expand Down Expand Up @@ -305,15 +305,15 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r

projectId := model.ProjectId.ValueString()
serverId := model.ServerId.ValueString()
backupScheduleId := model.BackupScheduleId.ValueInt64()
backupScheduleId := model.BackupScheduleId.ValueInt32()
region := r.providerData.GetRegionWithOverride(model.Region)

ctx = tflog.SetField(ctx, "project_id", projectId)
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "backup_schedule_id", backupScheduleId)
ctx = tflog.SetField(ctx, "region", region)

scheduleResp, err := r.client.GetBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(backupScheduleId, 10)).Execute()
scheduleResp, err := r.client.DefaultAPI.GetBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(int64(backupScheduleId), 10)).Execute()
if err != 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 && oapiErr.StatusCode == http.StatusNotFound {
Expand Down Expand Up @@ -355,7 +355,7 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques

projectId := model.ProjectId.ValueString()
serverId := model.ServerId.ValueString()
backupScheduleId := model.BackupScheduleId.ValueInt64()
backupScheduleId := model.BackupScheduleId.ValueInt32()
region := r.providerData.GetRegionWithOverride(model.Region)

ctx = tflog.SetField(ctx, "project_id", projectId)
Expand All @@ -370,7 +370,7 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques
return
}

scheduleResp, err := r.client.UpdateBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(backupScheduleId, 10)).UpdateBackupSchedulePayload(*payload).Execute()
scheduleResp, err := r.client.DefaultAPI.UpdateBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(int64(backupScheduleId), 10)).UpdateBackupSchedulePayload(*payload).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server backup schedule", fmt.Sprintf("Calling API: %v", err))
return
Expand Down Expand Up @@ -405,15 +405,15 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques

projectId := model.ProjectId.ValueString()
serverId := model.ServerId.ValueString()
backupScheduleId := model.BackupScheduleId.ValueInt64()
backupScheduleId := model.BackupScheduleId.ValueInt32()
region := r.providerData.GetRegionWithOverride(model.Region)

ctx = tflog.SetField(ctx, "project_id", projectId)
ctx = tflog.SetField(ctx, "server_id", serverId)
ctx = tflog.SetField(ctx, "backup_schedule_id", backupScheduleId)
ctx = tflog.SetField(ctx, "region", region)

err := r.client.DeleteBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(backupScheduleId, 10)).Execute()
err := r.client.DefaultAPI.DeleteBackupSchedule(ctx, projectId, serverId, region, strconv.FormatInt(int64(backupScheduleId), 10)).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server backup schedule", fmt.Sprintf("Calling API: %v", err))
return
Expand Down Expand Up @@ -466,18 +466,15 @@ func mapFields(ctx context.Context, schedule *serverbackup.BackupSchedule, model
if model == nil {
return fmt.Errorf("model input is nil")
}
if schedule.Id == nil {
return fmt.Errorf("response id is nil")
}

model.BackupScheduleId = types.Int64PointerValue(schedule.Id)
model.BackupScheduleId = types.Int32Value(schedule.Id)
model.ID = utils.BuildInternalTerraformId(
model.ProjectId.ValueString(), region, model.ServerId.ValueString(),
strconv.FormatInt(model.BackupScheduleId.ValueInt64(), 10),
strconv.FormatInt(int64(model.BackupScheduleId.ValueInt32()), 10),
)
model.Name = types.StringPointerValue(schedule.Name)
model.Rrule = types.StringPointerValue(schedule.Rrule)
model.Enabled = types.BoolPointerValue(schedule.Enabled)
model.Name = types.StringValue(schedule.Name)
model.Rrule = types.StringValue(schedule.Rrule)
model.Enabled = types.BoolValue(schedule.Enabled)
if schedule.BackupProperties == nil {
model.BackupProperties = nil
return nil
Expand All @@ -494,7 +491,7 @@ func mapFields(ctx context.Context, schedule *serverbackup.BackupSchedule, model
}
}

respVolIds := *schedule.BackupProperties.VolumeIds
respVolIds := schedule.BackupProperties.VolumeIds
reconciledVolIds := utils.ReconcileStringSlices(modelVolIds, respVolIds)

var diags diag.Diagnostics
Expand All @@ -504,8 +501,8 @@ func mapFields(ctx context.Context, schedule *serverbackup.BackupSchedule, model
}
}
model.BackupProperties = &scheduleBackupPropertiesModel{
BackupName: types.StringValue(*schedule.BackupProperties.Name),
RetentionPeriod: types.Int64Value(*schedule.BackupProperties.RetentionPeriod),
BackupName: types.StringValue(schedule.BackupProperties.Name),
RetentionPeriod: types.Int32Value(schedule.BackupProperties.RetentionPeriod),
VolumeIds: volIds,
}
model.Region = types.StringValue(region)
Expand All @@ -521,7 +518,7 @@ func (r *scheduleResource) enableBackupsService(ctx context.Context, model *Mode
region := r.providerData.GetRegionWithOverride(model.Region)

tflog.Debug(ctx, "Enabling server backup service")
request := r.client.EnableServiceResource(ctx, projectId, serverId, region).
request := r.client.DefaultAPI.EnableServiceResource(ctx, projectId, serverId, region).
EnableServiceResourcePayload(serverbackup.EnableServiceResourcePayload{})

if err := request.Execute(); err != nil {
Expand All @@ -546,16 +543,16 @@ func (r *scheduleResource) disableBackupsService(ctx context.Context, model *Mod
region := r.providerData.GetRegionWithOverride(model.Region)

tflog.Debug(ctx, "Checking for existing backups")
backups, err := r.client.ListBackups(ctx, projectId, serverId, region).Execute()
backups, err := r.client.DefaultAPI.ListBackups(ctx, projectId, serverId, region).Execute()
if err != nil {
return fmt.Errorf("list backups: %w", err)
}
if len(*backups.Items) > 0 {
if len(backups.Items) > 0 {
tflog.Debug(ctx, "Backups found - will not disable server backup service")
return nil
}

err = r.client.DisableServiceResourceExecute(ctx, projectId, serverId, region)
err = r.client.DefaultAPI.DisableServiceResource(ctx, projectId, serverId, region).Execute()
if err != nil {
return fmt.Errorf("disable server backup service: %w", err)
}
Expand Down Expand Up @@ -583,15 +580,15 @@ func toCreatePayload(model *Model) (*serverbackup.CreateBackupSchedulePayload, e
ids = nil
}
backupProperties = serverbackup.BackupProperties{
Name: conversion.StringValueToPointer(model.BackupProperties.BackupName),
RetentionPeriod: conversion.Int64ValueToPointer(model.BackupProperties.RetentionPeriod),
VolumeIds: &ids,
Name: model.BackupProperties.BackupName.ValueString(),
RetentionPeriod: model.BackupProperties.RetentionPeriod.ValueInt32(),
VolumeIds: ids,
}
}
return &serverbackup.CreateBackupSchedulePayload{
Enabled: conversion.BoolValueToPointer(model.Enabled),
Name: conversion.StringValueToPointer(model.Name),
Rrule: conversion.StringValueToPointer(model.Rrule),
Enabled: model.Enabled.ValueBool(),
Name: model.Name.ValueString(),
Rrule: model.Rrule.ValueString(),
BackupProperties: &backupProperties,
}, nil
}
Expand All @@ -616,16 +613,16 @@ func toUpdatePayload(model *Model) (*serverbackup.UpdateBackupSchedulePayload, e
ids = nil
}
backupProperties = serverbackup.BackupProperties{
Name: conversion.StringValueToPointer(model.BackupProperties.BackupName),
RetentionPeriod: conversion.Int64ValueToPointer(model.BackupProperties.RetentionPeriod),
VolumeIds: &ids,
Name: model.BackupProperties.BackupName.ValueString(),
RetentionPeriod: model.BackupProperties.RetentionPeriod.ValueInt32(),
VolumeIds: ids,
}
}

return &serverbackup.UpdateBackupSchedulePayload{
Enabled: conversion.BoolValueToPointer(model.Enabled),
Name: conversion.StringValueToPointer(model.Name),
Rrule: conversion.StringValueToPointer(model.Rrule),
Enabled: model.Enabled.ValueBool(),
Name: model.Name.ValueString(),
Rrule: model.Rrule.ValueString(),
BackupProperties: &backupProperties,
}, nil
}
Loading
Loading