From c0fb744518008b3f6f67f170d5652da67045e820 Mon Sep 17 00:00:00 2001 From: Van Thong Nguyen Date: Tue, 7 Jan 2025 16:05:32 +0100 Subject: [PATCH] ensure the gsk template stay consistent when release is not changed relates to https://github.com/gridscale/terraform-provider-gridscale/pull/397 --- gridscale/resource_gridscale_k8s.go | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/gridscale/resource_gridscale_k8s.go b/gridscale/resource_gridscale_k8s.go index c6c931da..7b4a6568 100644 --- a/gridscale/resource_gridscale_k8s.go +++ b/gridscale/resource_gridscale_k8s.go @@ -8,6 +8,7 @@ import ( "net" "net/http" "regexp" + "sort" "strings" "time" @@ -396,7 +397,8 @@ func deriveK8sTemplateFromResourceDiff(client *gsclient.Client, d *schema.Resour case "version": return deriveK8sTemplateFromGSKVersion(client, version) case "release": - return deriveK8sTemplateFromRelease(client, release) + currenTemplateUUID := d.Get("service_template_uuid").(string) + return deriveK8sTemplateFromRelease(client, release, currenTemplateUUID) } return nil, nil } @@ -448,7 +450,8 @@ func deriveK8sTemplateFromResourceData(client *gsclient.Client, d *schema.Resour case "version": return deriveK8sTemplateFromGSKVersion(client, version) case "release": - return deriveK8sTemplateFromRelease(client, release) + currenTemplateUUID := d.Get("service_template_uuid").(string) + return deriveK8sTemplateFromRelease(client, release, currenTemplateUUID) } currentTemplateUUID := d.Get("service_template_uuid").(string) return deriveK8sTemplateFromUUID(client, currentTemplateUUID) @@ -517,11 +520,30 @@ func deriveK8sTemplateFromGSKVersion(client *gsclient.Client, version string) (* } // deriveK8sTemplateFromRelease derives the k8s service template from given release. -func deriveK8sTemplateFromRelease(client *gsclient.Client, release string) (*gsclient.PaaSTemplate, error) { +func deriveK8sTemplateFromRelease(client *gsclient.Client, release, currenTemplateUUID string) (*gsclient.PaaSTemplate, error) { paasTemplates, err := client.GetPaaSTemplateList(context.Background()) if err != nil { return nil, err } + + // Sort paasTemplates by version (ascending) + sort.Slice(paasTemplates, func(i, j int) bool { + return paasTemplates[i].Properties.Version < paasTemplates[j].Properties.Version + }) + + // if the current template's release is the same as the requested release, return the current template + // this is to prevent this function return a different template than the current one when the release is not changed + // E.g. Template of 1.30.4-gs0 and 1.30.5-gs0 have the same release 1.30. If a cluster is created with 1.30.4-gs0 + // via setting release="1.29", the function should return the current template 1.30.4-gs0, not 1.30.5-gs0. + if currenTemplateUUID != "" { + for _, paasTemplate := range paasTemplates { + if paasTemplate.Properties.ObjectUUID == currenTemplateUUID && + paasTemplate.Properties.Release == release { + return &paasTemplate, nil + } + } + } + var derived bool var releases []string var template gsclient.PaaSTemplate @@ -533,7 +555,6 @@ func deriveK8sTemplateFromRelease(client *gsclient.Client, release string) (*gsc if paasTemplate.Properties.Release == release { derived = true template = paasTemplate - break } } }