@@ -2,13 +2,18 @@ package scaleway
2
2
3
3
import (
4
4
"context"
5
+ "time"
5
6
6
7
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7
8
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8
9
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
9
10
"github.com/scaleway/scaleway-sdk-go/scw"
10
11
)
11
12
13
+ const (
14
+ retryInstancePrivateNICInterval = 30 * time .Second
15
+ )
16
+
12
17
func resourceScalewayInstancePrivateNIC () * schema.Resource {
13
18
return & schema.Resource {
14
19
CreateContext : resourceScalewayInstancePrivateNICCreate ,
@@ -18,7 +23,9 @@ func resourceScalewayInstancePrivateNIC() *schema.Resource {
18
23
Importer : & schema.ResourceImporter {
19
24
StateContext : schema .ImportStatePassthroughContext ,
20
25
},
21
-
26
+ Timeouts : & schema.ResourceTimeout {
27
+ Default : schema .DefaultTimeout (defaultInstancePrivateNICWaitTimeout ),
28
+ },
22
29
Schema : map [string ]* schema.Schema {
23
30
"server_id" : {
24
31
Type : schema .TypeString ,
@@ -60,6 +67,17 @@ func resourceScalewayInstancePrivateNICCreate(ctx context.Context, d *schema.Res
60
67
return diag .FromErr (err )
61
68
}
62
69
70
+ _ , err = instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
71
+ ServerID : res .PrivateNic .ServerID ,
72
+ PrivateNicID : res .PrivateNic .ID ,
73
+ Zone : zone ,
74
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutCreate )),
75
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
76
+ }, scw .WithContext (ctx ))
77
+ if err != nil {
78
+ return diag .FromErr (err )
79
+ }
80
+
63
81
d .SetId (
64
82
newZonedNestedIDString (
65
83
zone ,
@@ -82,9 +100,11 @@ func resourceScalewayInstancePrivateNICRead(ctx context.Context, d *schema.Resou
82
100
}
83
101
84
102
res , err := instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
85
- ServerID : outerID ,
86
- PrivateNicID : innerID ,
87
- Zone : zone ,
103
+ ServerID : outerID ,
104
+ PrivateNicID : innerID ,
105
+ Zone : zone ,
106
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutRead )),
107
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
88
108
}, scw .WithContext (ctx ))
89
109
if err != nil {
90
110
if is404Error (err ) {
@@ -115,9 +135,11 @@ func resourceScalewayInstancePrivateNICUpdate(ctx context.Context, d *schema.Res
115
135
116
136
if d .HasChanges ("private_network_id" , "server_id" ) {
117
137
_ , err := instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
118
- ServerID : outerID ,
119
- PrivateNicID : innerID ,
120
- Zone : zone ,
138
+ ServerID : outerID ,
139
+ PrivateNicID : innerID ,
140
+ Zone : zone ,
141
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutUpdate )),
142
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
121
143
}, scw .WithContext (ctx ))
122
144
if err != nil {
123
145
return diag .FromErr (err )
@@ -133,6 +155,18 @@ func resourceScalewayInstancePrivateNICUpdate(ctx context.Context, d *schema.Res
133
155
if err != nil && ! is404Error (err ) {
134
156
return diag .FromErr (err )
135
157
}
158
+
159
+ _ , err = instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
160
+ ServerID : outerID ,
161
+ PrivateNicID : innerID ,
162
+ Zone : zone ,
163
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutDelete )),
164
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
165
+ }, scw .WithContext (ctx ))
166
+ if err != nil && ! is404Error (err ) {
167
+ return diag .FromErr (err )
168
+ }
169
+
136
170
// create the new one
137
171
createPrivateNICRequest := & instance.CreatePrivateNICRequest {
138
172
Zone : zone ,
@@ -148,6 +182,17 @@ func resourceScalewayInstancePrivateNICUpdate(ctx context.Context, d *schema.Res
148
182
return diag .FromErr (err )
149
183
}
150
184
185
+ _ , err = instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
186
+ ServerID : res .PrivateNic .ServerID ,
187
+ PrivateNicID : res .PrivateNic .ID ,
188
+ Zone : zone ,
189
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutUpdate )),
190
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
191
+ }, scw .WithContext (ctx ))
192
+ if err != nil {
193
+ return diag .FromErr (err )
194
+ }
195
+
151
196
d .SetId (
152
197
newZonedNestedIDString (
153
198
zone ,
@@ -171,9 +216,11 @@ func resourceScalewayInstancePrivateNICDelete(ctx context.Context, d *schema.Res
171
216
}
172
217
173
218
_ , err = instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
174
- ServerID : outerID ,
175
- PrivateNicID : innerID ,
176
- Zone : zone ,
219
+ ServerID : outerID ,
220
+ PrivateNicID : innerID ,
221
+ Zone : zone ,
222
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutRead )),
223
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
177
224
}, scw .WithContext (ctx ))
178
225
if err != nil {
179
226
return diag .FromErr (err )
@@ -189,5 +236,16 @@ func resourceScalewayInstancePrivateNICDelete(ctx context.Context, d *schema.Res
189
236
return diag .FromErr (err )
190
237
}
191
238
239
+ _ , err = instanceAPI .WaitForPrivateNIC (& instance.WaitForPrivateNICRequest {
240
+ ServerID : outerID ,
241
+ PrivateNicID : innerID ,
242
+ Zone : zone ,
243
+ Timeout : scw .TimeDurationPtr (d .Timeout (schema .TimeoutDelete )),
244
+ RetryInterval : scw .TimeDurationPtr (retryInstancePrivateNICInterval ),
245
+ }, scw .WithContext (ctx ))
246
+ if err != nil && ! is404Error (err ) {
247
+ return diag .FromErr (err )
248
+ }
249
+
192
250
return nil
193
251
}
0 commit comments