feat: create extensionVersions by depth (#6286)

* feat: create extensionVersions by depth

* Apply suggestions from code review

Signed-off-by: hongming <coder.scala@gmail.com>

* Apply suggestions from code review

Signed-off-by: hongming <coder.scala@gmail.com>

---------

Signed-off-by: hongming <coder.scala@gmail.com>
Co-authored-by: joyceliu <joyceliu@yunify.com>
Co-authored-by: hongming <coder.scala@gmail.com>
This commit is contained in:
liujian
2024-11-26 10:47:36 +08:00
committed by GitHub
parent 238bd67b8f
commit 9c962d3cbf
7 changed files with 182 additions and 23 deletions

View File

@@ -26,10 +26,12 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/yaml"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/retry"
"k8s.io/klog/v2"
"k8s.io/utils/ptr"
clusterv1alpha1 "kubesphere.io/api/cluster/v1alpha1"
corev1alpha1 "kubesphere.io/api/core/v1alpha1"
"kubesphere.io/utils/helm"
@@ -188,6 +190,12 @@ func (r *RepositoryReconciler) syncExtensionsFromURL(ctx context.Context, repo *
}
for extensionName, versions := range index.Entries {
// check extensionName
if errs := validation.IsDNS1123Subdomain(extensionName); len(errs) > 0 {
logger.Info("invalid extension name", "extension", extensionName, "error", errs)
continue
}
extensionVersions := make([]corev1alpha1.ExtensionVersion, 0, len(versions))
for _, version := range versions {
if version.Metadata == nil {
@@ -247,25 +255,25 @@ func (r *RepositoryReconciler) syncExtensionsFromURL(ctx context.Context, repo *
extensionVersions = append(extensionVersions, extensionVersion)
}
latestExtensionVersion := getLatestExtensionVersion(extensionVersions)
if latestExtensionVersion == nil {
filteredVersions := filterExtensionVersions(extensionVersions, repo.Spec.Depth)
if len(filteredVersions) == 0 {
continue
}
extension, err := r.createOrUpdateExtension(ctx, repo, extensionName, latestExtensionVersion)
// update extension of latest extensionVersion
extension, err := r.createOrUpdateExtension(ctx, repo, extensionName, ptr.To(filteredVersions[0]))
if err != nil {
if errors.Is(err, extensionRepoConflict) {
continue
}
return fmt.Errorf("failed to create or update extension: %s", err)
}
for _, extensionVersion := range extensionVersions {
// create extensionVersions of filteredVersions
for _, extensionVersion := range filteredVersions {
if err := r.createOrUpdateExtensionVersion(ctx, extension, &extensionVersion); err != nil {
return fmt.Errorf("failed to create or update extension version: %s", err)
}
}
// remove extensionVersions of existVersions
if err := r.removeSuspendedExtensionVersion(ctx, repo, extension, extensionVersions); err != nil {
return fmt.Errorf("failed to remove suspended extension version: %s", err)
}