Skip to content

Commit 86daf6f

Browse files
author
Aniruddha Basak
authored
Add support for the custom mode (#124)
Add custom mode Signed-off-by: Aniruddha Basak <[email protected]>
1 parent 5d1b64a commit 86daf6f

File tree

2 files changed

+53
-6
lines changed

2 files changed

+53
-6
lines changed

pkg/clusterstack/mode.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package clusterstack
1919
import (
2020
"fmt"
2121

22+
"github.com/SovereignCloudStack/cluster-stack-operator/pkg/version"
2223
"github.com/SovereignCloudStack/csctl/pkg/git"
2324
"github.com/SovereignCloudStack/csctl/pkg/hash"
2425
)
@@ -84,3 +85,28 @@ func HandleHashMode(kubernetesVersion string) (*MetaData, error) {
8485
},
8586
}, nil
8687
}
88+
89+
// HandleCustomMode handles custom mode with version for all components.
90+
func HandleCustomMode(kubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion string) (MetaData, error) {
91+
if _, err := version.New(clusterStackVersion); err != nil {
92+
return MetaData{}, fmt.Errorf("failed to verify custom version for cluster stack: %q: %w", clusterStackVersion, err)
93+
}
94+
if _, err := version.New(clusterAddonVersion); err != nil {
95+
return MetaData{}, fmt.Errorf("failed to verify custom version for cluster addon: %q: %w", clusterAddonVersion, err)
96+
}
97+
if _, err := version.New(nodeImageVersion); err != nil {
98+
return MetaData{}, fmt.Errorf("failed to verify custom version for node image: %q: %w", nodeImageVersion, err)
99+
}
100+
101+
return MetaData{
102+
APIVersion: "metadata.clusterstack.x-k8s.io/v1alpha1",
103+
Versions: Versions{
104+
Kubernetes: kubernetesVersion,
105+
ClusterStack: clusterStackVersion,
106+
Components: Component{
107+
ClusterAddon: clusterAddonVersion,
108+
NodeImage: nodeImageVersion,
109+
},
110+
},
111+
}, nil
112+
}

pkg/cmd/create.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
const (
3737
stableMode = "stable"
3838
hashMode = "hash"
39+
customMode = "custom"
3940
)
4041

4142
var (
@@ -51,9 +52,12 @@ var (
5152
)
5253

5354
var (
54-
mode string
55-
outputDirectory string
56-
nodeImageRegistry string
55+
mode string
56+
outputDirectory string
57+
nodeImageRegistry string
58+
clusterStackVersion string
59+
clusterAddonVersion string
60+
nodeImageVersion string
5761
)
5862

5963
// CreateOptions contains config for creating a release.
@@ -82,6 +86,9 @@ func init() {
8286
createCmd.Flags().StringVarP(&mode, "mode", "m", "stable", "It defines the mode of the cluster stack manager")
8387
createCmd.Flags().StringVarP(&outputDirectory, "output", "o", "./.release", "It defines the output directory in which the release artifacts will be generated")
8488
createCmd.Flags().StringVarP(&nodeImageRegistry, "node-image-registry", "r", "", "It defines the node image registry. For example oci://ghcr.io/foo/bar/node-images/staging/")
89+
createCmd.Flags().StringVar(&clusterStackVersion, "cluster-stack-version", "", "It is used to specify the semver version for the cluster stack in the custom mode")
90+
createCmd.Flags().StringVar(&clusterAddonVersion, "cluster-addon-version", "", "It is used to specify the semver version for the cluster addon in the custom mode")
91+
createCmd.Flags().StringVar(&nodeImageVersion, "node-image-version", "", "It is used to specify the semver version for the node images in the custom mode")
8592
}
8693

8794
// GetCreateOptions create a Create Option for create command.
@@ -153,6 +160,21 @@ func GetCreateOptions(ctx context.Context, clusterStackPath string) (*CreateOpti
153160
return nil, fmt.Errorf("failed to handle stable mode: %w", err)
154161
}
155162
}
163+
case customMode:
164+
if clusterStackVersion == "" {
165+
return nil, fmt.Errorf("please specify a semver for custom version with --cluster-stack-version flag")
166+
}
167+
if clusterAddonVersion == "" {
168+
return nil, fmt.Errorf("please specify a semver for custom version with --cluster-addon-version flag")
169+
}
170+
if nodeImageVersion == "" {
171+
return nil, fmt.Errorf("please specify a semver for custom version with --node-image-version flag")
172+
}
173+
174+
createOption.Metadata, err = clusterstack.HandleCustomMode(createOption.Config.Config.KubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion)
175+
if err != nil {
176+
return nil, fmt.Errorf("failed to handle custom mode: %w", err)
177+
}
156178
}
157179

158180
releaseDirName, err := clusterstack.GetClusterStackReleaseDirectoryName(createOption.Metadata, createOption.Config)
@@ -175,9 +197,8 @@ func createAction(cmd *cobra.Command, args []string) error {
175197
}
176198
clusterStackPath := args[0]
177199

178-
if mode != stableMode && mode != hashMode {
179-
fmt.Println("The mode is ", mode)
180-
return fmt.Errorf("mode is not supported please choose from - stable, hash")
200+
if mode != stableMode && mode != hashMode && mode != customMode {
201+
return fmt.Errorf("mode %q is not supported please choose from - stable, hash or custom", mode)
181202
}
182203

183204
createOpts, err := GetCreateOptions(cmd.Context(), clusterStackPath)

0 commit comments

Comments
 (0)