Skip to content

Commit 6402335

Browse files
authored
feat(lb): add wait lb certificate (#1033)
1 parent 8903d6f commit 6402335

11 files changed

+648
-532
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
99
github.com/hashicorp/go-retryablehttp v0.7.0
1010
github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1
11-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20211228142246-d7e9096b97a8
11+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20220112145133-71a550556c71
1212
github.com/stretchr/testify v1.7.0
1313
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
1414

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
293293
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
294294
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
295295
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
296-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20211228142246-d7e9096b97a8 h1:FmxkX9nmraMmu7u7S53bk3dtm7U1H9AQ2ULo8/CRwAo=
297-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20211228142246-d7e9096b97a8/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
296+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20220112145133-71a550556c71 h1:FzB5WvhIkSEaZHTy98WbLc0P4lK2b29bVIxI4/mer3A=
297+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20220112145133-71a550556c71/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
298298
github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
299299
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
300300
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=

scaleway/helpers_lb.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
)
1616

1717
const (
18-
LbWaitForTimeout = 10 * time.Minute
18+
lbWaitForTimeout = 10 * time.Minute
1919
defaultLbLbTimeout = 10 * time.Minute
2020
retryLbIPInterval = 5 * time.Second
2121
)

scaleway/resource_lb.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
)
1414

1515
const (
16-
DefaultWaitLBRetryInterval = 30 * time.Second
16+
defaultWaitLBRetryInterval = 30 * time.Second
1717
)
1818

1919
func resourceScalewayLb() *schema.Resource {
@@ -146,7 +146,7 @@ func resourceScalewayLbCreate(ctx context.Context, d *schema.ResourceData, meta
146146

147147
d.SetId(newZonedIDString(zone, res.ID))
148148
// wait for lb
149-
retryInterval := DefaultWaitLBRetryInterval
149+
retryInterval := defaultWaitLBRetryInterval
150150
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
151151
Zone: zone,
152152
LBID: res.ID,
@@ -192,7 +192,7 @@ func resourceScalewayLbRead(ctx context.Context, d *schema.ResourceData, meta in
192192
return diag.FromErr(err)
193193
}
194194

195-
retryInterval := DefaultWaitLBRetryInterval
195+
retryInterval := defaultWaitLBRetryInterval
196196
res, err := lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
197197
Zone: zone,
198198
LBID: ID,
@@ -257,7 +257,7 @@ func resourceScalewayLbUpdate(ctx context.Context, d *schema.ResourceData, meta
257257
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
258258
LBID: ID,
259259
Zone: zone,
260-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
260+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
261261
RetryInterval: DefaultWaitRetryInterval,
262262
}, scw.WithContext(ctx))
263263

@@ -274,7 +274,7 @@ func resourceScalewayLbUpdate(ctx context.Context, d *schema.ResourceData, meta
274274
// Attach / Detach Private Networks
275275
////
276276
if d.HasChangesExcept("private_network") {
277-
retryInterval := DefaultWaitLBRetryInterval
277+
retryInterval := defaultWaitLBRetryInterval
278278
// check that pns are in a stable state
279279
pns, err := lbAPI.WaitForLBPN(&lb.ZonedAPIWaitForLBPNRequest{
280280
Zone: zone,
@@ -359,8 +359,8 @@ func resourceScalewayLbDelete(ctx context.Context, d *schema.ResourceData, meta
359359
currentLB, err := lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
360360
LBID: ID,
361361
Zone: zone,
362-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
363-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
362+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
363+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
364364
}, scw.WithContext(ctx))
365365
if err != nil {
366366
return diag.FromErr(err)
@@ -390,8 +390,8 @@ func resourceScalewayLbDelete(ctx context.Context, d *schema.ResourceData, meta
390390
_, err = lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
391391
LBID: ID,
392392
Zone: zone,
393-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
394-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
393+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
394+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
395395
}, scw.WithContext(ctx))
396396
if err != nil && !is404Error(err) {
397397
return diag.FromErr(err)
@@ -410,8 +410,8 @@ func resourceScalewayLbDelete(ctx context.Context, d *schema.ResourceData, meta
410410
_, err = lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
411411
LBID: ID,
412412
Zone: zone,
413-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
414-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
413+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
414+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
415415
}, scw.WithContext(ctx))
416416
if err != nil && !is404Error(err) {
417417
return diag.FromErr(err)

scaleway/resource_lb_backend.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func resourceScalewayLbBackendCreate(ctx context.Context, d *schema.ResourceData
255255
healthCheckPort = d.Get("forward_port").(int)
256256
}
257257

258-
retryInterval := DefaultWaitLBRetryInterval
258+
retryInterval := defaultWaitLBRetryInterval
259259
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
260260
Zone: zone,
261261
LBID: LbID,
@@ -362,7 +362,7 @@ func resourceScalewayLbBackendRead(ctx context.Context, d *schema.ResourceData,
362362
_ = d.Set("health_check_http", flattenLbHCHTTP(res.HealthCheck.HTTPConfig))
363363
_ = d.Set("health_check_https", flattenLbHCHTTPS(res.HealthCheck.HTTPSConfig))
364364

365-
retryInterval := DefaultWaitLBRetryInterval
365+
retryInterval := defaultWaitLBRetryInterval
366366
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
367367
Zone: zone,
368368
LBID: res.LB.ID,
@@ -391,7 +391,7 @@ func resourceScalewayLbBackendUpdate(ctx context.Context, d *schema.ResourceData
391391
return diag.FromErr(err)
392392
}
393393

394-
retryInterval := DefaultWaitLBRetryInterval
394+
retryInterval := defaultWaitLBRetryInterval
395395
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
396396
Zone: zone,
397397
LBID: LbID,
@@ -488,7 +488,7 @@ func resourceScalewayLbBackendDelete(ctx context.Context, d *schema.ResourceData
488488
return diag.FromErr(err)
489489
}
490490

491-
retryInterval := DefaultWaitLBRetryInterval
491+
retryInterval := defaultWaitLBRetryInterval
492492
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
493493
Zone: zone,
494494
LBID: LbID,

scaleway/resource_lb_certificate.go

+44-27
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scaleway
33
import (
44
"context"
55
"errors"
6+
"fmt"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -140,7 +141,7 @@ func resourceScalewayLbCertificateCreate(ctx context.Context, d *schema.Resource
140141
return diag.FromErr(errors.New("you need to define either letsencrypt or custom_certificate configuration"))
141142
}
142143

143-
retryInterval := DefaultWaitLBRetryInterval
144+
retryInterval := defaultWaitLBRetryInterval
144145
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
145146
Zone: zone,
146147
LBID: lbID,
@@ -160,6 +161,16 @@ func resourceScalewayLbCertificateCreate(ctx context.Context, d *schema.Resource
160161
return diag.FromErr(err)
161162
}
162163

164+
_, err = lbAPI.WaitForLBCertificate(&lb.ZonedAPIWaitForLBCertificateRequest{
165+
CertID: res.ID,
166+
Zone: res.LB.Zone,
167+
Timeout: scw.TimeDurationPtr(defaultLbLbTimeout),
168+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
169+
})
170+
if err != nil {
171+
return diag.FromErr(err)
172+
}
173+
163174
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
164175
Zone: zone,
165176
LBID: lbID,
@@ -185,38 +196,40 @@ func resourceScalewayLbCertificateRead(ctx context.Context, d *schema.ResourceDa
185196
return diag.FromErr(err)
186197
}
187198

188-
res, err := lbAPI.GetCertificate(&lb.ZonedAPIGetCertificateRequest{
189-
CertificateID: ID,
199+
cert, err := lbAPI.WaitForLBCertificate(&lb.ZonedAPIWaitForLBCertificateRequest{
200+
CertID: ID,
190201
Zone: zone,
191-
}, scw.WithContext(ctx))
192-
202+
Timeout: scw.TimeDurationPtr(defaultLbLbTimeout),
203+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
204+
})
193205
if err != nil {
194-
if is404Error(err) {
195-
d.SetId("")
196-
return nil
197-
}
198206
return diag.FromErr(err)
199207
}
200208

201-
retryInterval := DefaultWaitLBRetryInterval
209+
// check if cert is on error state
210+
if cert.Status == lb.CertificateStatusError {
211+
return diag.FromErr(fmt.Errorf("certificate with error state"))
212+
}
213+
214+
retryInterval := defaultWaitLBRetryInterval
202215
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
203216
Zone: zone,
204-
LBID: res.LB.ID,
217+
LBID: cert.LB.ID,
205218
Timeout: scw.TimeDurationPtr(defaultInstanceServerWaitTimeout),
206219
RetryInterval: &retryInterval,
207220
}, scw.WithContext(ctx))
208221
if err != nil {
209222
return diag.FromErr(err)
210223
}
211224

212-
_ = d.Set("lb_id", newZonedIDString(zone, res.LB.ID))
213-
_ = d.Set("name", res.Name)
214-
_ = d.Set("common_name", res.CommonName)
215-
_ = d.Set("subject_alternative_name", res.SubjectAlternativeName)
216-
_ = d.Set("fingerprint", res.Fingerprint)
217-
_ = d.Set("not_valid_before", flattenTime(res.NotValidBefore))
218-
_ = d.Set("not_valid_after", flattenTime(res.NotValidAfter))
219-
_ = d.Set("status", res.Status)
225+
_ = d.Set("lb_id", newZonedIDString(zone, cert.LB.ID))
226+
_ = d.Set("name", cert.Name)
227+
_ = d.Set("common_name", cert.CommonName)
228+
_ = d.Set("subject_alternative_name", cert.SubjectAlternativeName)
229+
_ = d.Set("fingerprint", cert.Fingerprint)
230+
_ = d.Set("not_valid_before", flattenTime(cert.NotValidBefore))
231+
_ = d.Set("not_valid_after", flattenTime(cert.NotValidAfter))
232+
_ = d.Set("status", cert.Status)
220233
return nil
221234
}
222235

@@ -226,15 +239,17 @@ func resourceScalewayLbCertificateUpdate(ctx context.Context, d *schema.Resource
226239
return diag.FromErr(err)
227240
}
228241

229-
cert, err := lbAPI.GetCertificate(&lb.ZonedAPIGetCertificateRequest{
230-
CertificateID: ID,
242+
cert, err := lbAPI.WaitForLBCertificate(&lb.ZonedAPIWaitForLBCertificateRequest{
243+
CertID: ID,
231244
Zone: zone,
232-
}, scw.WithContext(ctx))
245+
Timeout: scw.TimeDurationPtr(defaultLbLbTimeout),
246+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
247+
})
233248
if err != nil {
234249
return diag.FromErr(err)
235250
}
236251

237-
retryInterval := DefaultWaitLBRetryInterval
252+
retryInterval := defaultWaitLBRetryInterval
238253
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
239254
Zone: zone,
240255
LBID: cert.LB.ID,
@@ -285,15 +300,17 @@ func resourceScalewayLbCertificateDelete(ctx context.Context, d *schema.Resource
285300
return diag.FromErr(err)
286301
}
287302

288-
cert, err := lbAPI.GetCertificate(&lb.ZonedAPIGetCertificateRequest{
289-
CertificateID: ID,
303+
cert, err := lbAPI.WaitForLBCertificate(&lb.ZonedAPIWaitForLBCertificateRequest{
304+
CertID: ID,
290305
Zone: zone,
291-
}, scw.WithContext(ctx))
306+
Timeout: scw.TimeDurationPtr(defaultLbLbTimeout),
307+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
308+
})
292309
if err != nil {
293310
return diag.FromErr(err)
294311
}
295312

296-
retryInterval := DefaultWaitLBRetryInterval
313+
retryInterval := defaultWaitLBRetryInterval
297314
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
298315
Zone: zone,
299316
LBID: cert.LB.ID,

scaleway/resource_lb_frontend.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func resourceScalewayLbFrontendCreate(ctx context.Context, d *schema.ResourceDat
163163
return diag.FromErr(err)
164164
}
165165

166-
retryInterval := DefaultWaitLBRetryInterval
166+
retryInterval := defaultWaitLBRetryInterval
167167
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
168168
Zone: zone,
169169
LBID: lbID,
@@ -212,7 +212,7 @@ func resourceScalewayLbFrontendRead(ctx context.Context, d *schema.ResourceData,
212212
return diag.FromErr(err)
213213
}
214214

215-
retryInterval := DefaultWaitLBRetryInterval
215+
retryInterval := defaultWaitLBRetryInterval
216216
_, err = lbAPI.WaitForLb(&lb.ZonedAPIWaitForLBRequest{
217217
Zone: zone,
218218
LBID: lbID,
@@ -362,7 +362,7 @@ func resourceScalewayLbFrontendUpdate(ctx context.Context, d *schema.ResourceDat
362362
return diag.FromErr(err)
363363
}
364364

365-
retryInterval := DefaultWaitLBRetryInterval
365+
retryInterval := defaultWaitLBRetryInterval
366366
_, lbID, err := parseZonedID(d.Get("lb_id").(string))
367367
if err != nil {
368368
return diag.FromErr(err)

scaleway/resource_lb_ip.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func resourceScalewayLbIPRead(ctx context.Context, d *schema.ResourceData, meta
111111
Zone: zone,
112112
LBID: *ip.LBID,
113113
Timeout: scw.TimeDurationPtr(defaultInstanceServerWaitTimeout),
114-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
114+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
115115
}, scw.WithContext(ctx))
116116
if err != nil {
117117
if is403Error(err) {
@@ -175,7 +175,7 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
175175
Zone: zone,
176176
LBID: *ip.LBID,
177177
Timeout: scw.TimeDurationPtr(defaultInstanceServerWaitTimeout),
178-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
178+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
179179
}, scw.WithContext(ctx))
180180
if err != nil {
181181
if is403Error(err) {
@@ -204,7 +204,7 @@ func resourceScalewayLbIPUpdate(ctx context.Context, d *schema.ResourceData, met
204204
Zone: zone,
205205
LBID: *ip.LBID,
206206
Timeout: scw.TimeDurationPtr(defaultInstanceServerWaitTimeout),
207-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
207+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
208208
}, scw.WithContext(ctx))
209209
if err != nil {
210210
if is403Error(err) {
@@ -250,8 +250,8 @@ func resourceScalewayLbIPDelete(ctx context.Context, d *schema.ResourceData, met
250250
_, err = lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
251251
LBID: *ip.LBID,
252252
Zone: zone,
253-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
254-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
253+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
254+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
255255
}, scw.WithContext(ctx))
256256
if err != nil {
257257
if is403Error(err) {
@@ -276,8 +276,8 @@ func resourceScalewayLbIPDelete(ctx context.Context, d *schema.ResourceData, met
276276
_, err = lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
277277
LBID: *ip.LBID,
278278
Zone: zone,
279-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
280-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
279+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
280+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
281281
}, scw.WithContext(ctx))
282282
if err != nil {
283283
if is404Error(err) || is403Error(err) {

scaleway/resource_lb_ip_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func testAccCheckScalewayLbIPDestroy(tt *TestTools) resource.TestCheckFunc {
139139
Zone: zone,
140140
LBID: lbID,
141141
Timeout: scw.TimeDurationPtr(defaultInstanceServerWaitTimeout),
142-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
142+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
143143
})
144144
// Unexpected api error we return it
145145
if !is404Error(err) {

scaleway/resource_lb_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ func testSweepLB(_ string) error {
3535
_, err = lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
3636
LBID: l.ID,
3737
Zone: zone,
38-
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
39-
RetryInterval: scw.TimeDurationPtr(DefaultWaitLBRetryInterval),
38+
Timeout: scw.TimeDurationPtr(lbWaitForTimeout),
39+
RetryInterval: scw.TimeDurationPtr(defaultWaitLBRetryInterval),
4040
})
4141
if err != nil {
4242
return fmt.Errorf("error waiting for lb in sweeper: %s", err)

0 commit comments

Comments
 (0)