in pkg/k8s/registry.go [99:158]
func (r *registry) GetContext(ctx context.Context, e *corev1.Event) chan TemplateContext {
resultCh := make(chan TemplateContext)
result := TemplateContext{
Event: e,
Pod: &corev1.Pod{},
Service: &corev1.Service{},
}
go func() {
for {
select {
case <-ctx.Done():
resultCh <- result
return
default:
if obj := e.InvolvedObject; obj.Kind == "Pod" {
podID := id{namespace: obj.Namespace, name: obj.Name}.String()
pod, ok := r.idPodMap.Get(podID)
if !ok {
break
}
result.Pod = pod.(*corev1.Pod)
podIP, ok := r.podIDIpMap.Get(podID)
if !ok {
break
}
svcID, ok := r.ipSvcIDMap.Get(podIP.(string))
if !ok {
break
}
svc, ok := r.idSvcMap.Get(svcID.(string))
if !ok {
break
}
result.Service = svc.(*corev1.Service)
} else if obj.Kind == "Service" {
svcID := id{namespace: obj.Namespace, name: obj.Name}.String()
svc, ok := r.idSvcMap.Get(svcID)
if !ok {
break
}
result.Service = svc.(*corev1.Service)
}
resultCh <- result
return
}
time.Sleep(3 * time.Second)
}
}()
return resultCh
}