Skip to content

Commit 34c7ba0

Browse files
committed
refactor ResolveRegionAndID
1 parent c561f01 commit 34c7ba0

File tree

6 files changed

+52
-33
lines changed

6 files changed

+52
-33
lines changed

internal/locality/regional/ids.go

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package regional
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"strings"
78

9+
"github.com/hashicorp/terraform-plugin-log/tflog"
810
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
911
"github.com/scaleway/scaleway-sdk-go/scw"
1012
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality"
@@ -85,48 +87,65 @@ func ParseID(regionalID string) (region scw.Region, id string, err error) {
8587
}
8688

8789
func ResolveRegionAndID(
90+
ctx context.Context,
8891
d *schema.ResourceData,
8992
fallbackDefaultRegion func(*schema.ResourceData) (scw.Region, error),
9093
) (scw.Region, string, error) {
91-
if identity, err := d.Identity(); err == nil && identity != nil {
94+
identity, err := d.Identity()
95+
if err != nil {
96+
tflog.Warn(ctx, fmt.Sprintf("failed to read identity from ResourceData: %v", err))
97+
} else if identity != nil {
9298
if v := identity.Get("id"); v != nil {
93-
ID, _ := v.(string)
94-
if ID != "" {
99+
id, _ := v.(string)
100+
if id != "" {
95101
if rv := identity.Get("region"); rv != nil {
96102
if rstr, ok := rv.(string); ok && rstr != "" {
97-
return scw.Region(rstr), ID, nil
103+
return scw.Region(rstr), id, nil
98104
}
99105
}
100106

101107
if sid := d.Id(); sid != "" {
102-
if rFromState, _, err := ParseID(sid); err == nil && rFromState != "" {
103-
return rFromState, ID, nil
108+
regionFromState, _, err := ParseID(sid)
109+
if err != nil {
110+
tflog.Warn(ctx, fmt.Sprintf("failed to parse region from state ID %q: %v", sid, err))
111+
} else if regionFromState != "" {
112+
return regionFromState, id, nil
104113
}
105114
}
106115

107116
if fallbackDefaultRegion != nil {
108-
if region, err := fallbackDefaultRegion(d); err == nil && region != "" {
109-
return region, ID, nil
117+
region, err := fallbackDefaultRegion(d)
118+
if err != nil {
119+
tflog.Warn(ctx, fmt.Sprintf("fallbackDefaultRegion error for ID %q: %v", id, err))
120+
} else if region != "" {
121+
return region, id, nil
110122
}
111123
}
112124

113-
return "", "", fmt.Errorf("cannot resolve region for identity (id=%q)", ID)
125+
return "", "", fmt.Errorf("cannot resolve region for identity (id=%q)", id)
114126
}
115127
}
116128
}
117129

118-
if sid := d.Id(); sid != "" {
119-
region, ID, err := ParseID(sid)
120-
if err != nil {
121-
return "", "", err
122-
}
130+
sid := d.Id()
131+
if sid == "" {
132+
tflog.Error(ctx, "cannot resolve identity: both identity.id and state ID are empty")
123133

124-
if ID == "" {
125-
return "", "", fmt.Errorf("empty id parsed from state ID %q", sid)
126-
}
134+
return "", "", errors.New("cannot resolve identity: both identity.id and state ID are empty")
135+
}
136+
137+
region, id, err := ParseID(sid)
138+
if err != nil {
139+
tflog.Error(ctx, fmt.Sprintf("failed to parse region/ID from state ID %q: %v", sid, err))
140+
141+
return "", "", err
142+
}
143+
144+
if id == "" {
145+
tflog.Error(ctx, fmt.Sprintf("empty ID parsed from state ID %q", sid))
127146

128-
return region, ID, nil
147+
return "", "", fmt.Errorf("empty ID parsed from state ID %q", sid)
129148
}
130149

131-
return "", "", errors.New("cannot resolve identity: both identity.id and state ID are empty")
150+
return region, id, nil
132151
}

internal/services/vpc/acl.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func ResourceVPCACLCreate(ctx context.Context, d *schema.ResourceData, m any) di
159159
}
160160

161161
func ResourceVPCACLRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
162-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
162+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
163163
if err != nil {
164164
return diag.FromErr(err)
165165
}
@@ -186,7 +186,7 @@ func ResourceVPCACLRead(ctx context.Context, d *schema.ResourceData, m any) diag
186186
}
187187

188188
func ResourceVPCACLUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
189-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
189+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
190190
if err != nil {
191191
return diag.FromErr(err)
192192
}
@@ -216,7 +216,7 @@ func ResourceVPCACLUpdate(ctx context.Context, d *schema.ResourceData, m any) di
216216
}
217217

218218
func ResourceVPCACLDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
219-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
219+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
220220
if err != nil {
221221
return diag.FromErr(err)
222222
}

internal/services/vpc/helpers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ func NewAPIWithRegionAndID(m any, id string) (*vpc.API, scw.Region, string, erro
4343
return vpcAPI, region, ID, err
4444
}
4545

46-
func NewAPIWithRegionAndIDFromState(m any, d *schema.ResourceData) (
46+
func NewAPIWithRegionAndIDFromState(ctx context.Context, m any, d *schema.ResourceData) (
4747
*vpc.API,
4848
scw.Region,
4949
string,
5050
error,
5151
) {
5252
vpcAPI := vpc.NewAPI(meta.ExtractScwClient(m))
5353

54-
region, ID, err := regional.ResolveRegionAndID(d, func(d *schema.ResourceData) (scw.Region, error) {
54+
region, ID, err := regional.ResolveRegionAndID(ctx, d, func(d *schema.ResourceData) (scw.Region, error) {
5555
_, provRegion, err := vpcAPIWithRegion(d, m)
5656

5757
return provRegion, err

internal/services/vpc/private_network.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ func ResourceVPCPrivateNetworkCreate(ctx context.Context, d *schema.ResourceData
264264
}
265265

266266
func ResourceVPCPrivateNetworkRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
267-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
267+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
268268
if err != nil {
269269
return diag.FromErr(err)
270270
}
@@ -313,7 +313,7 @@ func ResourceVPCPrivateNetworkRead(ctx context.Context, d *schema.ResourceData,
313313
}
314314

315315
func ResourceVPCPrivateNetworkUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
316-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
316+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
317317
if err != nil {
318318
return diag.FromErr(err)
319319
}
@@ -333,7 +333,7 @@ func ResourceVPCPrivateNetworkUpdate(ctx context.Context, d *schema.ResourceData
333333
}
334334

335335
func ResourceVPCPrivateNetworkDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
336-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
336+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
337337
if err != nil {
338338
return diag.FromErr(err)
339339
}

internal/services/vpc/route.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func ResourceRouteCreate(ctx context.Context, d *schema.ResourceData, m any) dia
145145
}
146146

147147
func ResourceRouteRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
148-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
148+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
149149
if err != nil {
150150
return diag.FromErr(err)
151151
}
@@ -192,7 +192,7 @@ func ResourceRouteRead(ctx context.Context, d *schema.ResourceData, m any) diag.
192192
}
193193

194194
func ResourceRouteUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
195-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
195+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
196196
if err != nil {
197197
return diag.FromErr(err)
198198
}
@@ -250,7 +250,7 @@ func ResourceRouteUpdate(ctx context.Context, d *schema.ResourceData, m any) dia
250250
}
251251

252252
func ResourceRouteDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
253-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
253+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
254254
if err != nil {
255255
return diag.FromErr(err)
256256
}

internal/services/vpc/vpc.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func ResourceVPCCreate(ctx context.Context, d *schema.ResourceData, m any) diag.
145145
}
146146

147147
func ResourceVPCRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
148-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
148+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
149149
if err != nil {
150150
return diag.FromErr(err)
151151
}
@@ -187,7 +187,7 @@ func ResourceVPCRead(ctx context.Context, d *schema.ResourceData, m any) diag.Di
187187
}
188188

189189
func ResourceVPCUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
190-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
190+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
191191
if err != nil {
192192
return diag.FromErr(err)
193193
}
@@ -246,7 +246,7 @@ func ResourceVPCUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.
246246
}
247247

248248
func ResourceVPCDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
249-
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(m, d)
249+
vpcAPI, region, ID, err := NewAPIWithRegionAndIDFromState(ctx, m, d)
250250
if err != nil {
251251
return diag.FromErr(err)
252252
}

0 commit comments

Comments
 (0)