func()

in controllers/gitserver/create_event_listener.go [49:130]


func (h *CreateEventListener) createEventListener(ctx context.Context, gitServer *codebaseApi.GitServer) error {
	log := ctrl.LoggerFrom(ctx)

	log.Info("Creating EventListener")

	// Use Unstructured to avoid direct dependency on "knative.dev/pkg/apis/duck/v1" because EventListener relies on it.
	// This dependency can conflict with the operator's dependencies.
	// https://github.com/tektoncd/triggers/blob/v0.27.0/pkg/apis/triggers/v1beta1/event_listener_types.go#L86
	el := tektoncd.NewEventListenerUnstructured()
	elName := generateEventListenerName(gitServer.Name)

	el.SetName(elName)
	el.SetNamespace(gitServer.Namespace)
	el.SetLabels(map[string]string{
		"app.edp.epam.com/gitServer": gitServer.Name,
	})

	el.Object["spec"] = map[string]interface{}{
		"serviceAccountName": "default",
		"triggers": []interface{}{
			map[string]interface{}{
				"triggerRef": fmt.Sprintf("%s-build", gitServer.Spec.GitProvider),
			},
			map[string]interface{}{
				"triggerRef": fmt.Sprintf("%s-review", gitServer.Spec.GitProvider),
			},
		},
		"resources": map[string]interface{}{
			"kubernetesResource": map[string]interface{}{
				"spec": map[string]interface{}{
					"template": map[string]interface{}{
						"spec": map[string]interface{}{
							"serviceAccountName": fmt.Sprintf("tekton-triggers-sa-%s", gitServer.Namespace),
							"containers": []interface{}{
								map[string]interface{}{
									"name": "",
									"resources": map[string]interface{}{
										"limits": map[string]interface{}{
											"cpu":    "500m",
											"memory": "128Mi",
										},
										"requests": map[string]interface{}{
											"cpu":    "50m",
											"memory": "64Mi",
										},
									},
								},
							},
						},
					},
				},
			},
		},
	}

	if err := controllerutil.SetControllerReference(gitServer, el, h.k8sClient.Scheme()); err != nil {
		return fmt.Errorf("failed to set controller reference for EventListener: %w", err)
	}

	elCheck := tektoncd.NewEventListenerUnstructured()
	err := h.k8sClient.Get(ctx, client.ObjectKey{
		Namespace: gitServer.Namespace,
		Name:      elName,
	}, elCheck)

	if err == nil {
		log.Info("EventListener already exists", "EventListener", el.GetName())
		return nil
	}

	if client.IgnoreNotFound(err) != nil {
		return fmt.Errorf("failed to get EventListener: %w", err)
	}

	if err = h.k8sClient.Create(ctx, el); err != nil {
		return fmt.Errorf("failed to create EventListener: %w", err)
	}

	log.Info("EventListener has been created", "EventListener", el.GetName())

	return nil
}