@@ -24,7 +24,8 @@ import (
2424 "strings"
2525
2626 "github.com/SovereignCloudStack/cluster-stack-operator/pkg/clusterstack"
27- "gopkg.in/yaml.v2"
27+ "github.com/SovereignCloudStack/cluster-stack-operator/pkg/version"
28+ "gopkg.in/yaml.v3"
2829)
2930
3031// Release contains information for ClusterStack release.
@@ -57,8 +58,9 @@ const (
5758func New (tag , downloadPath string ) (Release , bool , error ) {
5859 // downloadPath is the path where the release is downloaded.
5960 // The path is of the form: <downloadPath>/<clusterStackSuffix>/<tag>/
61+ // For example: /tmp/downloads/cluster-stacks/docker-ferrol-1-26-v2/
6062 downloadPath = filepath .Join (downloadPath , clusterStackSuffix , tag )
61- cs , err := clusterstack .NewFromString (tag )
63+ cs , err := clusterstack .NewFromClusterStackReleaseProperties (tag )
6264 if err != nil {
6365 return Release {}, false , fmt .Errorf ("failed to parse cluster stack release: %w" , err )
6466 }
@@ -92,6 +94,18 @@ func New(tag, downloadPath string) (Release, bool, error) {
9294 return rel , false , nil
9395}
9496
97+ // ConvertFromClusterClassToClusterStackFormat converts `docker-ferrol-1-27-v0-sha.3960147` way to
98+ // `docker-ferrol-1-27-v0-sha-3960147`.
99+ func ConvertFromClusterClassToClusterStackFormat (input string ) string {
100+ parts := strings .Split (input , "." )
101+
102+ if len (parts ) == 2 {
103+ return fmt .Sprintf ("%s-%s" , parts [0 ], parts [1 ])
104+ }
105+
106+ return input
107+ }
108+
95109func ensureMetadata (downloadPath , metadataFileName string ) (Metadata , error ) {
96110 // Read the metadata.yaml file from the release.
97111 metadataPath := filepath .Join (downloadPath , metadataFileName )
@@ -107,6 +121,25 @@ func ensureMetadata(downloadPath, metadataFileName string) (Metadata, error) {
107121 return Metadata {}, fmt .Errorf ("failed to unmarshal metadata: %w" , err )
108122 }
109123
124+ // Normalize the versions of metadata from v1-alpha.1 to v1-alpha-1 format.
125+ metaClusterStackVersion , err := version .New (metadata .Versions .ClusterStack )
126+ if err != nil {
127+ return Metadata {}, fmt .Errorf ("failed to parse ClusterStack version from metadata: %w" , err )
128+ }
129+ metadata .Versions .ClusterStack = metaClusterStackVersion .String ()
130+
131+ metaClusterAddonVersion , err := version .New (metadata .Versions .Components .ClusterAddon )
132+ if err != nil {
133+ return Metadata {}, fmt .Errorf ("failed to parse ClusterAddon version from metadata: %w" , err )
134+ }
135+ metadata .Versions .Components .ClusterAddon = metaClusterAddonVersion .String ()
136+
137+ metaNodeImageVersion , err := version .New (metadata .Versions .Components .NodeImage )
138+ if err != nil {
139+ return Metadata {}, fmt .Errorf ("failed to parse NodeImage version from metadata: %w" , err )
140+ }
141+ metadata .Versions .Components .NodeImage = metaNodeImageVersion .String ()
142+
110143 return metadata , nil
111144}
112145
@@ -165,13 +198,15 @@ func (r *Release) Validate() error {
165198
166199// clusterAddonChartName returns the helm chart name for cluster addon.
167200func (r * Release ) clusterAddonChartName () string {
168- return fmt .Sprintf ("%s-%s-%s-cluster-addon-%s" , r .ClusterStack .Provider , r .ClusterStack .Name , r .ClusterStack .KubernetesVersion , r .Meta .Versions .Components .ClusterAddon )
201+ clusterAddonVersion , _ := version .ParseVersionString (r .Meta .Versions .Components .ClusterAddon )
202+ return fmt .Sprintf ("%s-%s-%s-cluster-addon-%s" , r .ClusterStack .Provider , r .ClusterStack .Name , r .ClusterStack .KubernetesVersion , clusterAddonVersion .StringWithDot ())
169203}
170204
171205// ClusterAddonChartPath returns the helm chart name from the given path.
172206func (r * Release ) ClusterAddonChartPath () string {
173207 // we ignore the error here, since we already checked for the presence of the chart.
174- path , _ := r .helmChartNamePath (r .clusterAddonChartName ())
208+ name := r .clusterAddonChartName ()
209+ path , _ := r .helmChartNamePath (name )
175210 return path
176211}
177212
@@ -182,7 +217,7 @@ func (r *Release) ClusterAddonValuesPath() string {
182217
183218// clusterClassChartName returns the helm chart name for cluster class.
184219func (r * Release ) clusterClassChartName () string {
185- return fmt .Sprintf ("%s-%s-%s-cluster-class-%s" , r .ClusterStack .Provider , r .ClusterStack .Name , r .ClusterStack .KubernetesVersion , r .ClusterStack .Version .String ())
220+ return fmt .Sprintf ("%s-%s-%s-cluster-class-%s" , r .ClusterStack .Provider , r .ClusterStack .Name , r .ClusterStack .KubernetesVersion , r .ClusterStack .Version .StringWithDot ())
186221}
187222
188223// ClusterClassChartPath returns the absolute helm chart path for cluster class.
0 commit comments