Skip to content

Commit f06e855

Browse files
authored
chore(dns): use new multi API version support SDK (#1293)
relates to STACKITSDK-366
1 parent 46d4e65 commit f06e855

9 files changed

Lines changed: 349 additions & 329 deletions

File tree

stackit/internal/services/dns/dns_acc_test.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import (
1515
"github.com/hashicorp/terraform-plugin-testing/terraform"
1616
core_config "github.com/stackitcloud/stackit-sdk-go/core/config"
1717
"github.com/stackitcloud/stackit-sdk-go/core/utils"
18-
"github.com/stackitcloud/stackit-sdk-go/services/dns"
19-
"github.com/stackitcloud/stackit-sdk-go/services/dns/wait"
18+
dns "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api"
19+
20+
"github.com/stackitcloud/stackit-sdk-go/services/dns/v1api/wait"
2021
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
2122
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
2223
)
@@ -532,22 +533,22 @@ func testAccCheckDnsDestroy(s *terraform.State) error {
532533
zonesToDestroy = append(zonesToDestroy, zoneId)
533534
}
534535

535-
zonesResp, err := client.ListZones(ctx, testutil.ProjectId).ActiveEq(true).Execute()
536+
zonesResp, err := client.DefaultAPI.ListZones(ctx, testutil.ProjectId).ActiveEq(true).Execute()
536537
if err != nil {
537538
return fmt.Errorf("getting zonesResp: %w", err)
538539
}
539540

540-
zones := *zonesResp.Zones
541+
zones := zonesResp.Zones
541542
for i := range zones {
542-
id := *zones[i].Id
543+
id := zones[i].Id
543544
if utils.Contains(zonesToDestroy, id) {
544-
_, err := client.DeleteZoneExecute(ctx, testutil.ProjectId, id)
545+
_, err := client.DefaultAPI.DeleteZone(ctx, testutil.ProjectId, id).Execute()
545546
if err != nil {
546-
return fmt.Errorf("destroying zone %s during CheckDestroy: %w", *zones[i].Id, err)
547+
return fmt.Errorf("destroying zone %s during CheckDestroy: %w", zones[i].Id, err)
547548
}
548-
_, err = wait.DeleteZoneWaitHandler(ctx, client, testutil.ProjectId, id).WaitWithContext(ctx)
549+
_, err = wait.DeleteZoneWaitHandler(ctx, client.DefaultAPI, testutil.ProjectId, id).WaitWithContext(ctx)
549550
if err != nil {
550-
return fmt.Errorf("destroying zone %s during CheckDestroy: waiting for deletion %w", *zones[i].Id, err)
551+
return fmt.Errorf("destroying zone %s during CheckDestroy: waiting for deletion %w", zones[i].Id, err)
551552
}
552553
}
553554
}

stackit/internal/services/dns/recordset/datasource.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net/http"
77

8+
"github.com/stackitcloud/stackit-sdk-go/services/dns/v1api/wait"
89
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
910
dnsUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/dns/utils"
1011

@@ -13,7 +14,7 @@ import (
1314
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1415
"github.com/hashicorp/terraform-plugin-framework/types"
1516
"github.com/hashicorp/terraform-plugin-log/tflog"
16-
"github.com/stackitcloud/stackit-sdk-go/services/dns"
17+
dns "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api"
1718
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1819
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils"
1920
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate"
@@ -100,7 +101,7 @@ func (d *recordSetDataSource) Schema(_ context.Context, _ datasource.SchemaReque
100101
Computed: true,
101102
ElementType: types.StringType,
102103
},
103-
"ttl": schema.Int64Attribute{
104+
"ttl": schema.Int32Attribute{
104105
Description: "Time to live. E.g. 3600",
105106
Computed: true,
106107
},
@@ -145,7 +146,7 @@ func (d *recordSetDataSource) Read(ctx context.Context, req datasource.ReadReque
145146
ctx = tflog.SetField(ctx, "project_id", projectId)
146147
ctx = tflog.SetField(ctx, "zone_id", zoneId)
147148
ctx = tflog.SetField(ctx, "record_set_id", recordSetId)
148-
recordSetResp, err := d.client.GetRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
149+
recordSetResp, err := d.client.DefaultAPI.GetRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
149150
if err != nil {
150151
utils.LogError(
151152
ctx,
@@ -163,7 +164,7 @@ func (d *recordSetDataSource) Read(ctx context.Context, req datasource.ReadReque
163164

164165
ctx = core.LogResponse(ctx)
165166

166-
if recordSetResp != nil && recordSetResp.Rrset.State != nil && *recordSetResp.Rrset.State == dns.RECORDSETSTATE_DELETE_SUCCEEDED {
167+
if recordSetResp != nil && recordSetResp.Rrset.State == wait.RECORDSETSTATE_DELETE_SUCCEEDED {
167168
resp.State.RemoveResource(ctx)
168169
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading record set", "Record set was deleted successfully")
169170
return

stackit/internal/services/dns/recordset/resource.go

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"fmt"
66
"strings"
77

8-
"github.com/hashicorp/terraform-plugin-framework-validators/int64validator"
8+
"github.com/hashicorp/terraform-plugin-framework-validators/int32validator"
99
"github.com/hashicorp/terraform-plugin-framework-validators/listvalidator"
1010
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
1111
"github.com/hashicorp/terraform-plugin-framework/resource"
@@ -16,8 +16,8 @@ import (
1616
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1717
"github.com/hashicorp/terraform-plugin-framework/types"
1818
"github.com/hashicorp/terraform-plugin-log/tflog"
19-
"github.com/stackitcloud/stackit-sdk-go/services/dns"
20-
"github.com/stackitcloud/stackit-sdk-go/services/dns/wait"
19+
dns "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api"
20+
"github.com/stackitcloud/stackit-sdk-go/services/dns/v1api/wait"
2121
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
2222
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
2323
dnsUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/dns/utils"
@@ -41,7 +41,7 @@ type Model struct {
4141
Comment types.String `tfsdk:"comment"`
4242
Name types.String `tfsdk:"name"`
4343
Records types.List `tfsdk:"records"`
44-
TTL types.Int64 `tfsdk:"ttl"`
44+
TTL types.Int32 `tfsdk:"ttl"`
4545
Type types.String `tfsdk:"type"`
4646
Error types.String `tfsdk:"error"`
4747
State types.String `tfsdk:"state"`
@@ -144,13 +144,13 @@ func (r *recordSetResource) Schema(_ context.Context, _ resource.SchemaRequest,
144144
listvalidator.ValueStringsAre(validate.RecordSet()),
145145
},
146146
},
147-
"ttl": schema.Int64Attribute{
147+
"ttl": schema.Int32Attribute{
148148
Description: "Time to live. E.g. 3600",
149149
Optional: true,
150150
Computed: true,
151-
Validators: []validator.Int64{
152-
int64validator.AtLeast(60),
153-
int64validator.AtMost(99999999),
151+
Validators: []validator.Int32{
152+
int32validator.AtLeast(60),
153+
int32validator.AtMost(99999999),
154154
},
155155
},
156156
"type": schema.StringAttribute{
@@ -214,8 +214,8 @@ func (r *recordSetResource) Create(ctx context.Context, req resource.CreateReque
214214
return
215215
}
216216
// Create new recordset
217-
recordSetResp, err := r.client.CreateRecordSet(ctx, projectId, zoneId).CreateRecordSetPayload(*payload).Execute()
218-
if err != nil || recordSetResp.Rrset == nil || recordSetResp.Rrset.Id == nil {
217+
recordSetResp, err := r.client.DefaultAPI.CreateRecordSet(ctx, projectId, zoneId).CreateRecordSetPayload(*payload).Execute()
218+
if err != nil || recordSetResp.Rrset.Id == "" {
219219
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating record set", fmt.Sprintf("Calling API: %v", err))
220220
return
221221
}
@@ -226,13 +226,13 @@ func (r *recordSetResource) Create(ctx context.Context, req resource.CreateReque
226226
ctx = utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]any{
227227
"project_id": projectId,
228228
"zone_id": zoneId,
229-
"record_set_id": *recordSetResp.Rrset.Id,
229+
"record_set_id": recordSetResp.Rrset.Id,
230230
})
231231
if resp.Diagnostics.HasError() {
232232
return
233233
}
234234

235-
waitResp, err := wait.CreateRecordSetWaitHandler(ctx, r.client, projectId, zoneId, *recordSetResp.Rrset.Id).WaitWithContext(ctx)
235+
waitResp, err := wait.CreateRecordSetWaitHandler(ctx, r.client.DefaultAPI, projectId, zoneId, recordSetResp.Rrset.Id).WaitWithContext(ctx)
236236
if err != nil {
237237
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating record set", fmt.Sprintf("Instance creation waiting: %v", err))
238238
return
@@ -271,12 +271,12 @@ func (r *recordSetResource) Read(ctx context.Context, req resource.ReadRequest,
271271
ctx = tflog.SetField(ctx, "zone_id", zoneId)
272272
ctx = tflog.SetField(ctx, "record_set_id", recordSetId)
273273

274-
recordSetResp, err := r.client.GetRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
274+
recordSetResp, err := r.client.DefaultAPI.GetRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
275275
if err != nil {
276276
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading record set", fmt.Sprintf("Calling API: %v", err))
277277
return
278278
}
279-
if recordSetResp != nil && recordSetResp.Rrset.State != nil && *recordSetResp.Rrset.State == dns.RECORDSETSTATE_DELETE_SUCCEEDED {
279+
if recordSetResp != nil && recordSetResp.Rrset.State == wait.RECORDSETSTATE_DELETE_SUCCEEDED {
280280
resp.State.RemoveResource(ctx)
281281
return
282282
}
@@ -325,15 +325,15 @@ func (r *recordSetResource) Update(ctx context.Context, req resource.UpdateReque
325325
return
326326
}
327327
// Update recordset
328-
_, err = r.client.PartialUpdateRecordSet(ctx, projectId, zoneId, recordSetId).PartialUpdateRecordSetPayload(*payload).Execute()
328+
_, err = r.client.DefaultAPI.PartialUpdateRecordSet(ctx, projectId, zoneId, recordSetId).PartialUpdateRecordSetPayload(*payload).Execute()
329329
if err != nil {
330330
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating record set", err.Error())
331331
return
332332
}
333333

334334
ctx = core.LogResponse(ctx)
335335

336-
waitResp, err := wait.PartialUpdateRecordSetWaitHandler(ctx, r.client, projectId, zoneId, recordSetId).WaitWithContext(ctx)
336+
waitResp, err := wait.PartialUpdateRecordSetWaitHandler(ctx, r.client.DefaultAPI, projectId, zoneId, recordSetId).WaitWithContext(ctx)
337337
if err != nil {
338338
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating record set", fmt.Sprintf("Instance update waiting: %v", err))
339339
return
@@ -372,14 +372,14 @@ func (r *recordSetResource) Delete(ctx context.Context, req resource.DeleteReque
372372
ctx = tflog.SetField(ctx, "record_set_id", recordSetId)
373373

374374
// Delete existing record set
375-
_, err := r.client.DeleteRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
375+
_, err := r.client.DefaultAPI.DeleteRecordSet(ctx, projectId, zoneId, recordSetId).Execute()
376376
if err != nil {
377377
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting record set", fmt.Sprintf("Calling API: %v", err))
378378
}
379379

380380
ctx = core.LogResponse(ctx)
381381

382-
_, err = wait.DeleteRecordSetWaitHandler(ctx, r.client, projectId, zoneId, recordSetId).WaitWithContext(ctx)
382+
_, err = wait.DeleteRecordSetWaitHandler(ctx, r.client.DefaultAPI, projectId, zoneId, recordSetId).WaitWithContext(ctx)
383383
if err != nil {
384384
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting record set", fmt.Sprintf("Instance deletion waiting: %v", err))
385385
return
@@ -408,7 +408,7 @@ func (r *recordSetResource) ImportState(ctx context.Context, req resource.Import
408408
}
409409

410410
func mapFields(ctx context.Context, recordSetResp *dns.RecordSetResponse, model *Model) error {
411-
if recordSetResp == nil || recordSetResp.Rrset == nil {
411+
if recordSetResp == nil {
412412
return fmt.Errorf("response input is nil")
413413
}
414414
if model == nil {
@@ -419,8 +419,8 @@ func mapFields(ctx context.Context, recordSetResp *dns.RecordSetResponse, model
419419
var recordSetId string
420420
if model.RecordSetId.ValueString() != "" {
421421
recordSetId = model.RecordSetId.ValueString()
422-
} else if recordSet.Id != nil {
423-
recordSetId = *recordSet.Id
422+
} else if recordSet.Id != "" {
423+
recordSetId = recordSet.Id
424424
} else {
425425
return fmt.Errorf("record set id not present")
426426
}
@@ -430,8 +430,8 @@ func mapFields(ctx context.Context, recordSetResp *dns.RecordSetResponse, model
430430
} else {
431431
respRecords := []string{}
432432

433-
for _, record := range *recordSet.Records {
434-
respRecords = append(respRecords, *record.Content)
433+
for _, record := range recordSet.Records {
434+
respRecords = append(respRecords, record.Content)
435435
}
436436

437437
modelRecords, err := utils.ListValuetoStringSlice(model.Records)
@@ -451,17 +451,17 @@ func mapFields(ctx context.Context, recordSetResp *dns.RecordSetResponse, model
451451
model.Id = utils.BuildInternalTerraformId(
452452
model.ProjectId.ValueString(), model.ZoneId.ValueString(), recordSetId,
453453
)
454-
model.RecordSetId = types.StringPointerValue(recordSet.Id)
454+
model.RecordSetId = types.StringValue(recordSet.Id)
455455
model.Active = types.BoolPointerValue(recordSet.Active)
456456
model.Comment = types.StringPointerValue(recordSet.Comment)
457457
model.Error = types.StringPointerValue(recordSet.Error)
458458
if model.Name.IsNull() || model.Name.IsUnknown() {
459-
model.Name = types.StringPointerValue(recordSet.Name)
459+
model.Name = types.StringValue(recordSet.Name)
460460
}
461-
model.FQDN = types.StringPointerValue(recordSet.Name)
462-
model.State = types.StringValue(string(recordSet.GetState()))
463-
model.TTL = types.Int64PointerValue(recordSet.Ttl)
464-
model.Type = types.StringValue(string(recordSet.GetType()))
461+
model.FQDN = types.StringValue(recordSet.Name)
462+
model.State = types.StringValue(recordSet.State)
463+
model.TTL = types.Int32Value(recordSet.Ttl)
464+
model.Type = types.StringValue(recordSet.Type)
465465
return nil
466466
}
467467

@@ -477,16 +477,16 @@ func toCreatePayload(model *Model) (*dns.CreateRecordSetPayload, error) {
477477
return nil, fmt.Errorf("expected record at index %d to be of type %T, got %T", i, types.String{}, record)
478478
}
479479
records = append(records, dns.RecordPayload{
480-
Content: conversion.StringValueToPointer(recordString),
480+
Content: recordString.ValueString(),
481481
})
482482
}
483483

484484
return &dns.CreateRecordSetPayload{
485485
Comment: conversion.StringValueToPointer(model.Comment),
486-
Name: conversion.StringValueToPointer(model.Name),
487-
Records: &records,
488-
Ttl: conversion.Int64ValueToPointer(model.TTL),
489-
Type: dns.CreateRecordSetPayloadGetTypeAttributeType(conversion.StringValueToPointer(model.Type)),
486+
Name: model.Name.ValueString(),
487+
Records: records,
488+
Ttl: conversion.Int32ValueToPointer(model.TTL),
489+
Type: model.Type.ValueString(),
490490
}, nil
491491
}
492492

@@ -502,14 +502,14 @@ func toUpdatePayload(model *Model) (*dns.PartialUpdateRecordSetPayload, error) {
502502
return nil, fmt.Errorf("expected record at index %d to be of type %T, got %T", i, types.String{}, record)
503503
}
504504
records = append(records, dns.RecordPayload{
505-
Content: conversion.StringValueToPointer(recordString),
505+
Content: recordString.ValueString(),
506506
})
507507
}
508508

509509
return &dns.PartialUpdateRecordSetPayload{
510510
Comment: conversion.StringValueToPointer(model.Comment),
511511
Name: conversion.StringValueToPointer(model.Name),
512-
Records: &records,
513-
Ttl: conversion.Int64ValueToPointer(model.TTL),
512+
Records: records,
513+
Ttl: conversion.Int32ValueToPointer(model.TTL),
514514
}, nil
515515
}

0 commit comments

Comments
 (0)