From 7bc0b58fffff07c3acaf6426b8bad47845bb5eca Mon Sep 17 00:00:00 2001 From: Gianluca Mardente Date: Sat, 13 Jun 2026 09:43:04 +0200 Subject: [PATCH] (bug) Fix Reloader feature in agentless mode In agentless mode all Reloader instances are present in the management cluster. Addon-controller must tell sveltos-agent (also running in the management cluster) which Reloader instances are to be processed for a given cluster. The logic used is same used by event-manager for EventSource instances and healthcheck-manager for HealthCheck instances: updating a per cluster ConfigMap that contains the instance to process. This PR also enhances the reloader test to verify ConfigMap is created in agentless mode and contains the Reloader instance instance name. --- Makefile | 10 ++- config/default/manager_auth_proxy_patch.yaml | 2 +- config/default/manager_image_patch.yaml | 4 +- controllers/handlers_helm.go | 21 +++-- controllers/handlers_utils.go | 87 ++++++++++++++++++- go.mod | 40 ++++----- go.sum | 80 ++++++++--------- hack/tools/go.mod | 24 ++--- hack/tools/go.sum | 48 +++++----- lib/clusterops/reloader.go | 5 +- manifest/deployment-agentless.yaml | 6 +- manifest/deployment-shard.yaml | 6 +- manifest/extra-role-agentless.yaml | 34 ++++++++ manifest/manifest.yaml | 6 +- ...drift-detection-manager-in-mgmt-cluster.go | 4 +- ...ift-detection-manager-in-mgmt-cluster.yaml | 4 +- .../drift-detection-manager.go | 4 +- .../drift-detection-manager.yaml | 4 +- test/fv/auto_deploy_dependencies_test.go | 4 +- test/fv/drift_test.go | 20 ++--- test/fv/helm_failure_message_test.go | 2 +- test/fv/helm_test.go | 5 +- test/fv/reloader_test.go | 46 ++++++++++ test/fv/test_constants_test.go | 7 +- test/fv/tier_test.go | 8 +- 25 files changed, 331 insertions(+), 150 deletions(-) create mode 100644 manifest/extra-role-agentless.yaml diff --git a/Makefile b/Makefile index 1670e636..9d565359 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ OS ?= $(shell uname -s) OS := $(shell echo $(OS) | tr '[:upper:]' '[:lower:]') K8S_LATEST_VER ?= $(shell curl -s https://dl.k8s.io/release/stable.txt) export CONTROLLER_IMG ?= $(REGISTRY)/$(IMAGE_NAME) -TAG ?= v1.11.0 +TAG ?= main .PHONY: all all: build @@ -275,6 +275,7 @@ fv-agentless: $(KUBECTL) $(GINKGO) ## Run Sveltos Controller tests using existin $(KUBECTL) apply -f test/drift-detection-mgmt_cluster_common_manifest.yaml $(KUBECTL) apply -f manifest/drift_detection_manager_rbac.yaml $(KUBECTL) apply -f manifest/deployment-agentless.yaml + $(KUBECTL) apply -f manifest/extra-role-agentless.yaml sleep 60 @echo "Waiting for projectsveltos addon-controller to be available..." $(KUBECTL) wait --for=condition=Available deployment/addon-controller -n projectsveltos --timeout=$(TIMEOUT) @@ -468,6 +469,13 @@ deploy-crds: $(KUBECTL) ## Install libsveltos CRDs $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_configurationgroups.lib.projectsveltos.io.yaml $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_configurationbundles.lib.projectsveltos.io.yaml $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_sveltoslicenses.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_healthchecks.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_healthcheckreports.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_eventsources.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_eventreports.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_reloaders.lib.projectsveltos.io.yaml + $(KUBECTL) apply -f https://raw.githubusercontent.com/projectsveltos/libsveltos/$(TAG)/manifests/apiextensions.k8s.io_v1_customresourcedefinition_reloaderreports.lib.projectsveltos.io.yaml + deploy-projectsveltos: $(KUSTOMIZE) $(ENVSUBST) $(KUBECTL) # Load projectsveltos image into cluster diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml index 8d22fd04..8f8dea58 100644 --- a/config/default/manager_auth_proxy_patch.yaml +++ b/config/default/manager_auth_proxy_patch.yaml @@ -35,7 +35,7 @@ spec: - --shard-key= - --capi-onboard-annotation= - "--v=5" - - "--version=v1.11.0" + - "--version=main" - "--agent-in-mgmt-cluster=false" env: - name: GOMEMLIMIT diff --git a/config/default/manager_image_patch.yaml b/config/default/manager_image_patch.yaml index 65f14ebd..22ae3140 100644 --- a/config/default/manager_image_patch.yaml +++ b/config/default/manager_image_patch.yaml @@ -7,8 +7,8 @@ spec: template: spec: initContainers: - - image: docker.io/projectsveltos/addon-controller:v1.11.0 + - image: docker.io/projectsveltos/addon-controller:main name: initialization containers: - - image: docker.io/projectsveltos/addon-controller:v1.11.0 + - image: docker.io/projectsveltos/addon-controller:main name: controller diff --git a/controllers/handlers_helm.go b/controllers/handlers_helm.go index a5d31b52..3ea6f2dc 100644 --- a/controllers/handlers_helm.go +++ b/controllers/handlers_helm.go @@ -1838,11 +1838,22 @@ func repoAddOrUpdate(settings *cli.EnvSettings, name, repoURL string, registryOp if !registry.IsOCI(entry.URL) { logger.V(logs.LogInfo).Info("non OCI. Download index file.") - _, err = chartRepo.DownloadIndexFile() - if err != nil { - logger.V(logs.LogDebug).Info( - fmt.Sprintf("Failed to download repository index: %v", err)) - return err + type downloadResult struct{ err error } + done := make(chan downloadResult, 1) + go func() { + _, e := chartRepo.DownloadIndexFile() + done <- downloadResult{e} + }() + const indexDownloadTimeout = 90 * time.Second + select { + case r := <-done: + if r.err != nil { + logger.V(logs.LogDebug).Info( + fmt.Sprintf("Failed to download repository index: %v", r.err)) + return r.err + } + case <-time.After(indexDownloadTimeout): + return fmt.Errorf("timed out downloading index for repository %s", repoURL) } } diff --git a/controllers/handlers_utils.go b/controllers/handlers_utils.go index a9f9c803..4e1b24fd 100644 --- a/controllers/handlers_utils.go +++ b/controllers/handlers_utils.go @@ -57,6 +57,7 @@ import ( "github.com/projectsveltos/libsveltos/lib/deployer" "github.com/projectsveltos/libsveltos/lib/k8s_utils" logs "github.com/projectsveltos/libsveltos/lib/logsettings" + "github.com/projectsveltos/libsveltos/lib/mgmtagent" "github.com/projectsveltos/libsveltos/lib/patcher" "github.com/projectsveltos/libsveltos/lib/pullmode" libsveltostemplate "github.com/projectsveltos/libsveltos/lib/template" @@ -1646,8 +1647,90 @@ func updateReloaderWithDeployedResources(ctx context.Context, clusterSummary *co return err } - return clusterops.UpdateReloaderWithDeployedResources(ctx, reloaderClient, profileRef, feature, resources, - removeReloader, logger) + if err := clusterops.UpdateReloaderWithDeployedResources(ctx, reloaderClient, profileRef, feature, resources, + removeReloader, logger); err != nil { + return err + } + + if getAgentInMgmtCluster() { + reloaderName := clusterops.GetReloaderName(profileRef.Name, feature) + if removeReloader { + return removeReloaderFromConfigMap(ctx, getManagementClusterClient(), + clusterSummary.Spec.ClusterNamespace, clusterSummary.Spec.ClusterName, + clusterSummary.Spec.ClusterType, reloaderName, logger) + } + return addReloaderToConfigMap(ctx, getManagementClusterClient(), + clusterSummary.Spec.ClusterNamespace, clusterSummary.Spec.ClusterName, + clusterSummary.Spec.ClusterType, reloaderName, logger) + } + + return nil +} + +// addReloaderToConfigMap records the given Reloader instance in the per-cluster ConfigMap so that +// sveltos-agent running in the management cluster knows which Reloaders apply to this cluster. +func addReloaderToConfigMap(ctx context.Context, c client.Client, clusterNamespace, clusterName string, + clusterType libsveltosv1beta1.ClusterType, reloaderName string, logger logr.Logger) error { + + configMapName := mgmtagent.GetConfigMapName(clusterName, clusterType) + key := mgmtagent.GetKeyForReloader(reloaderName) + + return retry.RetryOnConflict(retry.DefaultRetry, func() error { + currentConfigMap := &corev1.ConfigMap{} + err := c.Get(ctx, types.NamespacedName{Namespace: clusterNamespace, Name: configMapName}, currentConfigMap) + if err != nil { + if apierrors.IsNotFound(err) { + currentConfigMap = &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: clusterNamespace, + Name: configMapName, + }, + Data: map[string]string{ + key: reloaderName, + }, + } + logger.V(logs.LogDebug).Info(fmt.Sprintf("creating entry %s in ConfigMap %s/%s", + key, clusterNamespace, configMapName)) + return c.Create(ctx, currentConfigMap) + } + return err + } + + if currentConfigMap.Data == nil { + currentConfigMap.Data = map[string]string{} + } + currentConfigMap.Data[key] = reloaderName + logger.V(logs.LogDebug).Info(fmt.Sprintf("updating entry %s in ConfigMap %s/%s", + key, clusterNamespace, configMapName)) + return c.Update(ctx, currentConfigMap) + }) +} + +// removeReloaderFromConfigMap removes the given Reloader instance entry from the per-cluster ConfigMap. +func removeReloaderFromConfigMap(ctx context.Context, c client.Client, clusterNamespace, clusterName string, + clusterType libsveltosv1beta1.ClusterType, reloaderName string, logger logr.Logger) error { + + configMapName := mgmtagent.GetConfigMapName(clusterName, clusterType) + key := mgmtagent.GetKeyForReloader(reloaderName) + + return retry.RetryOnConflict(retry.DefaultRetry, func() error { + currentConfigMap := &corev1.ConfigMap{} + err := c.Get(ctx, types.NamespacedName{Namespace: clusterNamespace, Name: configMapName}, currentConfigMap) + if err != nil { + if apierrors.IsNotFound(err) { + return nil + } + return err + } + + if _, ok := currentConfigMap.Data[key]; !ok { + return nil + } + delete(currentConfigMap.Data, key) + logger.V(logs.LogDebug).Info(fmt.Sprintf("removing entry %s from ConfigMap %s/%s", + key, clusterNamespace, configMapName)) + return c.Update(ctx, currentConfigMap) + }) } // Reloader instances reside in the same cluster as the sveltos-agent component. diff --git a/go.mod b/go.mod index ec6eb699..369c1ed4 100644 --- a/go.mod +++ b/go.mod @@ -8,29 +8,29 @@ require ( github.com/TwiN/go-color v1.4.1 github.com/dariubs/percent v1.0.0 github.com/docker/cli v29.5.3+incompatible - github.com/fluxcd/pkg/apis/meta v1.28.0 + github.com/fluxcd/pkg/apis/meta v1.30.0 github.com/fluxcd/pkg/http/fetch v0.25.0 github.com/fluxcd/pkg/tar v1.2.0 github.com/fluxcd/source-controller/api v1.8.5 github.com/gdexlab/go-render v1.0.1 github.com/go-logr/logr v1.4.3 github.com/hexops/gotextdiff v1.0.3 - github.com/onsi/ginkgo/v2 v2.29.0 + github.com/onsi/ginkgo/v2 v2.30.0 github.com/onsi/gomega v1.41.0 github.com/pkg/errors v0.9.1 - github.com/projectsveltos/libsveltos v1.11.0 + github.com/projectsveltos/libsveltos v1.11.1 github.com/prometheus/client_golang v1.23.2 github.com/robfig/cron v1.2.0 github.com/spf13/pflag v1.0.10 github.com/yuin/gopher-lua v1.1.2 golang.org/x/text v0.38.0 - helm.sh/helm/v4 v4.2.0 - k8s.io/api v0.36.1 - k8s.io/apiextensions-apiserver v0.36.1 - k8s.io/apimachinery v0.36.1 - k8s.io/cli-runtime v0.36.1 - k8s.io/client-go v0.36.1 - k8s.io/component-base v0.36.1 + helm.sh/helm/v4 v4.2.1 + k8s.io/api v0.36.2 + k8s.io/apiextensions-apiserver v0.36.2 + k8s.io/apimachinery v0.36.2 + k8s.io/cli-runtime v0.36.2 + k8s.io/client-go v0.36.2 + k8s.io/component-base v0.36.2 k8s.io/klog/v2 v2.140.0 k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 sigs.k8s.io/cluster-api v1.13.2 @@ -68,7 +68,7 @@ require ( github.com/extism/go-sdk v1.7.1 // indirect github.com/fatih/color v1.19.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fluxcd/cli-utils v1.2.0 // indirect + github.com/fluxcd/cli-utils v1.2.1 // indirect github.com/fluxcd/pkg/apis/acl v0.9.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect @@ -136,7 +136,7 @@ require ( github.com/spf13/cast v1.10.0 // indirect github.com/spf13/cobra v1.10.2 // indirect github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect - github.com/tetratelabs/wazero v1.11.0 // indirect + github.com/tetratelabs/wazero v1.12.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xlab/treeprint v1.2.0 // indirect github.com/zeebo/blake3 v0.2.4 // indirect @@ -151,14 +151,14 @@ require ( go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect golang.org/x/mod v0.36.0 // indirect - golang.org/x/net v0.54.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.21.0 // indirect - golang.org/x/sys v0.44.0 // indirect - golang.org/x/term v0.43.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/term v0.44.0 // indirect golang.org/x/time v0.15.0 // indirect golang.org/x/tools v0.45.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect @@ -170,12 +170,12 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.4.0 // indirect - k8s.io/apiserver v0.36.1 // indirect + k8s.io/apiserver v0.36.2 // indirect k8s.io/cluster-bootstrap v0.36.0 // indirect k8s.io/kube-openapi v0.0.0-20260427204847-8949caaa1199 // indirect - k8s.io/kubectl v0.36.0 // indirect - k8s.io/streaming v0.36.1 // indirect - oras.land/oras-go/v2 v2.6.0 // indirect + k8s.io/kubectl v0.36.1 // indirect + k8s.io/streaming v0.36.2 // indirect + oras.land/oras-go/v2 v2.6.1 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect diff --git a/go.sum b/go.sum index 4d110aa3..ceefb980 100644 --- a/go.sum +++ b/go.sum @@ -90,12 +90,12 @@ github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/cli-utils v1.2.0 h1:1o07pXTMxJ/XJ1GpAbLtjdXwfCUMq4Ku1OcnvJHLohI= -github.com/fluxcd/cli-utils v1.2.0/go.mod h1:d5HdTDdR5sCbsIbgtOQ7x7srKYwYeZORU6CD2yn4j/M= +github.com/fluxcd/cli-utils v1.2.1 h1:ug9CicKW7H9QXnvNDapTSKuryZvWcu4Nw7pRvQa6jDY= +github.com/fluxcd/cli-utils v1.2.1/go.mod h1:cky6M6eHvTQkoPtsuFYLIgAMYdpTCSLoor4IA6vueSw= github.com/fluxcd/pkg/apis/acl v0.9.0 h1:wBpgsKT+jcyZEcM//OmZr9RiF8klL3ebrDp2u2ThsnA= github.com/fluxcd/pkg/apis/acl v0.9.0/go.mod h1:TttNS+gocsGLwnvmgVi3/Yscwqrjc17+vhgYfqkfrV4= -github.com/fluxcd/pkg/apis/meta v1.28.0 h1:eJjMlLnfObnh23cyUB6xiIwDbgJaRU2MgfzzuilLFxI= -github.com/fluxcd/pkg/apis/meta v1.28.0/go.mod h1:3DmYMnyH3XdY8/g2gXfsVIGEd/zpcB2PEkuurv2vgHU= +github.com/fluxcd/pkg/apis/meta v1.30.0 h1:26TOd1hbamH3c5KOb/CIMGpUDB4G4JV+WCcPyUhmuaM= +github.com/fluxcd/pkg/apis/meta v1.30.0/go.mod h1:q1YjUeCmf0syhkZoMcRmP3pkBaLKFLl7g0mUvVGG4CM= github.com/fluxcd/pkg/http/fetch v0.25.0 h1:BM2sv9MygBBQ7+G+ISuTEGLVRV4GX9bpKK5UoAKLiQo= github.com/fluxcd/pkg/http/fetch v0.25.0/go.mod h1:UOpeGiEBB+I7jW8uMBdptnvWa4zlyGnGfGwUxtzM4vo= github.com/fluxcd/pkg/tar v1.2.0 h1:T6WFB5M0YRHktlrgdKNskqpdp76TVDdWTOeuWz33CFs= @@ -254,8 +254,8 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.29.0 h1:rfh+ZFjgJhYWRoIqVf3Uwx/W20yLrcrE2h2GmYVRaag= -github.com/onsi/ginkgo/v2 v2.29.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= +github.com/onsi/ginkgo/v2 v2.30.0 h1:zxM/9XneXFIy64j6/wAmBIX4zRC7Hu6U8XFNZvDnCQc= +github.com/onsi/ginkgo/v2 v2.30.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= github.com/onsi/gomega v1.41.0 h1:OwKp4pXNgVxf6sCplzYo794OFNuoL2q2SBMU5NSWOjA= github.com/onsi/gomega v1.41.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A= github.com/opencontainers/go-digest v1.0.1-0.20260423074420-acc66fb5367c h1:dTJQx6HDrRNmA3p5JlfVYw81R3g2RfWdG0+ZBaJeqcc= @@ -273,8 +273,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= -github.com/projectsveltos/libsveltos v1.11.0 h1:E67QyQMj2VNTGisBQJI0AYenR9OFKUK3v1OSFu/9jCc= -github.com/projectsveltos/libsveltos v1.11.0/go.mod h1:B9tm32CB/AKIqmy/J02NmIUiwatec3NR1RcW5W/v0UM= +github.com/projectsveltos/libsveltos v1.11.1 h1:7Hjs7+6MEYgPzLjeYZkaRFZVPg1hJqOxml477Q6n23o= +github.com/projectsveltos/libsveltos v1.11.1/go.mod h1:B9tm32CB/AKIqmy/J02NmIUiwatec3NR1RcW5W/v0UM= github.com/projectsveltos/lua-utils/glua-json v0.0.0-20251212200258-2b3cdcb7c0f5 h1:khnc+994UszxZYu69J+R5FKiLA/Nk1JQj0EYAkwTWz0= github.com/projectsveltos/lua-utils/glua-json v0.0.0-20251212200258-2b3cdcb7c0f5/go.mod h1:yVL8KQFa9tmcxgwl9nwIMtKgtmIVC1zaFRSCfOwYvPY= github.com/projectsveltos/lua-utils/glua-runes v0.0.0-20251212200258-2b3cdcb7c0f5 h1:YbsebwRwTRhV8QacvEAdFqxcxHdeu7JTVtsBovbkgos= @@ -341,8 +341,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 h1:ZF+QBjOI+tILZjBaFj3HgFonKXUcwgJ4djLb6i42S3Q= github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834/go.mod h1:m9ymHTgNSEjuxvw8E7WWe4Pl4hZQHXONY8wE6dMLaRk= -github.com/tetratelabs/wazero v1.11.0 h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA= -github.com/tetratelabs/wazero v1.11.0/go.mod h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU= +github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU= +github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -423,8 +423,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0= golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -433,8 +433,8 @@ golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -447,10 +447,10 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= @@ -492,36 +492,36 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v4 v4.2.0 h1:J+0TmTtPK2NuS6z9Z2WOcIX0nGGJylokEZLt0fi0X4U= -helm.sh/helm/v4 v4.2.0/go.mod h1:sDQRGAct/I/ogTvOX8QqE/8bBWuLH4BHbB3QFL5G3do= -k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY= -k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo= -k8s.io/apiextensions-apiserver v0.36.1 h1:6JfYmPUsuUIHuN+3QxutXYWj492RqF5fBSx67GYK5Ks= -k8s.io/apiextensions-apiserver v0.36.1/go.mod h1:pLzZin90riwisdzKwv/GoTwENooytoIx5zWJb4Hkby8= -k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA= -k8s.io/apimachinery v0.36.1/go.mod h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8= -k8s.io/apiserver v0.36.1 h1:iMS5V+rPUertv5P9RaqJgmHHTuh4quWpoxchvMUY+JY= -k8s.io/apiserver v0.36.1/go.mod h1:Cby1PbLWztu0GDOxoO6iFOyyqIsziHNEW+w9zVQ22Kw= -k8s.io/cli-runtime v0.36.1 h1:yuC/BGnnj1YYPh6D1P+pZnzinCs6DvMq86yAeNqoqzM= -k8s.io/cli-runtime v0.36.1/go.mod h1:ZQWHGt8xAF7KnviB79vX0lYNyUUqKIpU+LQg7exuFAw= -k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0= -k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU= +helm.sh/helm/v4 v4.2.1 h1:esMHK7az2udPJvsRLA1EsxB7lJwqXcsb3biYnlFIjrg= +helm.sh/helm/v4 v4.2.1/go.mod h1:dp3ihfy1AhCLKANDaPETmVWhqPkOmwvJtpK/biHfopE= +k8s.io/api v0.36.2 h1:TF6YDLIzKfccK7cq9YpTcGX8TJmEkHVRv78DM51fRYY= +k8s.io/api v0.36.2/go.mod h1:F4LbMO4brjZYh7yFkXWhynSvtB7YauxV4c+HHkNRGNg= +k8s.io/apiextensions-apiserver v0.36.2 h1:3O5gqOj/dt2XWWbpMe+TXWpE9yU6pjM/tXxtHHJT/K4= +k8s.io/apiextensions-apiserver v0.36.2/go.mod h1:cL1tBWe8XSaP1H30iWKGo7hf6iAUUUJPEU70dskmAnA= +k8s.io/apimachinery v0.36.2 h1:0PE/W/WNy1UX61NLbXY5TMbJ6UwLL6E6lAPkYrKFxbQ= +k8s.io/apimachinery v0.36.2/go.mod h1:fvf/HOLXq9RId0rnDIbN1OEBvHXdQbLMM8nu0LcBUf4= +k8s.io/apiserver v0.36.2 h1:6vMnkmHZPeBloNkHUhmZYq7Ylv8WIB8xjyEl+eSt26E= +k8s.io/apiserver v0.36.2/go.mod h1:9PoQ2ikCytrZyZg11mGhLEF5m8Rgsb5FJmYJ4Wvnl1k= +k8s.io/cli-runtime v0.36.2 h1:CconTvEeV4DJs4ZX3HQKCFbFRGsm6OtuBM9yjmMP2VM= +k8s.io/cli-runtime v0.36.2/go.mod h1:LddcjiMf4YlnHO7c1Y7rEtDqL84FyiYVLco7V679GUU= +k8s.io/client-go v0.36.2 h1:bfgxmFKc9CgqsgX4xKLAAdmTQlWee7Ob/HlDOrJ5TBI= +k8s.io/client-go v0.36.2/go.mod h1:1vgO4OAlfPnoLcb+Rze2GF5rAr14w8qjrYMoyXJzQj0= k8s.io/cluster-bootstrap v0.36.0 h1:qh2yyP86NmlHaGFn/xXNv+sStL+kRaGE2125DeP6H78= k8s.io/cluster-bootstrap v0.36.0/go.mod h1:acf/PNjOL4lj0E5SM57yiiBTT8amthsyYs/KLNvEc4A= -k8s.io/component-base v0.36.1 h1:iG6GsELftXqTNG9HG6kiVjatSgAw1sf5pJ6R5a6N0kA= -k8s.io/component-base v0.36.1/go.mod h1:nf9XPlntRdqO6WMeEWAA5F93Y4ICZQdeT9GeqLDB3JI= +k8s.io/component-base v0.36.2 h1:Z0VH80O7Ng0HDZnZj3WRR3urEGa0kTwmO8CwEwjVK1w= +k8s.io/component-base v0.36.2/go.mod h1:mGfFOA7Gwpdm1VW2cwSQYbiDIlz8GD2WGwH88QSeCyA= k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc= k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0= k8s.io/kube-openapi v0.0.0-20260427204847-8949caaa1199 h1:sWu4Td5mgJlwunsUydnhKEAfNUHM7hm1wfKEQmD7G5c= k8s.io/kube-openapi v0.0.0-20260427204847-8949caaa1199/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0= -k8s.io/kubectl v0.36.0 h1:hEGr8NvIm2Wjqs2Xy48Uzmvo6lpHdGKlLyMvau2gTms= -k8s.io/kubectl v0.36.0/go.mod h1:iDe8aV5BEi45W8k+5n71I2pJ/nwE0PHDu+/2cejzYoo= -k8s.io/streaming v0.36.1 h1:L+K68n4Gg940BGNNYtUBvL1WTLL0YnKT3s+P1MNAmR4= -k8s.io/streaming v0.36.1/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s= +k8s.io/kubectl v0.36.1 h1:96HqS9twIdHM0MlJLTwbo14b9kUKPkOzZ4tlRDLv4qI= +k8s.io/kubectl v0.36.1/go.mod h1:/DGPAIewKsFWF9VFgGvkPhao2Ev4SNuE3BioZo8yPbk= +k8s.io/streaming v0.36.2 h1:NSKthPPg9UFSKsRauVJUVGH2Dvn8fhKmY4qrMkw/p98= +k8s.io/streaming v0.36.2/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s= k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 h1:wU4tMEhLGgIbLvXQb1cfN+EcM0wf7zC6CPF+C79jroc= k8s.io/utils v0.0.0-20260507154919-ff6756f316d2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= -oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc= -oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o= +oras.land/oras-go/v2 v2.6.1 h1:bonOEkjLfp8tt6qXWRRWP6p1F+9octchOf2EqnWB4Zs= +oras.land/oras-go/v2 v2.6.1/go.mod h1:dhtFrFOuZuDtAVeZ9FUnaa5zfzplG3ZnFX9/uH1J/Yk= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 h1:hSfpvjjTQXQY2Fol2CS0QHMNs/WI1MOSGzCm1KhM5ec= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= sigs.k8s.io/cluster-api v1.13.2 h1:NVdbVLmh6IyfdtENQAi80AijJf/FjfQLODz/6caDjlc= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index a4acaabd..3826855a 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -4,10 +4,10 @@ go 1.26.4 require ( github.com/a8m/envsubst v1.4.3 - github.com/onsi/ginkgo/v2 v2.29.0 + github.com/onsi/ginkgo/v2 v2.30.0 golang.org/x/oauth2 v0.36.0 - golang.org/x/tools v0.45.0 - k8s.io/client-go v0.36.1 + golang.org/x/tools v0.46.0 + k8s.io/client-go v0.36.2 sigs.k8s.io/controller-tools v0.21.0 ) @@ -48,21 +48,21 @@ require ( github.com/x448/float16 v0.8.4 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/mod v0.36.0 // indirect - golang.org/x/net v0.54.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.44.0 // indirect - golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6 // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/net v0.56.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/telemetry v0.0.0-20260610154732-fb80ec83bdd9 // indirect + golang.org/x/term v0.44.0 // indirect + golang.org/x/text v0.38.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.36.1 // indirect + k8s.io/api v0.36.2 // indirect k8s.io/apiextensions-apiserver v0.36.0 // indirect - k8s.io/apimachinery v0.36.1 // indirect + k8s.io/apimachinery v0.36.2 // indirect k8s.io/code-generator v0.36.0 // indirect k8s.io/gengo/v2 v2.0.0-20260408192533-25e2208e0dc3 // indirect k8s.io/klog/v2 v2.140.0 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index 7dd53e0e..c43d7a3d 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -124,8 +124,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.29.0 h1:rfh+ZFjgJhYWRoIqVf3Uwx/W20yLrcrE2h2GmYVRaag= -github.com/onsi/ginkgo/v2 v2.29.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= +github.com/onsi/ginkgo/v2 v2.30.0 h1:zxM/9XneXFIy64j6/wAmBIX4zRC7Hu6U8XFNZvDnCQc= +github.com/onsi/ginkgo/v2 v2.30.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= github.com/onsi/gomega v1.40.0 h1:Vtol0e1MghCD2ZVIilPDIg44XSL9l2QAn8ZNaljWcJc= github.com/onsi/gomega v1.40.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -194,27 +194,27 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0= golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU= -golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= -golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= +golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6 h1:HjU6IWBiAgRIdAJ9/y1rwCn+UELEmwV+VsTLzj/W4sE= -golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6/go.mod h1:Eqhaxk/wZsWEH8CRxLwj6xzEJbz7k1EFGqx7nyCoabE= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260610154732-fb80ec83bdd9 h1:FjUup8XrRy7lv+XHONi6KKUSizeF2NnVrTnz/HhbohQ= +golang.org/x/telemetry v0.0.0-20260610154732-fb80ec83bdd9/go.mod h1:3AWMyWHS+caVoiEXpiq6+tzKA40J4vQT3MYr80ZtQpc= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= -golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -241,16 +241,16 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY= -k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo= +k8s.io/api v0.36.2 h1:TF6YDLIzKfccK7cq9YpTcGX8TJmEkHVRv78DM51fRYY= +k8s.io/api v0.36.2/go.mod h1:F4LbMO4brjZYh7yFkXWhynSvtB7YauxV4c+HHkNRGNg= k8s.io/apiextensions-apiserver v0.36.0 h1:Wt7E8J+VBCbj4FjiBfDTK/neXDDjyJVJc7xfuOHImZ0= k8s.io/apiextensions-apiserver v0.36.0/go.mod h1:kGDjH0msuiIB3tgsYRV0kS9GqpMYMUsQ3GHv7TApyug= -k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA= -k8s.io/apimachinery v0.36.1/go.mod h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8= +k8s.io/apimachinery v0.36.2 h1:0PE/W/WNy1UX61NLbXY5TMbJ6UwLL6E6lAPkYrKFxbQ= +k8s.io/apimachinery v0.36.2/go.mod h1:fvf/HOLXq9RId0rnDIbN1OEBvHXdQbLMM8nu0LcBUf4= k8s.io/apiserver v0.36.0 h1:Jg5OFAENUACByUCg15CmhZAYrr5ZyJ+jodyA1mHl3YE= k8s.io/apiserver v0.36.0/go.mod h1:mHvwdHf+qKEm+1/hYm756SV+oREOKSPnsjagOpx6Vho= -k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0= -k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU= +k8s.io/client-go v0.36.2 h1:bfgxmFKc9CgqsgX4xKLAAdmTQlWee7Ob/HlDOrJ5TBI= +k8s.io/client-go v0.36.2/go.mod h1:1vgO4OAlfPnoLcb+Rze2GF5rAr14w8qjrYMoyXJzQj0= k8s.io/code-generator v0.36.0 h1:XWAkrhnArm0VWMmSFO7kyB+wE2LROwep7hEH0GPGkqA= k8s.io/code-generator v0.36.0/go.mod h1:Tr2UhfBRdlyRoadfob9aPCmmGe8PUs5XPK9MEJ2nx+w= k8s.io/component-base v0.36.0 h1:hFjEktssxiJhrK1zfybkH4kJOi8iZuF+mIDCqS5+jRo= diff --git a/lib/clusterops/reloader.go b/lib/clusterops/reloader.go index 518371cf..0010cc72 100644 --- a/lib/clusterops/reloader.go +++ b/lib/clusterops/reloader.go @@ -137,7 +137,8 @@ func deployReloaderInstance(ctx context.Context, reloaderClient client.Client, return reloaderClient.Update(ctx, reloader) } -func getReloaderName(profileName string, feature libsveltosv1beta1.FeatureID) string { +// GetReloaderName returns the name used for a Reloader instance created for a given profile and feature. +func GetReloaderName(profileName string, feature libsveltosv1beta1.FeatureID) string { return fmt.Sprintf("%s--%s", profileName, strings.ToLower(string(feature))) } @@ -146,7 +147,7 @@ func getReloader(profileName string, feature libsveltosv1beta1.FeatureID, return &libsveltosv1beta1.Reloader{ ObjectMeta: metav1.ObjectMeta{ - Name: getReloaderName(profileName, feature), + Name: GetReloaderName(profileName, feature), Labels: getReloaderLabels(profileName, feature), Annotations: getReloaderAnnotations(), }, diff --git a/manifest/deployment-agentless.yaml b/manifest/deployment-agentless.yaml index 4ec2aad9..f9834fbe 100644 --- a/manifest/deployment-agentless.yaml +++ b/manifest/deployment-agentless.yaml @@ -26,7 +26,7 @@ spec: - --shard-key= - --capi-onboard-annotation= - --v=5 - - --version=v1.11.0 + - --version=main - --agent-in-mgmt-cluster=true command: - /manager @@ -43,7 +43,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main livenessProbe: failureThreshold: 3 httpGet: @@ -101,7 +101,7 @@ spec: fieldPath: metadata.namespace - name: IS_INITIALIZATION value: "true" - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main name: initialization securityContext: allowPrivilegeEscalation: false diff --git a/manifest/deployment-shard.yaml b/manifest/deployment-shard.yaml index 7437d710..afc418ad 100644 --- a/manifest/deployment-shard.yaml +++ b/manifest/deployment-shard.yaml @@ -26,7 +26,7 @@ spec: - --shard-key={{.SHARD}} - --capi-onboard-annotation= - --v=5 - - --version=v1.11.0 + - --version=main - --agent-in-mgmt-cluster=false command: - /manager @@ -43,7 +43,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main livenessProbe: failureThreshold: 3 httpGet: @@ -101,7 +101,7 @@ spec: fieldPath: metadata.namespace - name: IS_INITIALIZATION value: "true" - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main name: initialization securityContext: allowPrivilegeEscalation: false diff --git a/manifest/extra-role-agentless.yaml b/manifest/extra-role-agentless.yaml new file mode 100644 index 00000000..281a1d74 --- /dev/null +++ b/manifest/extra-role-agentless.yaml @@ -0,0 +1,34 @@ +# In agentless mode sveltos-agent runs in the management cluster, one instance per +# managed cluster. To tell each agent which Reloader instances apply to its cluster, +# addon-controller writes a per-cluster ConfigMap in the cluster's namespace +# (clusterNamespace). That namespace varies across clusters, so a cluster-scoped +# rule is required instead of a namespace-scoped Role. +# +# This ClusterRole and ClusterRoleBinding must be applied when deploying Sveltos +# in agentless mode. They are not part of the default installation because the +# write permission on ConfigMaps cluster-wide is not needed in standard +# (non-agentless) deployments. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: addon-controller-role-agentless +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - "*" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: addon-controller-rolebinding-agentless +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: addon-controller-role-agentless +subjects: +- kind: ServiceAccount + name: addon-controller + namespace: projectsveltos diff --git a/manifest/manifest.yaml b/manifest/manifest.yaml index 3098a054..38aa4f2e 100644 --- a/manifest/manifest.yaml +++ b/manifest/manifest.yaml @@ -10162,7 +10162,7 @@ spec: - --shard-key= - --capi-onboard-annotation= - --v=5 - - --version=v1.11.0 + - --version=main - --agent-in-mgmt-cluster=false command: - /manager @@ -10179,7 +10179,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main livenessProbe: failureThreshold: 3 httpGet: @@ -10237,7 +10237,7 @@ spec: fieldPath: metadata.namespace - name: IS_INITIALIZATION value: "true" - image: docker.io/projectsveltos/addon-controller:v1.11.0 + image: docker.io/projectsveltos/addon-controller:main name: initialization securityContext: allowPrivilegeEscalation: false diff --git a/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.go b/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.go index c47d7816..1485d56d 100644 --- a/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.go +++ b/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.go @@ -44,7 +44,7 @@ spec: - --cluster-type= - --current-cluster=management-cluster - --run-mode=do-not-send-updates - - --version=v1.11.0 + - --version=main command: - /manager env: @@ -60,7 +60,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/drift-detection-manager@sha256:3fc2ea2b3814de27923d90c4a6b68e05afddd6e84b344d8b8d6866cb6815965d + image: docker.io/projectsveltos/drift-detection-manager@sha256:1d7b6de20fd97634a21cc27d087fa58266fa5e2dc78a113e87cd911a7c7a9f69 livenessProbe: failureThreshold: 3 httpGet: diff --git a/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.yaml b/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.yaml index dd558c60..b1a14315 100644 --- a/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.yaml +++ b/pkg/drift-detection/drift-detection-manager-in-mgmt-cluster.yaml @@ -26,7 +26,7 @@ spec: - --cluster-type= - --current-cluster=management-cluster - --run-mode=do-not-send-updates - - --version=v1.11.0 + - --version=main command: - /manager env: @@ -42,7 +42,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/drift-detection-manager@sha256:3fc2ea2b3814de27923d90c4a6b68e05afddd6e84b344d8b8d6866cb6815965d + image: docker.io/projectsveltos/drift-detection-manager@sha256:1d7b6de20fd97634a21cc27d087fa58266fa5e2dc78a113e87cd911a7c7a9f69 livenessProbe: failureThreshold: 3 httpGet: diff --git a/pkg/drift-detection/drift-detection-manager.go b/pkg/drift-detection/drift-detection-manager.go index 1ddb82ff..dfb85c67 100644 --- a/pkg/drift-detection/drift-detection-manager.go +++ b/pkg/drift-detection/drift-detection-manager.go @@ -146,7 +146,7 @@ spec: - --cluster-type= - --current-cluster=managed-cluster - --run-mode=do-not-send-updates - - --version=v1.11.0 + - --version=main command: - /manager env: @@ -162,7 +162,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/drift-detection-manager@sha256:3fc2ea2b3814de27923d90c4a6b68e05afddd6e84b344d8b8d6866cb6815965d + image: docker.io/projectsveltos/drift-detection-manager@sha256:1d7b6de20fd97634a21cc27d087fa58266fa5e2dc78a113e87cd911a7c7a9f69 livenessProbe: failureThreshold: 3 httpGet: diff --git a/pkg/drift-detection/drift-detection-manager.yaml b/pkg/drift-detection/drift-detection-manager.yaml index 1d087c48..2ebca7a1 100644 --- a/pkg/drift-detection/drift-detection-manager.yaml +++ b/pkg/drift-detection/drift-detection-manager.yaml @@ -128,7 +128,7 @@ spec: - --cluster-type= - --current-cluster=managed-cluster - --run-mode=do-not-send-updates - - --version=v1.11.0 + - --version=main command: - /manager env: @@ -144,7 +144,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: docker.io/projectsveltos/drift-detection-manager@sha256:3fc2ea2b3814de27923d90c4a6b68e05afddd6e84b344d8b8d6866cb6815965d + image: docker.io/projectsveltos/drift-detection-manager@sha256:1d7b6de20fd97634a21cc27d087fa58266fa5e2dc78a113e87cd911a7c7a9f69 livenessProbe: failureThreshold: 3 httpGet: diff --git a/test/fv/auto_deploy_dependencies_test.go b/test/fv/auto_deploy_dependencies_test.go index bc7ea359..fa255560 100644 --- a/test/fv/auto_deploy_dependencies_test.go +++ b/test/fv/auto_deploy_dependencies_test.go @@ -105,7 +105,7 @@ var _ = Describe("Feature", func() { RepositoryURL: kyvernoRepoURL, RepositoryName: kyvernoNamespace, ChartName: kyvernoChartName, - ChartVersion: kyvernoVersion352, + ChartVersion: kyvernoVersion372, ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, @@ -167,7 +167,7 @@ var _ = Describe("Feature", func() { kindWorkloadCluster.GetNamespace(), kindWorkloadCluster.GetName(), getClusterType()) charts := []configv1beta1.Chart{ - {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion352S, Namespace: kyvernoNamespace}, + {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion372S, Namespace: kyvernoNamespace}, } verifyClusterConfiguration(configv1beta1.ClusterProfileKind, helmClusterProfile.Name, helmClusterSummary.Spec.ClusterNamespace, helmClusterSummary.Spec.ClusterName, libsveltosv1beta1.FeatureHelm, diff --git a/test/fv/drift_test.go b/test/fv/drift_test.go index 9a0ab0a9..5c6db267 100644 --- a/test/fv/drift_test.go +++ b/test/fv/drift_test.go @@ -97,8 +97,8 @@ const ( kyvernoNamespace = "kyverno" admissionControllerDeplName = "kyverno-admission-controller" cleanupControllerDeplName = "kyverno-cleanup-controller" - cleanupImage = "reg.kyverno.io/kyverno/cleanup-controller:v1.15.1" - admissionImage = "reg.kyverno.io/kyverno/kyverno:v1.15.1" + cleanupImage = "reg.kyverno.io/kyverno/cleanup-controller:v1.17.1" + admissionImage = "reg.kyverno.io/kyverno/kyverno:v1.17.1" ) var _ = Describe("Helm", Serial, func() { @@ -181,7 +181,7 @@ var _ = Describe("Helm", Serial, func() { RepositoryURL: kyvernoRepoURL, RepositoryName: kyvernoNamespace, ChartName: kyvernoChartName, - ChartVersion: kyvernoVersion352, + ChartVersion: kyvernoVersion372, ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, @@ -322,7 +322,7 @@ reportsController: verifyFeatureStatusIsProvisioned(kindWorkloadCluster.GetNamespace(), clusterSummary.Name, libsveltosv1beta1.FeatureHelm) charts := []configv1beta1.Chart{ - {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion352S, Namespace: kyvernoNamespace}, + {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion372S, Namespace: kyvernoNamespace}, } verifyClusterConfiguration(configv1beta1.ClusterProfileKind, clusterProfile.Name, @@ -358,7 +358,7 @@ reportsController: types.NamespacedName{Namespace: kyvernoNamespace, Name: cleanupControllerDeplName}, depl)).To(Succeed()) for i := range depl.Spec.Template.Spec.Containers { if depl.Spec.Template.Spec.Containers[i].Name == kyvernoCleanupImageName { - By("Kyverno image is set to v1.15.1") + By("Kyverno image is set to v1.17.1") Expect(depl.Spec.Template.Spec.Containers[i].Image).To(Equal(cleanupImage)) } } @@ -373,12 +373,12 @@ reportsController: } for i := range depl.Spec.Template.Spec.Containers { if depl.Spec.Template.Spec.Containers[i].Name == kyvernoCleanupImageName { - return depl.Spec.Template.Spec.Containers[i].Image == "reg.kyverno.io/kyverno/cleanup-controller:v1.15.2" + return depl.Spec.Template.Spec.Containers[i].Image == "reg.kyverno.io/kyverno/cleanup-controller:v1.17.2" } } return false }, timeout, pollingInterval).Should(BeTrue()) - By("Kyverno image is reset to v1.15.2") + By("Kyverno image is reset to v1.17.2") Byf("Verifying ClusterSummary %s status is set to Deployed for Helm feature", clusterSummary.Name) verifyFeatureStatusIsProvisioned(kindWorkloadCluster.GetNamespace(), clusterSummary.Name, libsveltosv1beta1.FeatureHelm) @@ -404,7 +404,7 @@ reportsController: } for i := range depl.Spec.Template.Spec.Containers { if depl.Spec.Template.Spec.Containers[i].Name == kyvernoNamespace { - By("Kyverno image is set to v1.15.1") + By("Kyverno image is set to v1.17.1") return depl.Spec.Template.Spec.Containers[i].Image == admissionImage } } @@ -429,7 +429,7 @@ reportsController: } return false }, timeout/4, pollingInterval).Should(BeTrue()) - By("Kyverno image is NOT reset to v1.15.2") + By("Kyverno image is NOT reset to v1.17.2") By("Change values section") Expect(k8sClient.Get(context.TODO(), @@ -440,7 +440,7 @@ reportsController: RepositoryURL: kyvernoRepoURL, RepositoryName: kyvernoNamespace, ChartName: kyvernoChartName, - ChartVersion: kyvernoVersion351, + ChartVersion: kyvernoVersion371, ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, diff --git a/test/fv/helm_failure_message_test.go b/test/fv/helm_failure_message_test.go index fd60004d..22e8a3a7 100644 --- a/test/fv/helm_failure_message_test.go +++ b/test/fv/helm_failure_message_test.go @@ -131,7 +131,7 @@ var _ = Describe("Helm with conflicts", func() { for i := range currentClusterSummary.Status.HelmReleaseSummaries { if currentClusterSummary.Status.HelmReleaseSummaries[i].FailureMessage != nil && - *currentClusterSummary.Status.HelmReleaseSummaries[i].FailureMessage == "context deadline exceeded" { + *currentClusterSummary.Status.HelmReleaseSummaries[i].FailureMessage != "" { return true } } diff --git a/test/fv/helm_test.go b/test/fv/helm_test.go index fa8f427f..bf6d4ba4 100644 --- a/test/fv/helm_test.go +++ b/test/fv/helm_test.go @@ -82,9 +82,6 @@ var _ = Describe("Helm", func() { ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, - Options: &configv1beta1.HelmOptions{ - RunTests: true, - }, }, { RepositoryURL: wildflyRepoURL, @@ -152,7 +149,7 @@ var _ = Describe("Helm", func() { verifyFeatureStatusIsProvisioned(kindWorkloadCluster.GetNamespace(), clusterSummary.Name, libsveltosv1beta1.FeatureHelm) charts := []configv1beta1.Chart{ - {ReleaseName: kyvernoLatestRelease, ChartVersion: "3.7.1", Namespace: kyvernoNamespace}, + {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion371S, Namespace: kyvernoNamespace}, {ReleaseName: wildflyName, ChartVersion: wildflyVersion, Namespace: wildflyName}, } diff --git a/test/fv/reloader_test.go b/test/fv/reloader_test.go index 768696eb..51f8e474 100644 --- a/test/fv/reloader_test.go +++ b/test/fv/reloader_test.go @@ -32,6 +32,7 @@ import ( configv1beta1 "github.com/projectsveltos/addon-controller/api/v1beta1" "github.com/projectsveltos/addon-controller/lib/clusterops" libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1" + "github.com/projectsveltos/libsveltos/lib/mgmtagent" ) const ( @@ -157,6 +158,27 @@ var _ = Describe("Reloader", func() { Name: deploymentName, }, )) + + reloaderName := getReloaderName(clusterProfile.Name) + reloaderKey := mgmtagent.GetKeyForReloader(reloaderName) + configMapName := mgmtagent.GetConfigMapName(kindWorkloadCluster.GetName(), + libsveltosv1beta1.ClusterType(getClusterType())) + + Byf("Verifying per-cluster ConfigMap %s/%s contains Reloader entry %s", + kindWorkloadCluster.GetNamespace(), configMapName, reloaderKey) + Eventually(func() bool { + perClusterCM := &corev1.ConfigMap{} + err := k8sClient.Get(context.TODO(), + types.NamespacedName{ + Namespace: kindWorkloadCluster.GetNamespace(), + Name: configMapName, + }, perClusterCM) + if err != nil { + return false + } + v, ok := perClusterCM.Data[reloaderKey] + return ok && v == reloaderName + }, timeout, pollingInterval).Should(BeTrue()) } else { Byf("Verifying Reloader is present in the managed cluster") currentReloader := &libsveltosv1beta1.Reloader{} @@ -185,6 +207,30 @@ var _ = Describe("Reloader", func() { currentReloader) return err != nil && apierrors.IsNotFound(err) }, timeout, pollingInterval).Should(BeTrue()) + + reloaderName := getReloaderName(clusterProfile.Name) + reloaderKey := mgmtagent.GetKeyForReloader(reloaderName) + configMapName := mgmtagent.GetConfigMapName(kindWorkloadCluster.GetName(), + libsveltosv1beta1.ClusterType(getClusterType())) + + Byf("Verifying per-cluster ConfigMap %s/%s no longer contains Reloader entry %s", + kindWorkloadCluster.GetNamespace(), configMapName, reloaderKey) + Eventually(func() bool { + perClusterCM := &corev1.ConfigMap{} + err = k8sClient.Get(context.TODO(), + types.NamespacedName{ + Namespace: kindWorkloadCluster.GetNamespace(), + Name: configMapName, + }, perClusterCM) + if apierrors.IsNotFound(err) { + return true + } + if err != nil { + return false + } + _, ok := perClusterCM.Data[reloaderKey] + return !ok + }, timeout, pollingInterval).Should(BeTrue()) } else { Byf("Verifying Reloader is removed from the workload cluster") Eventually(func() bool { diff --git a/test/fv/test_constants_test.go b/test/fv/test_constants_test.go index c518f3a4..ef2d1d56 100644 --- a/test/fv/test_constants_test.go +++ b/test/fv/test_constants_test.go @@ -20,9 +20,10 @@ const ( // Kyverno chart details kyvernoRepoURL = "https://kyverno.github.io/kyverno/" kyvernoChartName = "kyverno/kyverno" - kyvernoVersion352 = "v3.5.2" - kyvernoVersion352S = "3.5.2" - kyvernoVersion351 = "v3.5.1" + kyvernoVersion372 = "v3.7.2" + kyvernoVersion372S = "3.7.2" + kyvernoVersion371 = "v3.7.1" + kyvernoVersion371S = "3.7.1" kyvernoLatestRelease = "kyverno-latest" // Prometheus community chart details diff --git a/test/fv/tier_test.go b/test/fv/tier_test.go index 2c491589..e7ba0944 100644 --- a/test/fv/tier_test.go +++ b/test/fv/tier_test.go @@ -59,7 +59,7 @@ var _ = Describe("Helm", Serial, func() { RepositoryURL: kyvernoRepoURL, RepositoryName: kyvernoNamespace, ChartName: kyvernoChartName, - ChartVersion: kyvernoVersion352, + ChartVersion: kyvernoVersion372, ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, @@ -113,7 +113,7 @@ var _ = Describe("Helm", Serial, func() { verifyFeatureStatusIsProvisioned(kindWorkloadCluster.GetNamespace(), clusterSummary.Name, libsveltosv1beta1.FeatureHelm) charts := []configv1beta1.Chart{ - {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion352S, Namespace: kyvernoNamespace}, + {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion372S, Namespace: kyvernoNamespace}, {ReleaseName: grafanaRepoName, ChartVersion: grafanaVersion1000, Namespace: grafanaRepoName}, {ReleaseName: prometheusRelease, ChartVersion: prometheusVersion2739, Namespace: prometheusRelease}, } @@ -136,7 +136,7 @@ var _ = Describe("Helm", Serial, func() { RepositoryURL: kyvernoRepoURL, RepositoryName: kyvernoNamespace, ChartName: kyvernoChartName, - ChartVersion: kyvernoVersion351, + ChartVersion: kyvernoVersion371, ReleaseName: kyvernoLatestRelease, ReleaseNamespace: kyvernoNamespace, HelmChartAction: configv1beta1.HelmChartActionInstall, @@ -199,7 +199,7 @@ var _ = Describe("Helm", Serial, func() { nil, charts) charts = []configv1beta1.Chart{ - {ReleaseName: kyvernoLatestRelease, ChartVersion: "3.5.1", Namespace: kyvernoNamespace}, + {ReleaseName: kyvernoLatestRelease, ChartVersion: kyvernoVersion371S, Namespace: kyvernoNamespace}, } verifyClusterConfiguration(configv1beta1.ClusterProfileKind, newClusterProfile.Name,