func()

in pkg/service/gerrit/gerrit.go [427:484]


func (s ComponentService) Integrate(ctx context.Context, instance *gerritApi.Gerrit) (*gerritApi.Gerrit, error) {
	l := ctrl.LoggerFrom(ctx)

	externalUrl, err := s.getExternalUrl(instance)
	if err != nil {
		return nil, errors.Wrapf(err, "Failed to get Route for %v/%v", instance.Namespace, instance.Name)
	}

	if instance.Spec.KeycloakSpec.Enabled {
		l.Info("Keycloak integration enabled")

		var keycloakClient *keycloakApi.KeycloakClient

		keycloakClient, err = s.getKeycloakClient(ctx, instance)
		if err != nil {
			return instance, err
		}

		if keycloakClient == nil {
			err = s.createKeycloakClient(ctx, instance, externalUrl)
			if err != nil {
				return instance, err
			}
		}

		var keycloakEnvironmentValue []coreV1Api.EnvVar

		keycloakEnvironmentValue, err = s.PlatformService.GenerateKeycloakSettings(instance)
		if err != nil {
			return instance, fmt.Errorf("failed to generate Keycloak %q env values: %w", instance.Name, err)
		}

		if err = s.PlatformService.PatchDeploymentEnv(instance, keycloakEnvironmentValue); err != nil {
			return instance, errors.Wrap(err, "Failed to add identity service information")
		}
	} else {
		l.Info("Keycloak integration not enabled. Restarting deployment.")

		gerritDep := &v1.Deployment{}
		if err = s.client.Get(ctx, types.NamespacedName{Name: instance.Name, Namespace: instance.Namespace}, gerritDep); err != nil {
			return nil, fmt.Errorf("failed to get deployment %q: %w", instance.Name, err)
		}

		old := gerritDep.DeepCopy()

		if gerritDep.Spec.Template.Annotations == nil {
			gerritDep.Spec.Template.Annotations = map[string]string{}
		}

		gerritDep.Spec.Template.Annotations[DeploymentRestartAnnotation] = time.Now().Format(time.RFC3339)

		if err = s.client.Patch(ctx, gerritDep, client.MergeFrom(old)); err != nil {
			return nil, fmt.Errorf("failed to patch deployment: %w", err)
		}
	}

	return instance, nil
}