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
37 changes: 33 additions & 4 deletions controllers/eventtrigger_deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"encoding/json"
"fmt"
"reflect"
"sort"
"strings"
"text/template"
"time"
Expand Down Expand Up @@ -343,18 +344,46 @@ func undeployEventTriggerResourcesFromCluster(ctx context.Context, c client.Clie
nil, nil, nil, logger)
}

func sortResources(resources []client.Object) {
sort.Slice(resources, func(i, j int) bool {
a, b := resources[i], resources[j]

// 1. Sort by APIVersion
if a.GetObjectKind().GroupVersionKind().GroupVersion().String() !=
b.GetObjectKind().GroupVersionKind().GroupVersion().String() {

return a.GetObjectKind().GroupVersionKind().GroupVersion().String() <
b.GetObjectKind().GroupVersionKind().GroupVersion().String()
}

// 2. Sort by Kind
if a.GetObjectKind().GroupVersionKind().Kind != b.GetObjectKind().GroupVersionKind().Kind {
return a.GetObjectKind().GroupVersionKind().Kind < b.GetObjectKind().GroupVersionKind().Kind
}

// 3. Sort by Namespace
if a.GetNamespace() != b.GetNamespace() {
return a.GetNamespace() < b.GetNamespace()
}

// 4. Sort by Name
return a.GetName() < b.GetName()
})
}

// eventTriggerHash returns the EventTrigger hash
func eventTriggerHash(ctx context.Context, c client.Client,
e *v1beta1.EventTrigger, cluster *corev1.ObjectReference, logger logr.Logger) ([]byte, error) {

config := getVersion()
config += render.AsCode(e.Spec)
config += render.AsCode(e.Labels)

resources, err := fetchReferencedResources(ctx, c, e, cluster, logger)
if err != nil {
return nil, err
}

config := getVersion()
config += render.AsCode(e.Spec)
config += render.AsCode(e.Labels)
sortResources(resources)

for i := range resources {
switch r := resources[i].(type) {
Expand Down
4 changes: 2 additions & 2 deletions test/fv/cloudevent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ var _ = Describe("CloudEvents", func() {
)

It("EventTrigger using matching CloudEvents", Label("FV", "PULLMODE"), func() {
Byf("Create a EventSource matching CloudEvents")
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: namePrefix + randomString(),
Expand All @@ -75,6 +74,7 @@ var _ = Describe("CloudEvents", func() {
},
},
}
Byf("Create a EventSource %s matching CloudEvents", eventSource.Name)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

u, err := k8s_utils.GetUnstructured([]byte(cm))
Expand All @@ -92,10 +92,10 @@ var _ = Describe("CloudEvents", func() {
Name: u.GetName(),
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = true
Byf("Create a EventTrigger %s referencing EventSource %s", eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

u, err = k8s_utils.GetUnstructured([]byte(tokenConfigMap))
Expand Down
10 changes: 6 additions & 4 deletions test/fv/clusterset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ var _ = Describe("Reference ClusterSet", func() {
)

It("Verifies EventTrigger reacts to ClusterSet changes", Label("FV", "PULLMODE"), func() {
Byf("Create a ClusterSet matching Cluster %s/%s", kindWorkloadCluster.GetNamespace(), kindWorkloadCluster.GetName())
clusterSet := getClusterSet(namePrefix, map[string]string{key: value})
Byf("Create a ClusterSet %s matching Cluster %s/%s",
clusterSet.Name, kindWorkloadCluster.GetNamespace(), kindWorkloadCluster.GetName())
clusterSet.Spec.MaxReplicas = 1
Expect(k8sClient.Create(context.TODO(), clusterSet)).To(Succeed())
verifyClusterSetMatches(clusterSet)
Expand All @@ -60,7 +61,6 @@ var _ = Describe("Reference ClusterSet", func() {

serviceNamespace := randomString()

Byf("Create a EventSource matching Services in namespace: %s", serviceNamespace)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -80,9 +80,10 @@ var _ = Describe("Reference ClusterSet", func() {
CollectResources: true,
},
}
Byf("Create a EventSource %s matching Services in namespace: %s",
eventSource.Name, serviceNamespace)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

Byf("Create a EventTrigger referencing EventSource %s and referencing the ClusterSet %s", eventSource.Name, clusterSet.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{})
eventTrigger.Spec.OneForEvent = false
Expand All @@ -104,8 +105,9 @@ var _ = Describe("Reference ClusterSet", func() {
},
},
}

eventTrigger.Spec.ClusterSetRefs = []string{clusterSet.Name}
Byf("Create a EventTrigger %s referencing EventSource %s and referencing the ClusterSet %s",
eventTrigger.Name, eventSource.Name, clusterSet.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

verifyEventTriggerMatches(eventTrigger)
Expand Down
7 changes: 4 additions & 3 deletions test/fv/generators_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ var _ = Describe("Generators", func() {
It("Configures Generators and have ClusterProfile consume those", Label("FV", "PULLMODE"), func() {
secretNamespace := randomString()

Byf("Create a EventSource matching Secrets in namespace: %s", secretNamespace)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -106,6 +105,8 @@ var _ = Describe("Generators", func() {
CollectResources: true,
},
}
Byf("Create a EventSource %s matching Secrets in namespace: %s",
eventSource.Name, secretNamespace)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

u, err := k8s_utils.GetUnstructured([]byte(toDeployConfigMap))
Expand All @@ -123,13 +124,13 @@ var _ = Describe("Generators", func() {
Name: u.GetName(),
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = true

u, err = k8s_utils.GetUnstructured([]byte(tokenConfigMap))
Expect(err).To(BeNil())
Byf("Create a EventTrigger %s referencing EventSource %s",
u.GetName(), eventSource.Name)
err = k8sClient.Create(context.TODO(), u)
if err != nil {
Expect(apierrors.IsAlreadyExists(err)).To(BeTrue())
Expand Down
8 changes: 5 additions & 3 deletions test/fv/instantiate_helmchart_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ var _ = Describe("Instantiate one ClusterProfile per resource. Instantiate and d
It("Verifies ClusterProfiles with helmChart and ValuesFrom is instantiated", Label("FV", "PULLMODE"), func() {
serviceNamespace := randomString()

Byf("Create a EventSource matching in namespace: %s", serviceNamespace)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -65,9 +64,10 @@ var _ = Describe("Instantiate one ClusterProfile per resource. Instantiate and d
CollectResources: true,
},
}
Byf("Create a EventSource %s matching in namespace: %s",
eventSource.Name, serviceNamespace)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

By("Creating a ConfigMap containing helm chart values")
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Expand All @@ -82,9 +82,9 @@ var _ = Describe("Instantiate one ClusterProfile per resource. Instantiate and d
"values.yaml": `nameOverride: "{{ .Resource.metadata.name }}"`,
},
}
Byf("Creating a ConfigMap %s/%s containing helm chart values", cm.Namespace, cm.Name)
Expect(k8sClient.Create(context.TODO(), cm)).To(Succeed())

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{})
eventTrigger.Spec.OneForEvent = true
Expand All @@ -106,6 +106,8 @@ var _ = Describe("Instantiate one ClusterProfile per resource. Instantiate and d
},
},
}
Byf("Create a EventTrigger %s referencing EventSource %s",
eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

Byf("Getting client to access the workload cluster")
Expand Down
8 changes: 5 additions & 3 deletions test/fv/instantiate_one_for_all_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ var _ = Describe("Instantiate one ClusterProfile for all resources", func() {
It("Verifies ClusterProfiles is instantiated using eventreport values", Label("FV", "PULLMODE"), func() {
serviceNamespace := randomString()

Byf("Create a EventSource matching https Services in namespace: %s", serviceNamespace)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -112,9 +111,10 @@ var _ = Describe("Instantiate one ClusterProfile for all resources", func() {
CollectResources: true,
},
}
Byf("Create a EventSource %s matching https Services in namespace: %s",
eventSource.Name, serviceNamespace)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

By("Creating a ConfigMap containing a ingress policy")
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Expand All @@ -129,6 +129,7 @@ var _ = Describe("Instantiate one ClusterProfile for all resources", func() {
"ingress": fmt.Sprintf(ingress, serviceNamespace),
},
}
Byf("Creating a ConfigMap %s/%s containing a ingress policy", cm.Namespace, cm.Name)
Expect(k8sClient.Create(context.TODO(), cm)).To(Succeed())

policyRef := configv1beta1.PolicyRef{
Expand All @@ -137,11 +138,12 @@ var _ = Describe("Instantiate one ClusterProfile for all resources", func() {
Name: cm.Name,
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = false
eventTrigger.Spec.HelmCharts = nil
Byf("Create a EventTrigger %s referencing EventSource %s",
eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

Byf("Getting client to access the workload cluster")
Expand Down
8 changes: 5 additions & 3 deletions test/fv/instantiate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ var _ = Describe("Instantiate one ClusterProfile per resource", func() {
It("Verifies ClusterProfiles is instantiated using eventreport values", Label("FV", "PULLMODE"), func() {
serviceNamespace := randomString()

Byf("Create a EventSource matching Services in namespace: %s", serviceNamespace)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -112,9 +111,10 @@ var _ = Describe("Instantiate one ClusterProfile per resource", func() {
CollectResources: true,
},
}
Byf("Create a EventSource %s matching Services in namespace: %s",
eventSource.Name, serviceNamespace)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

By("Creating a ConfigMap containing a calico policy")
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Expand All @@ -129,6 +129,7 @@ var _ = Describe("Instantiate one ClusterProfile per resource", func() {
"calico": networkPolicy,
},
}
Byf("Creating a ConfigMap %s/%s containing a calico policy", cm.Namespace, cm.Name)
Expect(k8sClient.Create(context.TODO(), cm)).To(Succeed())

policyRef := configv1beta1.PolicyRef{
Expand All @@ -137,7 +138,6 @@ var _ = Describe("Instantiate one ClusterProfile per resource", func() {
Name: cm.Name,
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = true
Expand All @@ -152,6 +152,8 @@ var _ = Describe("Instantiate one ClusterProfile per resource", func() {
HelmChartAction: configv1beta1.HelmChartActionInstall,
},
}
Byf("Create a EventTrigger %s referencing EventSource %s",
eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

Byf("Getting client to access the workload cluster")
Expand Down
7 changes: 4 additions & 3 deletions test/fv/profile_name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ var _ = Describe("Instantiate ClusterProfile with predictable names", func() {

It("Verifies ClusterProfiles are instantiated with names based on InstantiatedProfileNameFormat", Label("FV", "PULLMODE"),
func() {
Byf("Create a EventSource matching namespaces")
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -69,9 +68,9 @@ var _ = Describe("Instantiate ClusterProfile with predictable names", func() {
CollectResources: true,
},
}
Byf("Create a EventSource %s matching namespaces", eventSource.Name)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

By("Creating a ConfigMap containing a ServiceAccount")
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Expand All @@ -86,6 +85,7 @@ var _ = Describe("Instantiate ClusterProfile with predictable names", func() {
"sa": serviceAccount,
},
}
Byf("Creating a ConfigMap %s/%s containing a ServiceAccount", cm.Namespace, cm.Name)
Expect(k8sClient.Create(context.TODO(), cm)).To(Succeed())

policyRef := configv1beta1.PolicyRef{
Expand All @@ -94,11 +94,12 @@ var _ = Describe("Instantiate ClusterProfile with predictable names", func() {
Name: cm.Name,
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = true
eventTrigger.Spec.InstantiatedProfileNameFormat = "{{ .Cluster.metadata.name }}-{{ .Resource.metadata.name }}-test"
Byf("Create a EventTrigger %s referencing EventSource %s",
eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

Byf("Getting client to access the workload cluster")
Expand Down
8 changes: 5 additions & 3 deletions test/fv/stop_matching_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ var _ = Describe("Deletes ClusterProfile when cluster is not a match anymore", f
nsKey := randomString()
nsValue := randomString()

Byf("Create a EventSource matching a namespace with label %s=%s", nsKey, nsValue)
eventSource := libsveltosv1beta1.EventSource{
ObjectMeta: metav1.ObjectMeta{
Name: randomString(),
Expand All @@ -72,10 +71,11 @@ var _ = Describe("Deletes ClusterProfile when cluster is not a match anymore", f
CollectResources: true,
},
}
Byf("Create a EventSource %s matching a namespace with label %s=%s",
eventSource.Name, nsKey, nsValue)
Expect(k8sClient.Create(context.TODO(), &eventSource)).To(Succeed())

cmName := randomString()
By("Creating a ConfigMap containing a ConfigMap")
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Expand All @@ -85,6 +85,7 @@ var _ = Describe("Deletes ClusterProfile when cluster is not a match anymore", f
"configmap": fmt.Sprintf(configMap, cmName),
},
}
Byf("Creating a ConfigMap %s/%s containing a ConfigMap", cm.Namespace, cm.Name)
Expect(k8sClient.Create(context.TODO(), cm)).To(Succeed())

policyRef := configv1beta1.PolicyRef{
Expand All @@ -94,11 +95,12 @@ var _ = Describe("Deletes ClusterProfile when cluster is not a match anymore", f
DeploymentType: configv1beta1.DeploymentTypeLocal,
}

Byf("Create a EventTrigger referencing EventSource %s", eventSource.Name)
eventTrigger := getEventTrigger(namePrefix, eventSource.Name,
map[string]string{key: value}, []configv1beta1.PolicyRef{policyRef})
eventTrigger.Spec.OneForEvent = false
eventTrigger.Spec.HelmCharts = nil
Byf("Create a EventTrigger %s referencing EventSource %s",
eventTrigger.Name, eventSource.Name)
Expect(k8sClient.Create(context.TODO(), eventTrigger)).To(Succeed())

Byf("Getting client to access the workload cluster")
Expand Down
Loading