Skip to content

Commit 4317143

Browse files
committed
fix(k8s): avoid concurrency when creating pools
1 parent d71aae2 commit 4317143

19 files changed

+12784
-14866
lines changed

scaleway/helpers_k8s.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,24 +105,27 @@ func waitK8SClusterPool(ctx context.Context, k8sAPI *k8s.API, region scw.Region,
105105
}, scw.WithContext(ctx))
106106
}
107107

108-
func waitK8SClusterDeleted(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string, timeout time.Duration) error {
108+
func waitK8SClusterStatus(ctx context.Context, k8sAPI *k8s.API, cluster *k8s.Cluster, status k8s.ClusterStatus, timeout time.Duration) (*k8s.Cluster, error) {
109109
retryInterval := defaultK8SRetryInterval
110110
if DefaultWaitRetryInterval != nil {
111111
retryInterval = *DefaultWaitRetryInterval
112112
}
113113

114-
_, err := k8sAPI.WaitForCluster(&k8s.WaitForClusterRequest{
115-
ClusterID: clusterID,
116-
Region: region,
117-
Status: k8s.ClusterStatusDeleted,
114+
cluster, err := k8sAPI.WaitForCluster(&k8s.WaitForClusterRequest{
115+
ClusterID: cluster.ID,
116+
Region: cluster.Region,
117+
Status: status,
118118
Timeout: scw.TimeDurationPtr(timeout),
119119
RetryInterval: &retryInterval,
120120
}, scw.WithContext(ctx))
121-
if err != nil && !is404Error(err) {
122-
return err
121+
if err != nil {
122+
if status == k8s.ClusterStatusDeleted && is404Error(err) {
123+
return cluster, nil
124+
}
125+
return cluster, err
123126
}
124127

125-
return nil
128+
return cluster, nil
126129
}
127130

128131
func waitK8SPoolReady(ctx context.Context, k8sAPI *k8s.API, region scw.Region, poolID string, timeout time.Duration) (*k8s.Pool, error) {

scaleway/resource_k8s_cluster.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ func resourceScalewayK8SClusterDelete(ctx context.Context, d *schema.ResourceDat
871871
////
872872
// Delete Cluster
873873
////
874-
_, err = k8sAPI.DeleteCluster(&k8s.DeleteClusterRequest{
874+
cluster, err := k8sAPI.DeleteCluster(&k8s.DeleteClusterRequest{
875875
Region: region,
876876
ClusterID: clusterID,
877877
WithAdditionalResources: deleteAdditionalResources,
@@ -883,7 +883,7 @@ func resourceScalewayK8SClusterDelete(ctx context.Context, d *schema.ResourceDat
883883
return diag.FromErr(err)
884884
}
885885

886-
err = waitK8SClusterDeleted(ctx, k8sAPI, region, clusterID, d.Timeout(schema.TimeoutDelete))
886+
_, err = waitK8SClusterStatus(ctx, k8sAPI, cluster, k8s.ClusterStatusDeleted, d.Timeout(schema.TimeoutDelete))
887887
if err != nil {
888888
return diag.FromErr(err)
889889
}

scaleway/resource_k8s_pool.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,8 @@ func resourceScalewayK8SPoolCreate(ctx context.Context, d *schema.ResourceData,
305305
return diag.FromErr(err)
306306
}
307307

308-
waitForCluster := false
309-
310-
if cluster.Status == k8s.ClusterStatusPoolRequired {
311-
waitForCluster = true
312-
} else if cluster.Status == k8s.ClusterStatusCreating {
313-
_, err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID, d.Timeout(schema.TimeoutCreate))
308+
if cluster.Status == k8s.ClusterStatusCreating {
309+
_, err = waitK8SClusterStatus(ctx, k8sAPI, cluster, k8s.ClusterStatusReady, d.Timeout(schema.TimeoutCreate))
314310
if err != nil {
315311
return diag.FromErr(err)
316312
}
@@ -330,11 +326,9 @@ func resourceScalewayK8SPoolCreate(ctx context.Context, d *schema.ResourceData,
330326
}
331327
}
332328

333-
if waitForCluster {
334-
_, err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID, d.Timeout(schema.TimeoutCreate))
335-
if err != nil {
336-
return diag.FromErr(err)
337-
}
329+
_, err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID, d.Timeout(schema.TimeoutCreate))
330+
if err != nil {
331+
return diag.FromErr(err)
338332
}
339333

340334
return resourceScalewayK8SPoolRead(ctx, d, meta)

scaleway/testdata/data-source-k8s-cluster-basic.cassette.yaml

Lines changed: 1745 additions & 524 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-auto-upgrade.cassette.yaml

Lines changed: 403 additions & 370 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-autoscaling.cassette.yaml

Lines changed: 122 additions & 122 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-basic.cassette.yaml

Lines changed: 145 additions & 178 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-multicloud.cassette.yaml

Lines changed: 362 additions & 923 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-oidc.cassette.yaml

Lines changed: 122 additions & 122 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-basic.cassette.yaml

Lines changed: 834 additions & 1098 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-kubelet-args.cassette.yaml

Lines changed: 507 additions & 1959 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-placement-group.cassette.yaml

Lines changed: 1323 additions & 2214 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-public-ip-disabled.cassette.yaml

Lines changed: 2420 additions & 1034 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-size.cassette.yaml

Lines changed: 439 additions & 1429 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-upgrade-policy.cassette.yaml

Lines changed: 1008 additions & 546 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-wait.cassette.yaml

Lines changed: 1166 additions & 1199 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-pool-zone.cassette.yaml

Lines changed: 452 additions & 1376 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-private-network.cassette.yaml

Lines changed: 203 additions & 170 deletions
Large diffs are not rendered by default.

scaleway/testdata/k8s-cluster-type-change.cassette.yaml

Lines changed: 1515 additions & 1581 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)