Skip to content

Commit

Permalink
ensure the gsk template stay consistent when release is not changed
Browse files Browse the repository at this point in the history
relates to #397
  • Loading branch information
nvthongswansea committed Jan 7, 2025
1 parent dd615fa commit c0fb744
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions gridscale/resource_gridscale_k8s.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"net"
"net/http"
"regexp"
"sort"
"strings"
"time"

Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -533,7 +555,6 @@ func deriveK8sTemplateFromRelease(client *gsclient.Client, release string) (*gsc
if paasTemplate.Properties.Release == release {
derived = true
template = paasTemplate
break
}
}
}
Expand Down

0 comments on commit c0fb744

Please sign in to comment.