Skip to content

Commit 8a2118e

Browse files
pablo-ruthPablo RUTH
andauthored
feat(k8s): add warning if cluster type is not prefixed by kapsule or multicloud (#2309)
* feat(k8s): add warning if cluster type is not prefixed by kapsule or multicloud * add attributepath to diag * remove usage of slices package --------- Co-authored-by: Pablo RUTH <[email protected]>
1 parent dd1c481 commit 8a2118e

File tree

1 file changed

+38
-19
lines changed

1 file changed

+38
-19
lines changed

scaleway/resource_k8s_cluster.go

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -276,9 +276,6 @@ func resourceScalewayK8SCluster() *schema.Resource {
276276
if err != nil {
277277
return err
278278
}
279-
280-
default:
281-
return fmt.Errorf("unknown cluster type %q", clusterType)
282279
}
283280
}
284281
return nil
@@ -325,6 +322,8 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
325322
// Create cluster
326323
////
327324

325+
var diags diag.Diagnostics
326+
328327
description, ok := d.GetOk("description")
329328
if !ok {
330329
description = ""
@@ -335,6 +334,15 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
335334
clusterType = ""
336335
}
337336

337+
if !strings.HasPrefix(d.Get("type").(string), "kapsule") && !strings.HasPrefix(d.Get("type").(string), "multicloud") {
338+
diags = append(diags, diag.Diagnostic{
339+
Severity: diag.Warning,
340+
Summary: "Unexpected cluster type",
341+
Detail: fmt.Sprintf("The expected cluster type is one of %v, but got %s", []string{"kapsule", "multicloud", "kapsule-dedicated-*", "multicloud-dedicated-*"}, clusterType.(string)),
342+
AttributePath: cty.GetAttrPath("type"),
343+
})
344+
}
345+
338346
req := &k8s.CreateClusterRequest{
339347
Region: region,
340348
ProjectID: expandStringPtr(d.Get("project_id")),
@@ -441,7 +449,7 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
441449
// if one auto upgrade attribute is set, they all must be set.
442450
// if none is set, auto upgrade attributes will be computed.
443451
if !(okAutoUpgradeDay && okAutoUpgradeStartHour) {
444-
return diag.FromErr(fmt.Errorf("all field or zero field of auto_upgrade must be set"))
452+
return append(diag.FromErr(fmt.Errorf("all field or zero field of auto_upgrade must be set")), diags...)
445453
}
446454
}
447455

@@ -464,13 +472,13 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
464472
versionIsOnlyMinor := len(strings.Split(version, ".")) == 2
465473

466474
if versionIsOnlyMinor != clusterAutoUpgradeEnabled {
467-
return diag.FromErr(fmt.Errorf("minor version x.y must be used with auto upgrade enabled"))
475+
return append(diag.FromErr(fmt.Errorf("minor version x.y must be used with auto upgrade enabled")), diags...)
468476
}
469477

470478
if versionIsOnlyMinor {
471479
version, err = k8sGetLatestVersionFromMinor(ctx, k8sAPI, region, version)
472480
if err != nil {
473-
return diag.FromErr(err)
481+
return append(diag.FromErr(err), diags...)
474482
}
475483
}
476484

@@ -486,7 +494,7 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
486494

487495
res, err := k8sAPI.CreateCluster(req, scw.WithContext(ctx))
488496
if err != nil {
489-
return diag.FromErr(err)
497+
return append(diag.FromErr(err), diags...)
490498
}
491499

492500
d.SetId(newRegionalIDString(region, res.ID))
@@ -498,10 +506,10 @@ func resourceScalewayK8SClusterCreate(ctx context.Context, d *schema.ResourceDat
498506
_, err = waitK8SClusterPool(ctx, k8sAPI, region, res.ID, d.Timeout(schema.TimeoutCreate))
499507
}
500508
if err != nil {
501-
return diag.FromErr(err)
509+
return append(diag.FromErr(err), diags...)
502510
}
503511

504-
return resourceScalewayK8SClusterRead(ctx, d, meta)
512+
return append(resourceScalewayK8SClusterRead(ctx, d, meta), diags...)
505513
}
506514

507515
func resourceScalewayK8SClusterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
@@ -617,6 +625,17 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
617625
}
618626
}
619627

628+
var diags diag.Diagnostics
629+
630+
if !strings.HasPrefix(d.Get("type").(string), "kapsule") && !strings.HasPrefix(d.Get("type").(string), "multicloud") {
631+
diags = append(diags, diag.Diagnostic{
632+
Severity: diag.Warning,
633+
Summary: "Unexpected cluster type",
634+
Detail: fmt.Sprintf("The expected cluster type is one of %v, but got %s", []string{"kapsule", "multicloud", "kapsule-dedicated-*", "multicloud-dedicated-*"}, d.Get("type").(string)),
635+
AttributePath: cty.GetAttrPath("type"),
636+
})
637+
}
638+
620639
canUpgrade := false
621640

622641
////
@@ -674,13 +693,13 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
674693
versionIsOnlyMinor := len(strings.Split(version, ".")) == 2
675694

676695
if versionIsOnlyMinor != autoupgradeEnabled {
677-
return diag.FromErr(fmt.Errorf("minor version x.y must be used with auto upgrades enabled"))
696+
return append(diag.FromErr(fmt.Errorf("minor version x.y must be used with auto upgrades enabled")), diags...)
678697
}
679698

680699
if versionIsOnlyMinor {
681700
version, err = k8sGetLatestVersionFromMinor(ctx, k8sAPI, region, version)
682701
if err != nil {
683-
return diag.FromErr(err)
702+
return append(diag.FromErr(err), diags...)
684703
}
685704
}
686705

@@ -693,7 +712,7 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
693712
Region: region,
694713
}, scw.WithContext(ctx))
695714
if err != nil {
696-
return diag.FromErr(err)
715+
return append(diag.FromErr(err), diags...)
697716
}
698717

699718
if clusterResp.Version == version {
@@ -794,12 +813,12 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
794813
actual, planned := d.GetChange("private_network_id")
795814
if planned == "" && actual != "" {
796815
// It's not possible to remove the private network anymore
797-
return diag.FromErr(fmt.Errorf("it is only possible to change the private network attached to the cluster, but not to remove it"))
816+
return append(diag.FromErr(fmt.Errorf("it is only possible to change the private network attached to the cluster, but not to remove it")), diags...)
798817
}
799818
if actual == "" {
800819
err = migrateToPrivateNetworkCluster(ctx, d, meta)
801820
if err != nil {
802-
return diag.FromErr(err)
821+
return append(diag.FromErr(err), diags...)
803822
}
804823
}
805824
}
@@ -809,12 +828,12 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
809828
////
810829
_, err = k8sAPI.UpdateCluster(updateRequest, scw.WithContext(ctx))
811830
if err != nil {
812-
return diag.FromErr(err)
831+
return append(diag.FromErr(err), diags...)
813832
}
814833

815834
_, err = waitK8SCluster(ctx, k8sAPI, region, clusterID, d.Timeout(schema.TimeoutUpdate))
816835
if err != nil {
817-
return diag.FromErr(err)
836+
return append(diag.FromErr(err), diags...)
818837
}
819838

820839
////
@@ -829,16 +848,16 @@ func resourceScalewayK8SClusterUpdate(ctx context.Context, d *schema.ResourceDat
829848
}
830849
_, err = k8sAPI.UpgradeCluster(upgradeRequest)
831850
if err != nil {
832-
return diag.FromErr(err)
851+
return append(diag.FromErr(err), diags...)
833852
}
834853

835854
_, err = waitK8SCluster(ctx, k8sAPI, region, clusterID, d.Timeout(schema.TimeoutUpdate))
836855
if err != nil {
837-
return diag.FromErr(err)
856+
return append(diag.FromErr(err), diags...)
838857
}
839858
}
840859

841-
return resourceScalewayK8SClusterRead(ctx, d, meta)
860+
return append(resourceScalewayK8SClusterRead(ctx, d, meta), diags...)
842861
}
843862

844863
func resourceScalewayK8SClusterDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

0 commit comments

Comments
 (0)