func()

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
}