Skip to content

Commit

Permalink
Add support for the custom mode (#124)
Browse files Browse the repository at this point in the history
Add custom mode

Signed-off-by: Aniruddha Basak <aniruddha.basak@syself.com>
  • Loading branch information
aniruddha2000 committed May 23, 2024
1 parent 5d1b64a commit 86daf6f
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 6 deletions.
26 changes: 26 additions & 0 deletions pkg/clusterstack/mode.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package clusterstack
import (
"fmt"

"github.com/SovereignCloudStack/cluster-stack-operator/pkg/version"
"github.com/SovereignCloudStack/csctl/pkg/git"
"github.com/SovereignCloudStack/csctl/pkg/hash"
)
Expand Down Expand Up @@ -84,3 +85,28 @@ func HandleHashMode(kubernetesVersion string) (*MetaData, error) {
},
}, nil
}

// HandleCustomMode handles custom mode with version for all components.
func HandleCustomMode(kubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion string) (MetaData, error) {
if _, err := version.New(clusterStackVersion); err != nil {
return MetaData{}, fmt.Errorf("failed to verify custom version for cluster stack: %q: %w", clusterStackVersion, err)
}
if _, err := version.New(clusterAddonVersion); err != nil {
return MetaData{}, fmt.Errorf("failed to verify custom version for cluster addon: %q: %w", clusterAddonVersion, err)
}
if _, err := version.New(nodeImageVersion); err != nil {
return MetaData{}, fmt.Errorf("failed to verify custom version for node image: %q: %w", nodeImageVersion, err)
}

return MetaData{
APIVersion: "metadata.clusterstack.x-k8s.io/v1alpha1",
Versions: Versions{
Kubernetes: kubernetesVersion,
ClusterStack: clusterStackVersion,
Components: Component{
ClusterAddon: clusterAddonVersion,
NodeImage: nodeImageVersion,
},
},
}, nil
}
33 changes: 27 additions & 6 deletions pkg/cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
const (
stableMode = "stable"
hashMode = "hash"
customMode = "custom"
)

var (
Expand All @@ -51,9 +52,12 @@ var (
)

var (
mode string
outputDirectory string
nodeImageRegistry string
mode string
outputDirectory string
nodeImageRegistry string
clusterStackVersion string
clusterAddonVersion string
nodeImageVersion string
)

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

// GetCreateOptions create a Create Option for create command.
Expand Down Expand Up @@ -153,6 +160,21 @@ func GetCreateOptions(ctx context.Context, clusterStackPath string) (*CreateOpti
return nil, fmt.Errorf("failed to handle stable mode: %w", err)
}
}
case customMode:
if clusterStackVersion == "" {
return nil, fmt.Errorf("please specify a semver for custom version with --cluster-stack-version flag")
}
if clusterAddonVersion == "" {
return nil, fmt.Errorf("please specify a semver for custom version with --cluster-addon-version flag")
}
if nodeImageVersion == "" {
return nil, fmt.Errorf("please specify a semver for custom version with --node-image-version flag")
}

createOption.Metadata, err = clusterstack.HandleCustomMode(createOption.Config.Config.KubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion)

Check failure on line 174 in pkg/cmd/create.go

View workflow job for this annotation

GitHub Actions / Build and push manager image

cannot use clusterstack.HandleCustomMode(createOption.Config.Config.KubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion) (value of type "github.com/SovereignCloudStack/csctl/pkg/clusterstack".MetaData) as *"github.com/SovereignCloudStack/csctl/pkg/clusterstack".MetaData value in assignment
if err != nil {
return nil, fmt.Errorf("failed to handle custom mode: %w", err)
}
}

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

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

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

0 comments on commit 86daf6f

Please sign in to comment.