@@ -92,6 +92,23 @@ func resourceScalewayLbIPRead(ctx context.Context, d *schema.ResourceData, meta
92
92
return diag .FromErr (err )
93
93
}
94
94
95
+ // check lb state if it is attached
96
+ if res .LBID != nil {
97
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
98
+ Zone : zone ,
99
+ LBID : * res .LBID ,
100
+ Timeout : scw .TimeDurationPtr (defaultInstanceServerWaitTimeout ),
101
+ RetryInterval : scw .TimeDurationPtr (DefaultWaitLBRetryInterval ),
102
+ }, scw .WithContext (ctx ))
103
+ if err != nil {
104
+ if is403Error (err ) {
105
+ d .SetId ("" )
106
+ return nil
107
+ }
108
+ return diag .FromErr (err )
109
+ }
110
+ }
111
+
95
112
// set the region from zone
96
113
region , err := zone .Region ()
97
114
if err != nil {
@@ -115,6 +132,35 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
115
132
return diag .FromErr (err )
116
133
}
117
134
135
+ res , err := lbAPI .GetIP (& lb.ZonedAPIGetIPRequest {
136
+ Zone : zone ,
137
+ IPID : ID ,
138
+ }, scw .WithContext (ctx ))
139
+
140
+ if err != nil {
141
+ if is404Error (err ) || is403Error (err ) {
142
+ d .SetId ("" )
143
+ return nil
144
+ }
145
+ return diag .FromErr (err )
146
+ }
147
+
148
+ if res .LBID != nil {
149
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
150
+ Zone : zone ,
151
+ LBID : * res .LBID ,
152
+ Timeout : scw .TimeDurationPtr (defaultInstanceServerWaitTimeout ),
153
+ RetryInterval : scw .TimeDurationPtr (DefaultWaitLBRetryInterval ),
154
+ }, scw .WithContext (ctx ))
155
+ if err != nil {
156
+ if is403Error (err ) {
157
+ d .SetId ("" )
158
+ return nil
159
+ }
160
+ return diag .FromErr (err )
161
+ }
162
+ }
163
+
118
164
if d .HasChange ("reverse" ) {
119
165
req := & lb.ZonedAPIUpdateIPRequest {
120
166
Zone : zone ,
@@ -128,6 +174,22 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
128
174
}
129
175
}
130
176
177
+ if res .LBID != nil {
178
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
179
+ Zone : zone ,
180
+ LBID : * res .LBID ,
181
+ Timeout : scw .TimeDurationPtr (defaultInstanceServerWaitTimeout ),
182
+ RetryInterval : scw .TimeDurationPtr (DefaultWaitLBRetryInterval ),
183
+ }, scw .WithContext (ctx ))
184
+ if err != nil {
185
+ if is403Error (err ) {
186
+ d .SetId ("" )
187
+ return nil
188
+ }
189
+ return diag .FromErr (err )
190
+ }
191
+ }
192
+
131
193
return resourceScalewayLbIPRead (ctx , d , meta )
132
194
}
133
195
@@ -137,6 +199,36 @@ func resourceScalewayLbIPDelete(ctx context.Context, d *schema.ResourceData, met
137
199
return diag .FromErr (err )
138
200
}
139
201
202
+ res , err := lbAPI .GetIP (& lb.ZonedAPIGetIPRequest {
203
+ Zone : zone ,
204
+ IPID : ID ,
205
+ }, scw .WithContext (ctx ))
206
+
207
+ if err != nil {
208
+ if is404Error (err ) || is403Error (err ) {
209
+ d .SetId ("" )
210
+ return nil
211
+ }
212
+ return diag .FromErr (err )
213
+ }
214
+
215
+ // check lb state
216
+ if res .LBID != nil {
217
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
218
+ Zone : zone ,
219
+ LBID : * res .LBID ,
220
+ Timeout : scw .TimeDurationPtr (defaultInstanceServerWaitTimeout ),
221
+ RetryInterval : scw .TimeDurationPtr (DefaultWaitLBRetryInterval ),
222
+ }, scw .WithContext (ctx ))
223
+ if err != nil {
224
+ if is403Error (err ) {
225
+ d .SetId ("" )
226
+ return nil
227
+ }
228
+ return diag .FromErr (err )
229
+ }
230
+ }
231
+
140
232
err = lbAPI .ReleaseIP (& lb.ZonedAPIReleaseIPRequest {
141
233
Zone : zone ,
142
234
IPID : ID ,
0 commit comments