Skip to content
Merged
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
10 changes: 9 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion config/default/manager_auth_proxy_patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions config/default/manager_image_patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
21 changes: 16 additions & 5 deletions controllers/handlers_helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand Down
87 changes: 85 additions & 2 deletions controllers/handlers_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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.
Expand Down
40 changes: 20 additions & 20 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
Loading