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
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ KUBECTL := $(TOOLS_BIN_DIR)/kubectl
CLUSTERCTL := $(TOOLS_BIN_DIR)/clusterctl

GOLANGCI_LINT_VERSION := "v2.5.0"
CLUSTERCTL_VERSION := v1.12.0
CLUSTERCTL_VERSION := v1.12.1

KUSTOMIZE_VER := v5.7.0
KUSTOMIZE_BIN := kustomize
Expand Down
5 changes: 5 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import (

libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
"github.com/projectsveltos/libsveltos/lib/crd"
"github.com/projectsveltos/libsveltos/lib/deployer"
logs "github.com/projectsveltos/libsveltos/lib/logsettings"
libsveltosset "github.com/projectsveltos/libsveltos/lib/set"

Expand Down Expand Up @@ -134,8 +135,12 @@ func main() {

controllers.SetVersion(version)

d := deployer.GetClient(ctx, ctrl.Log.WithName("deployer"), mgr.GetClient(), workers)
controllers.RegisterFeatures(d, setupLog)

var eventTriggerController controller.Controller
eventTriggerReconciler := getEventTriggerReconciler(mgr)
eventTriggerReconciler.Deployer = d

eventTriggerController, err = eventTriggerReconciler.SetupWithManager(mgr)
if err != nil {
Expand Down
3 changes: 1 addition & 2 deletions controllers/eventreport_collection.go
Original file line number Diff line number Diff line change
Expand Up @@ -475,9 +475,8 @@ func updateAllClusterProfiles(ctx context.Context, mgmtClient client.Client, clu
err := updateClusterProfiles(ctx, mgmtClient, cluster.Namespace, cluster.Name, clusterType,
eventTriggers[i], er, l)
if err != nil {
logger.V(logs.LogInfo).Info(fmt.Sprintf("failed to update ClusterProfile for EventTrigger %s: %v",
l.V(logs.LogInfo).Info(fmt.Sprintf("failed to update ClusterProfile for EventTrigger %s: %v",
eventTriggers[i].GetName(), err))

return err
}
}
Expand Down
7 changes: 6 additions & 1 deletion controllers/eventtrigger_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import (
"github.com/projectsveltos/event-manager/pkg/scope"
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
"github.com/projectsveltos/libsveltos/lib/clusterproxy"
"github.com/projectsveltos/libsveltos/lib/deployer"
logs "github.com/projectsveltos/libsveltos/lib/logsettings"
predicates "github.com/projectsveltos/libsveltos/lib/predicates"
libsveltosset "github.com/projectsveltos/libsveltos/lib/set"
Expand Down Expand Up @@ -72,13 +73,16 @@ const (
// normalRequeueAfter is how long to wait before checking again to see if the cluster can be moved
// to ready after or workload features (for instance ingress or reporter) have failed
normalRequeueAfter = 20 * time.Second

configurationHash = "configurationHash"
)

// EventTriggerReconciler reconciles a EventTrigger object
type EventTriggerReconciler struct {
client.Client
Scheme *runtime.Scheme
ConcurrentReconciles int
Deployer deployer.DeployerInterface
EventReportMode ReportMode
ShardKey string
CapiOnboardAnnotation string // when set, only capi clusters with this annotation are considered
Expand Down Expand Up @@ -287,7 +291,8 @@ func (r *EventTriggerReconciler) reconcileNormal(
return reconcile.Result{Requeue: true, RequeueAfter: normalRequeueAfter}
}

if err := r.deployEventTrigger(ctx, eventTriggerScope, logger); err != nil {
f := getHandlersForFeature(v1beta1.FeatureEventTrigger)
if err := r.deployEventTrigger(ctx, eventTriggerScope, f, logger); err != nil {
logger.V(logs.LogInfo).Error(err, "failed to deploy")
return reconcile.Result{Requeue: true, RequeueAfter: normalRequeueAfter}
}
Expand Down
97 changes: 97 additions & 0 deletions controllers/eventtrigger_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2/textlogger"
Expand Down Expand Up @@ -78,8 +79,12 @@ var _ = Describe("EventTrigger: Reconciler", func() {
c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
WithObjects(initObjects...).Build()

dep := fakedeployer.GetClient(context.TODO(), logger, c)
controllers.RegisterFeatures(dep, logger)

reconciler := controllers.EventTriggerReconciler{
Client: c,
Deployer: dep,
Scheme: c.Scheme(),
Mux: sync.Mutex{},
ClusterMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
Expand Down Expand Up @@ -108,6 +113,95 @@ var _ = Describe("EventTrigger: Reconciler", func() {
).Should(BeTrue())
})

It("Remove finalizer", func() {
Expect(controllerutil.AddFinalizer(resource, v1beta1.EventTriggerFinalizer)).To(BeTrue())

cluster := &clusterv1.Cluster{
ObjectMeta: metav1.ObjectMeta{
Namespace: randomString(),
Name: randomString(),
},
}

Expect(addTypeInformationToObject(scheme, cluster)).To(Succeed())

initObjects := []client.Object{
resource,
cluster,
}

c := fake.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(initObjects...).
WithObjects(initObjects...).Build()

resourceName := client.ObjectKey{
Name: resource.Name,
}

currentResource := &v1beta1.EventTrigger{}

Expect(c.Get(context.TODO(), resourceName, currentResource)).To(Succeed())
Expect(c.Delete(context.TODO(), currentResource)).To(Succeed())

Expect(c.Get(context.TODO(), resourceName, currentResource)).To(Succeed())
currentResource.Status.ClusterInfo = []libsveltosv1beta1.ClusterInfo{
{
Cluster: corev1.ObjectReference{
Namespace: cluster.Namespace,
Name: cluster.Name,
APIVersion: cluster.APIVersion,
Kind: cluster.Kind,
},
Status: libsveltosv1beta1.SveltosStatusProvisioned,
Hash: []byte(randomString()),
},
}

Expect(c.Status().Update(context.TODO(), currentResource)).To(Succeed())

dep := fakedeployer.GetClient(context.TODO(), logger, c)
Expect(dep.RegisterFeatureID(v1beta1.FeatureEventTrigger)).To(Succeed())

reconciler := controllers.EventTriggerReconciler{
Client: c,
Deployer: dep,
Scheme: c.Scheme(),
Mux: sync.Mutex{},
ClusterMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
ToClusterMap: make(map[types.NamespacedName]*libsveltosset.Set),
EventTriggers: make(map[corev1.ObjectReference]libsveltosv1beta1.Selector),
EventSourceMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
ToEventSourceMap: make(map[types.NamespacedName]*libsveltosset.Set),
ClusterSetMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
}

// Because EventTrigger is currently deployed in a Cluster (Status.ClusterCondition is set
// indicating that) Reconcile won't be removed Finalizer
_, err := reconciler.Reconcile(context.TODO(), ctrl.Request{
NamespacedName: resourceName,
})
Expect(err).ToNot(HaveOccurred())

err = c.Get(context.TODO(), resourceName, currentResource)
Expect(err).ToNot(HaveOccurred())
Expect(controllerutil.ContainsFinalizer(currentResource, v1beta1.EventTriggerFinalizer)).To(BeTrue())

Expect(c.Get(context.TODO(), resourceName, currentResource)).To(Succeed())

currentResource.Status.ClusterInfo = []libsveltosv1beta1.ClusterInfo{}
Expect(c.Status().Update(context.TODO(), currentResource)).To(Succeed())

// Because EventTrigger is currently deployed nowhere (Status.ClusterCondition is set
// indicating that) Reconcile will be removed Finalizer
_, err = reconciler.Reconcile(context.TODO(), ctrl.Request{
NamespacedName: resourceName,
})
Expect(err).ToNot(HaveOccurred())

err = c.Get(context.TODO(), resourceName, currentResource)
Expect(err).To(HaveOccurred())
Expect(apierrors.IsNotFound(err)).To(BeTrue())
})

It("updateClusterInfo updates EventTrigger Status.ClusterInfo field", func() {
initObjects := []client.Object{
resource,
Expand Down Expand Up @@ -140,6 +234,7 @@ var _ = Describe("EventTrigger: Reconciler", func() {

reconciler := controllers.EventTriggerReconciler{
Client: c,
Deployer: dep,
Scheme: c.Scheme(),
Mux: sync.Mutex{},
ClusterMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
Expand Down Expand Up @@ -181,6 +276,7 @@ var _ = Describe("EventTrigger: Reconciler", func() {

reconciler := controllers.EventTriggerReconciler{
Client: c,
Deployer: dep,
Scheme: c.Scheme(),
Mux: sync.Mutex{},
ClusterMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
Expand Down Expand Up @@ -249,6 +345,7 @@ var _ = Describe("EventTrigger: Reconciler", func() {

reconciler := controllers.EventTriggerReconciler{
Client: c,
Deployer: dep,
Scheme: c.Scheme(),
Mux: sync.Mutex{},
ClusterMap: make(map[corev1.ObjectReference]*libsveltosset.Set),
Expand Down
Loading