func()

in controllers/gitserver/create_event_listener.go [132:215]


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

	log.Info("Creating Ingress for EventListener")

	pathType := networkingv1.PathTypePrefix
	name := GenerateIngressName(gitServer.Name)

	err := h.k8sClient.Get(ctx, client.ObjectKey{
		Namespace: gitServer.Namespace,
		Name:      name,
	}, &networkingv1.Ingress{})

	if err == nil {
		log.Info("Ingress already exists", "Ingress", name)

		return nil
	}

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

	edpConf, err := platform.GetEdpConfig(ctx, h.k8sClient, gitServer.Namespace)
	if err != nil {
		return fmt.Errorf("failed to get dnsWildcard: %w", err)
	}

	// This port is hardcoded in Tekton Triggers.
	//https://github.com/tektoncd/triggers/blob/v0.27.0/pkg/reconciler/eventlistener/resources/service.go#L37
	const elServicePort = 8080

	ingress := &networkingv1.Ingress{
		ObjectMeta: metav1.ObjectMeta{
			Name:      name,
			Namespace: gitServer.Namespace,
			Labels: map[string]string{
				"app.edp.epam.com/gitServer": gitServer.Name,
			},
		},
		Spec: networkingv1.IngressSpec{
			Rules: []networkingv1.IngressRule{
				{
					Host: fmt.Sprintf(
						"el-%s-%s.%s",
						gitServer.Name,
						gitServer.Namespace,
						edpConf.DnsWildcard,
					),
					IngressRuleValue: networkingv1.IngressRuleValue{
						HTTP: &networkingv1.HTTPIngressRuleValue{
							Paths: []networkingv1.HTTPIngressPath{
								{
									Path:     "/",
									PathType: &pathType,
									Backend: networkingv1.IngressBackend{
										Service: &networkingv1.IngressServiceBackend{
											Name: generateServiceName(gitServer.Name),
											Port: networkingv1.ServiceBackendPort{
												Number: elServicePort,
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},
	}

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

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

	log.Info("Ingress has been created", "Ingress", ingress.Name)

	return nil
}