Skip to content

Commit 2b275b4

Browse files
authored
Fix panic on missing root event type for k8s source (#1481)
1 parent ad313c8 commit 2b275b4

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

internal/source/kubernetes/router.go

+14-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package kubernetes
22

33
import (
44
"context"
5+
"strings"
56

67
"github.com/sirupsen/logrus"
78
"k8s.io/apimachinery/pkg/api/meta"
@@ -156,7 +157,7 @@ func mergeResourceEvents(cfgs map[string]SourceConfig) mergedEvents {
156157
if _, ok := out[resource.Type]; !ok {
157158
out[resource.Type] = make(map[config.EventType]struct{})
158159
}
159-
for _, e := range flattenEventTypes(cfg.Event.Types, resource.Event.Types) {
160+
for _, e := range flattenEventTypes(cfg.Event, resource.Event) {
160161
out[resource.Type][e] = struct{}{}
161162
}
162163
}
@@ -178,7 +179,7 @@ func (r *Router) mergeEventRoutes(resource string, cfgs map[string]SourceConfig)
178179
cfg := srcCfg.cfg
179180
for idx := range cfg.Resources {
180181
r := cfg.Resources[idx] // make sure that we work on a copy
181-
for _, e := range flattenEventTypes(cfg.Event.Types, r.Event.Types) {
182+
for _, e := range flattenEventTypes(cfg.Event, r.Event) {
182183
if resource != r.Type {
183184
continue
184185
}
@@ -188,7 +189,7 @@ func (r *Router) mergeEventRoutes(resource string, cfgs map[string]SourceConfig)
188189
Annotations: resourceStringMap(cfg.Annotations, r.Annotations),
189190
Labels: resourceStringMap(cfg.Labels, r.Labels),
190191
ResourceName: r.Name,
191-
Event: resourceEvent(*cfg.Event, r.Event),
192+
Event: resourceEvent(cfg.Event, r.Event),
192193
}
193194
if e == config.UpdateEvent {
194195
route.UpdateSetting = &config.UpdateSetting{
@@ -248,7 +249,7 @@ func (r *Router) setEventRouteForRecommendationsIfShould(routeMap *map[config.Ev
248249
func eventRoutes(routeTable map[string][]entry, targetResource string, targetEvent config.EventType) []route {
249250
var out []route
250251
for _, routedEvent := range routeTable[targetResource] {
251-
if routedEvent.Event == targetEvent {
252+
if strings.EqualFold(string(routedEvent.Event), string(targetEvent)) {
252253
out = append(out, routedEvent.Routes...)
253254
}
254255
}
@@ -287,10 +288,13 @@ func (r *Router) mappedInformer(event config.EventType) (registration, bool) {
287288
return registration{}, false
288289
}
289290

290-
func flattenEventTypes(globalEvents []config.EventType, resourceEvents config.KubernetesResourceEventTypes) []config.EventType {
291-
checkEvents := globalEvents
292-
if len(resourceEvents) > 0 {
293-
checkEvents = resourceEvents
291+
func flattenEventTypes(globalEvents *config.KubernetesEvent, resourceEvents config.KubernetesEvent) []config.EventType {
292+
var checkEvents []config.EventType
293+
if globalEvents != nil {
294+
checkEvents = globalEvents.Types
295+
}
296+
if len(resourceEvents.Types) > 0 {
297+
checkEvents = resourceEvents.Types
294298
}
295299

296300
var out []config.EventType
@@ -321,10 +325,10 @@ func resourceStringMap(sourceMap *map[string]string, resourceMap map[string]stri
321325
return sourceMap
322326
}
323327

324-
func resourceEvent(sourceEvent, resourceEvent config.KubernetesEvent) *config.KubernetesEvent {
328+
func resourceEvent(sourceEvent *config.KubernetesEvent, resourceEvent config.KubernetesEvent) *config.KubernetesEvent {
325329
if resourceEvent.AreConstraintsDefined() {
326330
return &resourceEvent
327331
}
328332

329-
return &sourceEvent
333+
return sourceEvent
330334
}

internal/source/kubernetes/router_test.go

+34
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,40 @@ func TestRouter_BuildTable_CreatesRoutesWithProperEventsList(t *testing.T) {
7474
}
7575
}
7676

77+
func TestRouter_BuildTable_WithoutRootTypes(t *testing.T) {
78+
const resourceType = "autoscaling/v2/horizontalpodautoscalers"
79+
80+
givenCfg := map[string]SourceConfig{
81+
"k8s-events": {
82+
name: "k8s-events",
83+
cfg: config.Config{
84+
Resources: []config.Resource{
85+
{
86+
Type: resourceType,
87+
Event: config.KubernetesEvent{
88+
Reason: config.RegexConstraints{
89+
Include: []string{
90+
"SuccessfulRescale",
91+
},
92+
},
93+
Types: config.KubernetesResourceEventTypes{
94+
"Normal",
95+
},
96+
},
97+
},
98+
},
99+
Namespaces: &config.RegexConstraints{
100+
Include: []string{
101+
".*",
102+
},
103+
},
104+
},
105+
},
106+
}
107+
router := NewRouter(nil, nil, loggerx.NewNoop()).BuildTable(givenCfg)
108+
assert.Len(t, router.getSourceRoutes(resourceType, config.NormalEvent), 1)
109+
}
110+
77111
func TestRouterListMergingNestedFields(t *testing.T) {
78112
// given
79113
router := NewRouter(nil, nil, loggerx.NewNoop())

0 commit comments

Comments
 (0)