Skip to content

Commit 0c2804d

Browse files
author
Aniruddha Basak
committed
Restructure code to have better readability
Signed-off-by: Aniruddha Basak <aniruddha.basak@syself.com>
1 parent 6301e5c commit 0c2804d

File tree

385 files changed

+251
-63273
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

385 files changed

+251
-63273
lines changed

go.mod

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/valyala/fasttemplate v1.2.2
1010
golang.org/x/mod v0.14.0
1111
golang.org/x/oauth2 v0.16.0
12-
gopkg.in/src-d/go-git.v4 v4.13.1
12+
gopkg.in/yaml.v2 v2.4.0
1313
gopkg.in/yaml.v3 v3.0.1
1414
helm.sh/helm/v3 v3.13.3
1515
)
@@ -39,7 +39,6 @@ require (
3939
github.com/docker/go-metrics v0.0.1 // indirect
4040
github.com/docker/go-units v0.5.0 // indirect
4141
github.com/emicklei/go-restful/v3 v3.10.2 // indirect
42-
github.com/emirpasic/gods v1.12.0 // indirect
4342
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
4443
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
4544
github.com/fatih/color v1.13.0 // indirect
@@ -68,11 +67,9 @@ require (
6867
github.com/huandu/xstrings v1.4.0 // indirect
6968
github.com/imdario/mergo v0.3.13 // indirect
7069
github.com/inconshreveable/mousetrap v1.1.0 // indirect
71-
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
7270
github.com/jmoiron/sqlx v1.3.5 // indirect
7371
github.com/josharian/intern v1.0.0 // indirect
7472
github.com/json-iterator/go v1.1.12 // indirect
75-
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect
7673
github.com/klauspost/compress v1.16.0 // indirect
7774
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
7875
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
@@ -84,7 +81,6 @@ require (
8481
github.com/mattn/go-runewidth v0.0.9 // indirect
8582
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
8683
github.com/mitchellh/copystructure v1.2.0 // indirect
87-
github.com/mitchellh/go-homedir v1.1.0 // indirect
8884
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
8985
github.com/mitchellh/reflectwalk v1.0.2 // indirect
9086
github.com/moby/locker v1.0.1 // indirect
@@ -105,14 +101,11 @@ require (
105101
github.com/prometheus/procfs v0.10.1 // indirect
106102
github.com/rubenv/sql-migrate v1.5.2 // indirect
107103
github.com/russross/blackfriday/v2 v2.1.0 // indirect
108-
github.com/sergi/go-diff v1.1.0 // indirect
109104
github.com/shopspring/decimal v1.3.1 // indirect
110105
github.com/sirupsen/logrus v1.9.3 // indirect
111106
github.com/spf13/cast v1.5.0 // indirect
112107
github.com/spf13/pflag v1.0.5 // indirect
113-
github.com/src-d/gcfg v1.4.0 // indirect
114108
github.com/valyala/bytebufferpool v1.0.0 // indirect
115-
github.com/xanzy/ssh-agent v0.2.1 // indirect
116109
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
117110
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
118111
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
@@ -132,9 +125,6 @@ require (
132125
google.golang.org/grpc v1.56.3 // indirect
133126
google.golang.org/protobuf v1.31.0 // indirect
134127
gopkg.in/inf.v0 v0.9.1 // indirect
135-
gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect
136-
gopkg.in/warnings.v0 v0.1.2 // indirect
137-
gopkg.in/yaml.v2 v2.4.0 // indirect
138128
k8s.io/api v0.28.4 // indirect
139129
k8s.io/apiextensions-apiserver v0.28.4 // indirect
140130
k8s.io/apimachinery v0.28.4 // indirect

go.sum

Lines changed: 0 additions & 45 deletions
Large diffs are not rendered by default.

pkg/clusterstack/config.go

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"strings"
2727

2828
"github.com/SovereignCloudStack/cluster-stack-operator/pkg/kubernetesversion"
29+
"github.com/SovereignCloudStack/cluster-stack-operator/pkg/version"
2930
"gopkg.in/yaml.v3"
3031
)
3132

@@ -44,45 +45,45 @@ type CsmctlConfig struct {
4445
}
4546

4647
// GetCsmctlConfig returns CsmctlConfig.
47-
func GetCsmctlConfig(path string) (*CsmctlConfig, error) {
48+
func GetCsmctlConfig(path string) (CsmctlConfig, error) {
4849
configPath := filepath.Join(path, "csmctl.yaml")
4950
configFileData, err := os.ReadFile(filepath.Clean(configPath))
5051
if err != nil {
51-
return nil, fmt.Errorf("failed to read csmctl config: %w", err)
52+
return CsmctlConfig{}, fmt.Errorf("failed to read csmctl config: %w", err)
5253
}
5354

54-
cs := &CsmctlConfig{}
55+
cs := CsmctlConfig{}
5556
if err := yaml.Unmarshal(configFileData, &cs); err != nil {
56-
return nil, fmt.Errorf("failed to unmarshal csmctl yaml: %w", err)
57+
return CsmctlConfig{}, fmt.Errorf("failed to unmarshal csmctl yaml: %w", err)
5758
}
5859

5960
if cs.Config.Provider.Type == "" {
60-
return nil, fmt.Errorf("provider type must not be empty")
61+
return CsmctlConfig{}, fmt.Errorf("provider type must not be empty")
6162
}
6263

6364
if len(cs.Config.Provider.Type) > 253 {
64-
return nil, fmt.Errorf("provider name must not be greater than 253")
65+
return CsmctlConfig{}, fmt.Errorf("provider name must not be greater than 253")
6566
}
6667

6768
match, err := regexp.MatchString(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`, cs.Config.Provider.Type)
6869
if err != nil {
69-
return nil, fmt.Errorf("failed to provider name match regex: %w", err)
70+
return CsmctlConfig{}, fmt.Errorf("failed to provider name match regex: %w", err)
7071
}
7172
if !match {
72-
return nil, fmt.Errorf("invalid provider type: %q", cs.Config.Provider.Type)
73+
return CsmctlConfig{}, fmt.Errorf("invalid provider type: %q", cs.Config.Provider.Type)
7374
}
7475

7576
if cs.Config.ClusterStackName == "" {
76-
return nil, fmt.Errorf("cluster stack name must not be empty")
77+
return CsmctlConfig{}, fmt.Errorf("cluster stack name must not be empty")
7778
}
7879

7980
// Validate kubernetes version
8081
matched, err := regexp.MatchString(`^v\d+\.\d+\.\d+$`, cs.Config.KubernetesVersion)
8182
if err != nil {
82-
return nil, fmt.Errorf("failed to kubernetes match regex: %w", err)
83+
return CsmctlConfig{}, fmt.Errorf("failed to kubernetes match regex: %w", err)
8384
}
8485
if !matched {
85-
return nil, fmt.Errorf("invalid kubernetes version: %q", cs.Config.KubernetesVersion)
86+
return CsmctlConfig{}, fmt.Errorf("invalid kubernetes version: %q", cs.Config.KubernetesVersion)
8687
}
8788

8889
return cs, nil
@@ -111,3 +112,22 @@ func (c *CsmctlConfig) ParseKubernetesVersion() (kubernetesversion.KubernetesVer
111112
Minor: minor,
112113
}, nil
113114
}
115+
116+
// GetClusterStackReleaseDirectoryName returns cluster stack release directory.
117+
// e.g. - docker-ferrol-1-27-v1/ .
118+
func GetClusterStackReleaseDirectoryName(metadata *MetaData, config *CsmctlConfig) (string, error) {
119+
// Parse the cluster stack version from dot format `v1-alpha.0` to a version way of struct
120+
// and parse the kubernetes version from `v1.27.3` to a major minor way
121+
// and create the release directory at the end.
122+
clusterStackVersion, err := version.New(metadata.Versions.ClusterStack)
123+
if err != nil {
124+
return "", fmt.Errorf("failed to parse cluster stack version: %w", err)
125+
}
126+
kubernetesVerion, err := config.ParseKubernetesVersion()
127+
if err != nil {
128+
return "", fmt.Errorf("failed to parse kubernetes version: %w", err)
129+
}
130+
clusterStackReleaseDirName := fmt.Sprintf("%s-%s-%s-%s", config.Config.Provider.Type, config.Config.ClusterStackName, kubernetesVerion.String(), clusterStackVersion.String())
131+
132+
return clusterStackReleaseDirName, nil
133+
}

pkg/clusterstack/metadata.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,46 @@ import (
2424
"gopkg.in/yaml.v3"
2525
)
2626

27-
// MetaData contains information of the metadata.yaml.
27+
// Component contains component.
28+
type Component struct {
29+
ClusterAddon string `yaml:"clusterAddon"`
30+
NodeImage string `yaml:"nodeImage"`
31+
}
32+
33+
// Versions contains version information.
34+
type Versions struct {
35+
ClusterStack string `yaml:"clusterStack"`
36+
Kubernetes string `yaml:"kubernetes"`
37+
Components Component `yaml:"components"`
38+
}
39+
40+
// MetaData contains metadata.
2841
type MetaData struct {
29-
APIVersion string `yaml:"apiVersion"`
30-
Versions struct {
31-
ClusterStack string `yaml:"clusterStack"`
32-
Kubernetes string `yaml:"kubernetes"`
33-
Components struct {
34-
ClusterAddon string `yaml:"clusterAddon"`
35-
NodeImage string `yaml:"nodeImage,omitempty"`
36-
} `yaml:"components"`
37-
} `yaml:"versions"`
42+
APIVersion string `yaml:"apiVersion"`
43+
Versions Versions `yaml:"versions"`
3844
}
3945

4046
// ParseMetaData parse the metadata file.
41-
func ParseMetaData(path string) (*MetaData, error) {
47+
func ParseMetaData(path string) (MetaData, error) {
4248
entries, err := os.ReadDir(path)
4349
if err != nil {
44-
return nil, fmt.Errorf("failed to read metadata directory: %w", err)
50+
return MetaData{}, fmt.Errorf("failed to read metadata directory: %w", err)
4551
}
4652

4753
if len(entries) != 1 {
48-
return nil, fmt.Errorf("ambiguous release found")
54+
return MetaData{}, fmt.Errorf("ambiguous release found")
4955
}
5056

5157
metadataPath := filepath.Join(path, entries[0].Name(), "metadata.yaml")
5258
fileInfo, err := os.ReadFile(filepath.Clean(metadataPath))
5359
if err != nil {
54-
return nil, fmt.Errorf("failed to read metadata file: %w", err)
60+
return MetaData{}, fmt.Errorf("failed to read metadata file: %w", err)
5561
}
5662

57-
metaData := &MetaData{}
63+
metaData := MetaData{}
5864

5965
if err := yaml.Unmarshal(fileInfo, &metaData); err != nil {
60-
return nil, fmt.Errorf("failed to unmarshal metadata yaml: %w", err)
66+
return MetaData{}, fmt.Errorf("failed to unmarshal metadata yaml: %w", err)
6167
}
6268

6369
return metaData, nil

pkg/clusterstack/mode.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package clusterstack
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/SovereignCloudStack/csmctl/pkg/hash"
7+
)
8+
9+
// HandleStableMode returns metadata for the stable mode.
10+
func HandleStableMode(gitHubReleasePath string, currentReleaseHash, latestReleaseHash hash.ReleaseHash) (MetaData, error) {
11+
metadata, err := ParseMetaData(gitHubReleasePath)
12+
if err != nil {
13+
return MetaData{}, fmt.Errorf("failed to parse metadata: %w", err)
14+
}
15+
16+
metadata.Versions.ClusterStack, err = BumpVersion(metadata.Versions.ClusterStack)
17+
if err != nil {
18+
return MetaData{}, fmt.Errorf("failed to bump cluster stack: %w", err)
19+
}
20+
fmt.Printf("Bumped ClusterStack Version: %s\n", metadata.Versions.ClusterStack)
21+
22+
if currentReleaseHash.ClusterAddonDir != latestReleaseHash.ClusterAddonDir || currentReleaseHash.ClusterAddonValues != latestReleaseHash.ClusterAddonValues {
23+
metadata.Versions.Components.ClusterAddon, err = BumpVersion(metadata.Versions.Components.ClusterAddon)
24+
if err != nil {
25+
return MetaData{}, fmt.Errorf("failed to bump cluster addon: %w", err)
26+
}
27+
fmt.Printf("Bumped ClusterAddon Version: %s\n", metadata.Versions.Components.ClusterAddon)
28+
} else {
29+
fmt.Printf("ClusterAddon Version unchanged: %s\n", metadata.Versions.Components.ClusterAddon)
30+
}
31+
32+
if currentReleaseHash.NodeImageDir != latestReleaseHash.NodeImageDir {
33+
metadata.Versions.Components.NodeImage, err = BumpVersion(metadata.Versions.Components.NodeImage)
34+
if err != nil {
35+
return MetaData{}, fmt.Errorf("failed to bump node image: %w", err)
36+
}
37+
fmt.Printf("Bumped NodeImage Version: %s\n", metadata.Versions.Components.NodeImage)
38+
} else {
39+
fmt.Printf("NodeImage Version unchanged: %s\n", metadata.Versions.Components.NodeImage)
40+
}
41+
42+
return metadata, nil
43+
}
44+
45+
// HandleHashMode returns metadata of Hash mode.
46+
func HandleHashMode(currentRelease hash.ReleaseHash, kubernetesVersion string) MetaData {
47+
clusterStackHash := currentRelease.GetClusterStackHash()
48+
clusterStackHash = fmt.Sprintf("v0-sha.%s", clusterStackHash)
49+
50+
return MetaData{
51+
APIVersion: "metadata.clusterstack.x-k8s.io/v1alpha1",
52+
Versions: Versions{
53+
Kubernetes: kubernetesVersion,
54+
ClusterStack: clusterStackHash,
55+
Components: Component{
56+
ClusterAddon: clusterStackHash,
57+
NodeImage: clusterStackHash,
58+
},
59+
},
60+
}
61+
}

0 commit comments

Comments
 (0)