Skip to content

Commit 327a1db

Browse files
authored
Fix(k8s): cluster waiting pool (#1031)
1 parent ccd3a2f commit 327a1db

17 files changed

+5072
-1057
lines changed

scaleway/data_source_k8s_cluster_test.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ func TestAccScalewayDataSourceK8SCluster_Basic(t *testing.T) {
2424
version = "%s"
2525
cni = "cilium"
2626
tags = [ "terraform-test", "data_scaleway_k8s_cluster", "basic" ]
27-
}`, clusterName, version),
28-
},
29-
{
30-
Config: fmt.Sprintf(`
31-
resource "scaleway_k8s_cluster" "main" {
32-
name = "%s"
33-
version = "%s"
34-
cni = "cilium"
35-
tags = [ "terraform-test", "data_scaleway_k8s_cluster", "basic" ]
27+
}
28+
29+
resource "scaleway_k8s_pool" "default" {
30+
name = "default"
31+
cluster_id = "${scaleway_k8s_cluster.main.id}"
32+
node_type = "gp1_xs"
33+
autohealing = true
34+
autoscaling = true
35+
size = 1
3636
}
3737
3838
data "scaleway_k8s_cluster" "prod" {

scaleway/helpers_k8s.go

+13-15
Original file line numberDiff line numberDiff line change
@@ -102,24 +102,22 @@ func k8sGetLatestVersionFromMinor(ctx context.Context, k8sAPI *k8s.API, region s
102102
return "", fmt.Errorf("no available upstream version found for %s", version)
103103
}
104104

105-
func waitK8SCluster(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string, desiredStates ...k8s.ClusterStatus) error {
106-
cluster, err := k8sAPI.WaitForCluster(&k8s.WaitForClusterRequest{
105+
func waitK8SCluster(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string) (*k8s.Cluster, error) {
106+
return k8sAPI.WaitForCluster(&k8s.WaitForClusterRequest{
107107
ClusterID: clusterID,
108108
Region: region,
109109
Timeout: scw.TimeDurationPtr(K8SClusterWaitForPoolRequiredTimeout),
110110
RetryInterval: DefaultWaitRetryInterval,
111111
}, scw.WithContext(ctx))
112-
if err != nil {
113-
return err
114-
}
115-
116-
for _, desiredState := range desiredStates {
117-
if cluster.Status == desiredState {
118-
return nil
119-
}
120-
}
112+
}
121113

122-
return fmt.Errorf("cluster %s has state %s, wants one of %+q", clusterID, cluster.Status, desiredStates)
114+
func waitK8SClusterPool(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string) (*k8s.Cluster, error) {
115+
return k8sAPI.WaitForClusterPool(&k8s.WaitForClusterRequest{
116+
ClusterID: clusterID,
117+
Region: region,
118+
Timeout: scw.TimeDurationPtr(K8SClusterWaitForPoolRequiredTimeout),
119+
RetryInterval: DefaultWaitRetryInterval,
120+
}, scw.WithContext(ctx))
123121
}
124122

125123
func waitK8SClusterDeleted(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string) error {
@@ -151,10 +149,10 @@ func waitK8SPoolReady(ctx context.Context, k8sAPI *k8s.API, region scw.Region, p
151149
return err
152150
}
153151

154-
if pool.Status == k8s.PoolStatusReady {
155-
return nil
152+
if pool.Status != k8s.PoolStatusReady {
153+
return fmt.Errorf("pool %s has state %s, wants %s", poolID, pool.Status, k8s.PoolStatusReady)
156154
}
157-
return fmt.Errorf("pool %s has state %s, wants %s", poolID, pool.Status, k8s.PoolStatusReady)
155+
return nil
158156
}
159157

160158
// convert a list of nodes to a list of map

scaleway/resource_k8s_cluster.go

+25-28
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
379379
return diag.FromErr(err)
380380
}
381381

382-
err = waitK8SCluster(ctx, k8sAPI, region, res.ID, k8s.ClusterStatusReady, k8s.ClusterStatusPoolRequired)
382+
res, err = waitK8SClusterPool(ctx, k8sAPI, region, res.ID)
383383
if err != nil {
384384
return diag.FromErr(err)
385385
}
@@ -398,10 +398,7 @@ func resourceScalewayK8SClusterRead(ctx context.Context, d *schema.ResourceData,
398398
////
399399
// Read Cluster
400400
////
401-
response, err := k8sAPI.GetCluster(&k8s.GetClusterRequest{
402-
Region: region,
403-
ClusterID: clusterID,
404-
}, scw.WithContext(ctx))
401+
cluster, err := waitK8SCluster(ctx, k8sAPI, region, clusterID)
405402
if err != nil {
406403
if is404Error(err) {
407404
d.SetId("")
@@ -411,26 +408,26 @@ func resourceScalewayK8SClusterRead(ctx context.Context, d *schema.ResourceData,
411408
}
412409

413410
_ = d.Set("region", string(region))
414-
_ = d.Set("name", response.Name)
415-
_ = d.Set("type", response.Type)
416-
_ = d.Set("organization_id", response.OrganizationID)
417-
_ = d.Set("project_id", response.ProjectID)
418-
_ = d.Set("description", response.Description)
419-
_ = d.Set("cni", response.Cni)
420-
_ = d.Set("tags", response.Tags)
421-
_ = d.Set("apiserver_cert_sans", response.ApiserverCertSans)
422-
_ = d.Set("created_at", response.CreatedAt.Format(time.RFC3339))
423-
_ = d.Set("updated_at", response.UpdatedAt.Format(time.RFC3339))
424-
_ = d.Set("apiserver_url", response.ClusterURL)
425-
_ = d.Set("wildcard_dns", response.DNSWildcard)
426-
_ = d.Set("status", response.Status.String())
427-
_ = d.Set("upgrade_available", response.UpgradeAvailable)
428-
_ = d.Set("feature_gates", response.FeatureGates)
429-
_ = d.Set("admission_plugins", response.AdmissionPlugins)
411+
_ = d.Set("name", cluster.Name)
412+
_ = d.Set("type", cluster.Type)
413+
_ = d.Set("organization_id", cluster.OrganizationID)
414+
_ = d.Set("project_id", cluster.ProjectID)
415+
_ = d.Set("description", cluster.Description)
416+
_ = d.Set("cni", cluster.Cni)
417+
_ = d.Set("tags", cluster.Tags)
418+
_ = d.Set("apiserver_cert_sans", cluster.ApiserverCertSans)
419+
_ = d.Set("created_at", cluster.CreatedAt.Format(time.RFC3339))
420+
_ = d.Set("updated_at", cluster.UpdatedAt.Format(time.RFC3339))
421+
_ = d.Set("apiserver_url", cluster.ClusterURL)
422+
_ = d.Set("wildcard_dns", cluster.DNSWildcard)
423+
_ = d.Set("status", cluster.Status.String())
424+
_ = d.Set("upgrade_available", cluster.UpgradeAvailable)
425+
_ = d.Set("feature_gates", cluster.FeatureGates)
426+
_ = d.Set("admission_plugins", cluster.AdmissionPlugins)
430427

431428
// if autoupgrade is enabled, we only set the minor k8s version (x.y)
432-
version := response.Version
433-
if response.AutoUpgrade != nil && response.AutoUpgrade.Enabled {
429+
version := cluster.Version
430+
if cluster.AutoUpgrade != nil && cluster.AutoUpgrade.Enabled {
434431
version, err = k8sGetMinorVersionFromFull(version)
435432
if err != nil {
436433
return diag.FromErr(err)
@@ -439,9 +436,9 @@ func resourceScalewayK8SClusterRead(ctx context.Context, d *schema.ResourceData,
439436
_ = d.Set("version", version)
440437

441438
// autoscaler_config
442-
_ = d.Set("autoscaler_config", clusterAutoscalerConfigFlatten(response))
443-
_ = d.Set("open_id_connect_config", clusterOpenIDConnectConfigFlatten(response))
444-
_ = d.Set("auto_upgrade", clusterAutoUpgradeFlatten(response))
439+
_ = d.Set("autoscaler_config", clusterAutoscalerConfigFlatten(cluster))
440+
_ = d.Set("open_id_connect_config", clusterOpenIDConnectConfigFlatten(cluster))
441+
_ = d.Set("auto_upgrade", clusterAutoUpgradeFlatten(cluster))
445442

446443
////
447444
// Read kubeconfig
@@ -653,7 +650,7 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
653650
return diag.FromErr(err)
654651
}
655652

656-
err = waitK8SCluster(ctx, k8sAPI, region, clusterID, k8s.ClusterStatusReady, k8s.ClusterStatusPoolRequired)
653+
_, err = waitK8SCluster(ctx, k8sAPI, region, clusterID)
657654
if err != nil {
658655
return diag.FromErr(err)
659656
}
@@ -673,7 +670,7 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
673670
return diag.FromErr(err)
674671
}
675672

676-
err = waitK8SCluster(ctx, k8sAPI, region, clusterID, k8s.ClusterStatusReady, k8s.ClusterStatusPoolRequired)
673+
_, err = waitK8SCluster(ctx, k8sAPI, region, clusterID)
677674
if err != nil {
678675
return diag.FromErr(err)
679676
}

scaleway/resource_k8s_cluster_test.go

+27-3
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ func TestAccScalewayK8SCluster_OIDC(t *testing.T) {
282282
testAccCheckScalewayK8SClusterExists(tt, "scaleway_k8s_cluster.oidc"),
283283
resource.TestCheckResourceAttr("scaleway_k8s_cluster.oidc", "version", latestK8SVersion),
284284
resource.TestCheckResourceAttr("scaleway_k8s_cluster.oidc", "cni", "cilium"),
285-
resource.TestCheckResourceAttr("scaleway_k8s_cluster.oidc", "status", k8s.ClusterStatusPoolRequired.String()),
285+
resource.TestCheckResourceAttr("scaleway_k8s_cluster.oidc", "status", k8s.ClusterStatusReady.String()),
286286
resource.TestCheckResourceAttrSet("scaleway_k8s_cluster.oidc", "kubeconfig.0.config_file"),
287287
resource.TestCheckResourceAttrSet("scaleway_k8s_cluster.oidc", "kubeconfig.0.host"),
288288
resource.TestCheckResourceAttrSet("scaleway_k8s_cluster.oidc", "kubeconfig.0.cluster_ca_certificate"),
@@ -454,6 +454,7 @@ resource "scaleway_k8s_cluster" "autoscaler" {
454454
cni = "calico"
455455
version = "%s"
456456
name = "autoscaler-01"
457+
region = "nl-ams"
457458
autoscaler_config {
458459
disable_scale_down = true
459460
scale_down_delay_after_add = "20m"
@@ -476,6 +477,7 @@ resource "scaleway_k8s_cluster" "autoscaler" {
476477
cni = "calico"
477478
version = "%s"
478479
name = "autoscaler-02"
480+
region = "nl-ams"
479481
autoscaler_config {
480482
disable_scale_down = false
481483
scale_down_delay_after_add = "20m"
@@ -504,7 +506,18 @@ resource "scaleway_k8s_cluster" "oidc" {
504506
groups_prefix = "pouf"
505507
}
506508
tags = [ "terraform-test", "scaleway_k8s_cluster", "oidc-config" ]
507-
}`, version)
509+
}
510+
511+
resource "scaleway_k8s_pool" "minimal" {
512+
name = "minimal"
513+
cluster_id = "${scaleway_k8s_cluster.oidc.id}"
514+
node_type = "gp1_xs"
515+
autohealing = true
516+
autoscaling = true
517+
size = 1
518+
tags = [ "terraform-test", "scaleway_k8s_cluster", "minimal" ]
519+
}
520+
`, version)
508521
}
509522

510523
func testAccCheckScalewayK8SClusterConfigOIDCChange(version string) string {
@@ -521,7 +534,18 @@ resource "scaleway_k8s_cluster" "oidc" {
521534
username_prefix = "boo"
522535
}
523536
tags = [ "terraform-test", "scaleway_k8s_cluster", "oidc-config" ]
524-
}`, version)
537+
}
538+
539+
resource "scaleway_k8s_pool" "oidc" {
540+
name = "minimal"
541+
cluster_id = "${scaleway_k8s_cluster.oidc.id}"
542+
node_type = "gp1_xs"
543+
autohealing = true
544+
autoscaling = true
545+
size = 1
546+
tags = [ "terraform-test", "scaleway_k8s_cluster", "minimal" ]
547+
}
548+
`, version)
525549
}
526550

527551
func testAccCheckScalewayK8SClusterAutoUpgrade(enable bool, day string, hour uint64, version string) string {

scaleway/resource_k8s_pool.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ func resourceScalewayK8SPoolCreate(ctx context.Context, d *schema.ResourceData,
264264
if cluster.Status == k8s.ClusterStatusPoolRequired {
265265
waitForCluster = true
266266
} else if cluster.Status == k8s.ClusterStatusCreating {
267-
err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID, k8s.ClusterStatusReady)
267+
_, err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID)
268268
if err != nil {
269269
return diag.FromErr(err)
270270
}
@@ -278,7 +278,7 @@ func resourceScalewayK8SPoolCreate(ctx context.Context, d *schema.ResourceData,
278278
d.SetId(newRegionalIDString(region, res.ID))
279279

280280
if waitForCluster {
281-
err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID, k8s.ClusterStatusReady)
281+
_, err = waitK8SCluster(ctx, k8sAPI, region, cluster.ID)
282282
if err != nil {
283283
return diag.FromErr(err)
284284
}

0 commit comments

Comments
 (0)