Skip to content

Commit 25c7600

Browse files
authored
fix(lb): fix ip waiting status during deletion (scaleway#977)
1 parent 66f7d5f commit 25c7600

13 files changed

+4714
-2622
lines changed

scaleway/resource_lb.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ func resourceScalewayLbDelete(ctx context.Context, d *schema.ResourceData, meta
368368
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
369369
RetryInterval: &retryInterval,
370370
}, scw.WithContext(ctx))
371-
if err != nil && !is404Error(err) {
371+
if err != nil {
372372
return diag.FromErr(err)
373373
}
374374

scaleway/resource_lb_ip.go

+92
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,23 @@ func resourceScalewayLbIPRead(ctx context.Context, d *schema.ResourceData, meta
9292
return diag.FromErr(err)
9393
}
9494

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+
95112
// set the region from zone
96113
region, err := zone.Region()
97114
if err != nil {
@@ -115,6 +132,35 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
115132
return diag.FromErr(err)
116133
}
117134

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+
118164
if d.HasChange("reverse") {
119165
req := &lb.ZonedAPIUpdateIPRequest{
120166
Zone: zone,
@@ -128,6 +174,22 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
128174
}
129175
}
130176

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+
131193
return resourceScalewayLbIPRead(ctx, d, meta)
132194
}
133195

@@ -137,6 +199,36 @@ func resourceScalewayLbIPDelete(ctx context.Context, d *schema.ResourceData, met
137199
return diag.FromErr(err)
138200
}
139201

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+
140232
err = lbAPI.ReleaseIP(&lb.ZonedAPIReleaseIPRequest{
141233
Zone: zone,
142234
IPID: ID,

scaleway/resource_lb_ip_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,24 @@ func TestAccScalewayLbIP_Basic(t *testing.T) {
7373
resource.TestCheckResourceAttr("scaleway_lb_ip.ip01", "reverse", "myreverse.com"),
7474
),
7575
},
76+
{
77+
Config: `
78+
resource scaleway_lb_ip ip01 {
79+
reverse = "myreverse.com"
80+
}
81+
82+
resource scaleway_lb main {
83+
ip_id = scaleway_lb_ip.ip01.id
84+
name = "test-lb-with-release-ip"
85+
type = "LB-S"
86+
release_ip = true
87+
}
88+
`,
89+
Check: resource.ComposeTestCheckFunc(
90+
testAccCheckScalewayLbExists(tt, "scaleway_lb.main"),
91+
testAccCheckScalewayLbIPExists(tt, "scaleway_lb_ip.ip01"),
92+
),
93+
},
7694
},
7795
})
7896
}

scaleway/testdata/data-source-lb-basic.cassette.yaml

+221-155
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)