Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pkg/clusterstack/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
type Component struct {
ClusterAddon string `yaml:"clusterAddon"`
NodeImage string `yaml:"nodeImage,omitempty"`
ClusterClass string `yaml:"clusterClass"`
}

// Versions contains version information.
Expand Down
28 changes: 26 additions & 2 deletions pkg/clusterstack/mode.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ func HandleStableMode(gitHubReleasePath string, currentReleaseHash, latestReleas
return nil, fmt.Errorf("failed to bump cluster stack: %w", err)
}

if currentReleaseHash.ClusterAddonDir != latestReleaseHash.ClusterAddonDir || currentReleaseHash.ClusterAddonValues != latestReleaseHash.ClusterAddonValues {
if currentReleaseHash.ClusterAddonDir != latestReleaseHash.ClusterAddonDir ||
currentReleaseHash.ClusterAddonValues != latestReleaseHash.ClusterAddonValues ||
currentReleaseHash.ClusterClassDir != latestReleaseHash.ClusterClassDir {
metadata.Versions.Components.ClusterAddon, err = BumpVersion(metadata.Versions.Components.ClusterAddon)
if err != nil {
return nil, fmt.Errorf("failed to bump cluster addon: %w", err)
Expand All @@ -58,6 +60,22 @@ func HandleStableMode(gitHubReleasePath string, currentReleaseHash, latestReleas
fmt.Printf("NodeImage Version unchanged: %s\n", metadata.Versions.Components.NodeImage)
}
}
if currentReleaseHash.ClusterClassDir != latestReleaseHash.ClusterClassDir {
metadata.Versions.Components.ClusterClass, err = BumpVersion(metadata.Versions.Components.ClusterClass)
if err != nil {
metadata.Versions.Components.ClusterClass = "v1"
fmt.Printf("Initial ClusterClass Version: %s\n", metadata.Versions.Components.ClusterClass)
//return nil, fmt.Errorf("failed to bump cluster class: %w", err)
} else {
fmt.Printf("Bumped ClusterClass Version: %s\n", metadata.Versions.Components.ClusterClass)
}
} else {
if metadata.Versions.Components.ClusterClass == "" {
fmt.Println("No ClusterClass Version.")
} else {
fmt.Printf("ClusterClass Version unchanged: %s\n", metadata.Versions.Components.ClusterClass)
}
}

return metadata, nil
}
Expand All @@ -75,19 +93,24 @@ func HandleHashMode(currentRelease cshash.ReleaseHash, kubernetesVersion string)
Components: Component{
ClusterAddon: clusterStackHash,
NodeImage: clusterStackHash,
ClusterClass: clusterStackHash,
},
},
}
}

// HandleCustomMode handles custom mode with version for all components.
func HandleCustomMode(kubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion string) (*MetaData, error) {
func HandleCustomMode(kubernetesVersion, clusterStackVersion, clusterAddonVersion,
clusterClassVersion, nodeImageVersion string) (*MetaData, error) {
if _, err := version.New(clusterStackVersion); err != nil {
return nil, fmt.Errorf("failed to verify custom version for cluster stack: %q: %w", clusterStackVersion, err)
}
if _, err := version.New(clusterAddonVersion); err != nil {
return nil, fmt.Errorf("failed to verify custom version for cluster addon: %q: %w", clusterAddonVersion, err)
}
if _, err := version.New(clusterClassVersion); err != nil {
return nil, fmt.Errorf("failed to verify custom version for cluster class: %q: %w", clusterClassVersion, err)
}
if _, err := version.New(nodeImageVersion); err != nil {
return nil, fmt.Errorf("failed to verify custom version for node image: %q: %w", nodeImageVersion, err)
}
Expand All @@ -99,6 +122,7 @@ func HandleCustomMode(kubernetesVersion, clusterStackVersion, clusterAddonVersio
ClusterStack: clusterStackVersion,
Components: Component{
ClusterAddon: clusterAddonVersion,
ClusterClass: clusterClassVersion,
NodeImage: nodeImageVersion,
},
},
Expand Down
10 changes: 9 additions & 1 deletion pkg/cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ var (
nodeImageRegistry string
clusterStackVersion string
clusterAddonVersion string
clusterClassVersion string
nodeImageVersion string
remote string
publish bool
Expand Down Expand Up @@ -95,6 +96,7 @@ func init() {
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(&clusterClassVersion, "cluster-class-version", "", "It is used to specify the semver version for the cluster class 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")
createCmd.Flags().StringVar(&remote, "remote", "github", "Which remote repository to use and thus which credentials are required. Currently supported are 'github' and 'oci'.")
createCmd.Flags().BoolVar(&publish, "publish", false, "Publish release after creation is done. This is only implemented for OCI currently.")
Expand Down Expand Up @@ -168,6 +170,7 @@ func GetCreateOptions(ctx context.Context, clusterStackPath string) (*CreateOpti
createOption.Metadata.Versions.ClusterStack = "v1"
createOption.Metadata.Versions.Components.ClusterAddon = "v1"
createOption.Metadata.Versions.Components.NodeImage = "v1"
createOption.Metadata.Versions.Components.ClusterClass = "v1"
} else {
if err := downloadReleaseAssets(ctx, latestRepoRelease, "./.tmp/release/", ac); err != nil {
return nil, fmt.Errorf("failed to download release asset: %w", err)
Expand Down Expand Up @@ -196,8 +199,12 @@ func GetCreateOptions(ctx context.Context, clusterStackPath string) (*CreateOpti
if nodeImageVersion == "" {
return nil, errors.New("please specify a semver for custom version with --node-image-version flag")
}
if clusterClassVersion == "" {
return nil, errors.New("please specify a semver for custom version with --cluster-class-version flag")
}

createOption.Metadata, err = clusterstack.HandleCustomMode(createOption.Config.Config.KubernetesVersion, clusterStackVersion, clusterAddonVersion, nodeImageVersion)
createOption.Metadata, err = clusterstack.HandleCustomMode(createOption.Config.Config.KubernetesVersion,
clusterStackVersion, clusterAddonVersion, clusterClassVersion, nodeImageVersion)
if err != nil {
return nil, fmt.Errorf("failed to handle custom mode: %w", err)
}
Expand Down Expand Up @@ -257,6 +264,7 @@ func createAction(cmd *cobra.Command, args []string) error {
func (c *CreateOptions) validateHash() error {
if c.CurrentReleaseHash.ClusterAddonDir == c.LatestReleaseHash.ClusterAddonDir &&
c.CurrentReleaseHash.ClusterAddonValues == c.LatestReleaseHash.ClusterAddonValues &&
c.CurrentReleaseHash.ClusterClassDir == c.LatestReleaseHash.ClusterClassDir &&
c.CurrentReleaseHash.NodeImageDir == c.LatestReleaseHash.NodeImageDir {
return errors.New("no change in the cluster stack")
}
Expand Down
9 changes: 8 additions & 1 deletion pkg/cshash/hash.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@ const (
clusterAddonDirName = "cluster-addon"
nodeImageDirName = "node-image"
clusterAddonValuesFileName = "cluster-addon-values.yaml"
clusterClassDirName = "cluster-class"
)

// ReleaseHash contains the information of release hash.
type ReleaseHash struct {
ClusterStack string `json:"clusterStack"`
ClusterAddonDir string `json:"clusterAddonDir"`
ClusterAddonValues string `json:"clusterAddonValues"`
ClusterClassDir string `json:"clusterClassDir"`
NodeImageDir string `json:"nodeImageDir,omitempty"`
}

Expand Down Expand Up @@ -80,7 +82,9 @@ func GetHash(path string) (ReleaseHash, error) {

for _, entry := range entries {
entryPath := filepath.Join(path, entry.Name())
if entry.IsDir() && (entry.Name() == clusterAddonDirName || entry.Name() == nodeImageDirName) {
if entry.IsDir() && (entry.Name() == clusterAddonDirName ||
entry.Name() == nodeImageDirName ||
entry.Name() == clusterClassDirName) {
hash, err := dirhash.HashDir(entryPath, "", dirhash.DefaultHash)
if err != nil {
return ReleaseHash{}, fmt.Errorf("failed to hash dir: %w", err)
Expand All @@ -92,6 +96,8 @@ func GetHash(path string) (ReleaseHash, error) {
releaseHash.ClusterAddonDir = hash
case nodeImageDirName:
releaseHash.NodeImageDir = hash
case clusterClassDirName:
releaseHash.ClusterClassDir = hash
default:
// Should not happen
return ReleaseHash{}, fmt.Errorf("unknown name type %s", entryPath)
Expand All @@ -114,6 +120,7 @@ func GetHash(path string) (ReleaseHash, error) {
func (r ReleaseHash) ValidateWithLatestReleaseHash(latestReleaseHash ReleaseHash) error {
if r.ClusterAddonDir == latestReleaseHash.ClusterAddonDir &&
r.ClusterAddonValues == latestReleaseHash.ClusterAddonValues &&
r.ClusterClassDir == latestReleaseHash.ClusterClassDir &&
r.NodeImageDir == latestReleaseHash.NodeImageDir {
return errors.New("no change in the cluster stack")
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading