A Gerrit replica has been deployed.
=================================

The Apache-Git-HTTP-Backend is now ready to receive replication requests from the
primary Gerrit. Please configure the replication plugin of the primary Gerrit to
push the repositories to:

{{ if .Values.istio.enabled -}}
  http {{- if .Values.istio.tls.enabled -}} s {{- end -}} :// {{- .Values.istio.host -}} /${name}.git
{{ else if .Values.ingress.enabled -}}
  http {{- if .Values.ingress.tls.enabled -}} s {{- end -}} :// {{- .Values.ingress.host -}} /${name}.git
{{- else }}
  http://<EXTERNAL-IP>: {{- .Values.gitBackend.service.http.port -}} /${name}.git
  The external IP of the service can be found by running:
  kubectl get svc git-backend-service
{{- end }}

Project creation, project deletion and HEAD update can also be replicated. To enable
this feature configure the replication plugin to use an adminUrl using the format
`gerrit+http {{- if .Values.ingress.tls.enabled -}} s {{- end -}} :// {{- .Values.ingress.host -}}`.

A detailed guide of how to configure Gerrit's replication plugin can be found here:

https://gerrit.googlesource.com/plugins/replication/+doc/master/src/main/resources/Documentation/config.md

The Gerrit replica is starting up.

The initialization process may take some time. Afterwards the git repositories
will be available under:

{{ if .Values.istio.enabled -}}
  http {{- if .Values.istio.tls.enabled -}} s {{- end -}} :// {{- .Values.istio.host -}} /<repository-name>.git
{{- else }}
  http {{- if .Values.ingress.tls.enabled -}} s {{- end -}} :// {{- .Values.ingress.host -}} /<repository-name>.git
{{- end }}
