Skip to content

Commit a07cfb1

Browse files
committed
Create, Read and Update function
1 parent e232623 commit a07cfb1

File tree

5 files changed

+124
-26
lines changed

5 files changed

+124
-26
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ require (
2828
github.com/nats-io/jwt/v2 v2.7.4
2929
github.com/nats-io/nats.go v1.38.0
3030
github.com/robfig/cron/v3 v3.0.1
31-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250512145715-0fc65cc3636b
31+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250604134054-a06406d42247
3232
github.com/stretchr/testify v1.10.0
3333
golang.org/x/crypto v0.38.0
3434
gopkg.in/dnaeon/go-vcr.v3 v3.2.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN
449449
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
450450
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250512145715-0fc65cc3636b h1:wzu3hPSNK2PPo7OXBzofeS5hOWqnVRP8xqIXom9ufoc=
451451
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250512145715-0fc65cc3636b/go.mod h1:qiGzapFyNPFwBBLJ+hTFykKSnU95n1zL64+o1ubmwf0=
452+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250604134054-a06406d42247 h1:wlIvcSpGl3mGDpQmwrZHnYMIlB7Mwx3bhg151LG22Ws=
453+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33.0.20250604134054-a06406d42247/go.mod h1:qiGzapFyNPFwBBLJ+hTFykKSnU95n1zL64+o1ubmwf0=
452454
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
453455
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
454456
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=

internal/services/file/file.go

Lines changed: 92 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,26 @@ import (
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
88
file "github.com/scaleway/scaleway-sdk-go/api/file/v1alpha1"
99
"github.com/scaleway/scaleway-sdk-go/scw"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
1011
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
1112
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
1213
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
1314
)
1415

15-
func ResourceFile() *schema.Resource {
16+
func ResourceFileSystem() *schema.Resource {
1617
return &schema.Resource{
17-
CreateContext: ResourceFileCreate,
18-
ReadContext: ResourceFileRead,
19-
UpdateContext: ResourceFileUpdate,
20-
DeleteContext: ResourceFileDelete,
18+
CreateContext: ResourceFileSystemCreate,
19+
ReadContext: ResourceFileSystemRead,
20+
UpdateContext: ResourceFileSystemUpdate,
21+
DeleteContext: ResourceFileSystemDelete,
2122
Importer: &schema.ResourceImporter{
2223
StateContext: schema.ImportStatePassthroughContext,
2324
},
2425
Timeouts: &schema.ResourceTimeout{
25-
Create: schema.DefaultTimeout(defaultFileTimeout),
26-
Read: schema.DefaultTimeout(defaultFileTimeout),
27-
Delete: schema.DefaultTimeout(defaultFileTimeout),
28-
Default: schema.DefaultTimeout(defaultFileTimeout),
26+
Create: schema.DefaultTimeout(defaultFileSystemTimeout),
27+
Read: schema.DefaultTimeout(defaultFileSystemTimeout),
28+
Delete: schema.DefaultTimeout(defaultFileSystemTimeout),
29+
Default: schema.DefaultTimeout(defaultFileSystemTimeout),
2930
},
3031
SchemaVersion: 0,
3132
Schema: map[string]*schema.Schema{
@@ -56,7 +57,7 @@ func ResourceFile() *schema.Resource {
5657
Computed: true,
5758
Description: "The Current status of the filesystem (e.g. creating, available, ...)",
5859
},
59-
"number_of_attachements": {
60+
"number_of_attachments": {
6061
Type: schema.TypeInt,
6162
Computed: true,
6263
Description: "The current number of attachments (mounts) that the filesystem has",
@@ -75,18 +76,18 @@ func ResourceFile() *schema.Resource {
7576
}
7677
}
7778

78-
func ResourceFileCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
79-
api, region, err := fileAPIWithZone(d, m)
79+
func ResourceFileSystemCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
80+
api, region, err := fileSystemAPIWithZone(d, m)
8081
if err != nil {
8182
return diag.FromErr(err)
8283
}
8384

8485
req := &file.CreateFileSystemRequest{
85-
Region: region,
86-
Name: types.ExpandOrGenerateString(d.Get("name").(string), "file"),
86+
Region: region,
87+
Name: types.ExpandOrGenerateString(d.Get("name").(string), "file"),
8788
ProjectID: d.Get("project_id").(string),
88-
Size: *types.ExpandUint64Ptr(d.Get("size")),
89-
Tags: types.ExpandStrings(d.Get("tags")),
89+
Size: *types.ExpandUint64Ptr(d.Get("size")),
90+
Tags: types.ExpandStrings(d.Get("tags")),
9091
}
9192

9293
file, err := api.CreateFileSystem(req, scw.WithContext(ctx))
@@ -96,22 +97,91 @@ func ResourceFileCreate(ctx context.Context, d *schema.ResourceData, m interface
9697

9798
d.SetId(regional.NewIDString(region, file.ID))
9899

99-
//TODO waitForFile
100+
_, err = waitForFileSystem(ctx, api, region, file.ID, d.Timeout(schema.TimeoutCreate))
101+
if err != nil {
102+
return diag.FromErr(err)
103+
}
100104

101-
return ResourceFileRead(ctx, d, m)
105+
return ResourceFileSystemRead(ctx, d, m)
102106
}
103107

104-
func ResourceFileRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
108+
func ResourceFileSystemRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
109+
api, region, id, err := NewAPIWithRegionAndID(m, d.Id())
110+
if err != nil {
111+
return diag.FromErr(err)
112+
}
113+
114+
fileSystem, err := waitForFileSystem(ctx, api, region, id, d.Timeout(schema.TimeoutRead))
115+
if err != nil {
116+
if httperrors.Is404(err) {
117+
d.SetId("")
118+
119+
return nil
120+
}
121+
122+
return diag.FromErr(err)
123+
}
124+
125+
_ = d.Set("name", fileSystem.Name)
126+
_ = d.Set("project_id", fileSystem.ProjectID)
127+
_ = d.Set("region", fileSystem.Region)
128+
_ = d.Set("organization_id", fileSystem.OrganizationID)
129+
_ = d.Set("status", fileSystem.Status)
130+
_ = d.Set("size", fileSystem.Size)
131+
_ = d.Set("tags", fileSystem.Tags)
132+
_ = d.Set("created_at", fileSystem.CreatedAt)
133+
_ = d.Set("updated_at", fileSystem.UpdatedAt)
134+
_ = d.Set("number_of_attachments", fileSystem.NumberOfAttachments)
105135

106136
return nil
107137
}
108138

109-
func ResourceFileUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
139+
func ResourceFileSystemUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
140+
api, region, id, err := NewAPIWithRegionAndID(m, d.Id())
141+
if err != nil {
142+
return diag.FromErr(err)
143+
}
144+
145+
fileSystem, err := waitForFileSystem(ctx, api, region, id, d.Timeout(schema.TimeoutUpdate))
146+
if err != nil {
147+
if httperrors.Is404(err) {
148+
d.SetId("")
149+
150+
return nil
151+
}
152+
153+
return diag.FromErr(err)
154+
}
155+
156+
req := &file.UpdateFileSystemRequest{
157+
Region: region,
158+
FilesystemID: fileSystem.ID,
159+
}
160+
161+
if d.HasChange("name") {
162+
req.Name = types.ExpandUpdatedStringPtr(d.Get("name"))
163+
}
164+
165+
// // Region: region to target. If none is passed will use default region from the config.
166+
// Region scw.Region `json:"-"`
167+
168+
// // FilesystemID: UUID of the filesystem.
169+
// FilesystemID string `json:"-"`
170+
171+
// // Name: when defined, is the new name of the filesystem.
172+
// Name *string `json:"name,omitempty"`
173+
174+
// // Size: size in bytes, with a granularity of 100 GB (10^11 bytes).
175+
// // Must be compliant with the minimum (100 GB) and maximum (10 TB) allowed size.
176+
// Size *uint64 `json:"size,omitempty"`
177+
178+
// // Tags: list of tags assigned to the filesystem.
179+
// Tags *[]string `json:"tags,omitempty"`
110180

111-
return ResourceFileRead(ctx, d, m)
181+
return ResourceFileSystemRead(ctx, d, m)
112182
}
113183

114-
func ResourceFileDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
184+
func ResourceFileSystemDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
115185

116186
return nil
117187
}

internal/services/file/helpers_file.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import (
1111
)
1212

1313
const (
14-
defaultFileTimeout = 5 * time.Minute
15-
defaultFileRetryInterval = 5 * time.Second
14+
defaultFileSystemTimeout = 5 * time.Minute
15+
defaultFileSystemRetryInterval = 5 * time.Second
1616
)
1717

18-
func fileAPIWithZone(d *schema.ResourceData, m interface{}) (*file.API, scw.Region, error) {
18+
func fileSystemAPIWithZone(d *schema.ResourceData, m interface{}) (*file.API, scw.Region, error) {
1919
fileAPI := file.NewAPI(meta.ExtractScwClient(m))
2020

2121
region, err := meta.ExtractRegion(d, m)

internal/services/file/waiter.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package file
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
file "github.com/scaleway/scaleway-sdk-go/api/file/v1alpha1"
8+
"github.com/scaleway/scaleway-sdk-go/scw"
9+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/transport"
10+
)
11+
12+
func waitForFileSystem(ctx context.Context, fileAPI *file.API, region scw.Region, id string, timeout time.Duration) (*file.FileSystem, error) {
13+
retryInterval := defaultFileSystemRetryInterval
14+
if transport.DefaultWaitRetryInterval != nil {
15+
retryInterval = *transport.DefaultWaitRetryInterval
16+
}
17+
18+
fileSystem, err := fileAPI.WaitForFileSystem(&file.WaitForFileSystemRequest{
19+
FileSystemID: id,
20+
Region: region,
21+
Timeout: scw.TimeDurationPtr(timeout),
22+
RetryInterval: &retryInterval,
23+
}, scw.WithContext(ctx))
24+
25+
return fileSystem, err
26+
}

0 commit comments

Comments
 (0)