A Gerrit slave has been deployed.
=================================

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

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

Requests to create new repositories have to be directed to the route /new/${name}.git
over HTTP(S). 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 slave is starting up.

{{ if .Values.gerritSlave.initializeTestSite.enabled -}}
Since the test-mode was activated, a Gerrit site will be initialized after the
database connection could be established.
{{- else }}
The deployment will wait for the replication of repositories and the databse scheme.
The repository replication is checked by testing for the presence of the 'All-Projects.git'-
and 'All-Users.git'-repository. The database-scheme is tested by testing for the
presence of a database with the configured name, containing the tables 'accounts',
'changes' and 'patch_sets'.
{{- end }}

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

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