{{- $secretName := include "redis-cluster.secretName" . -}}
** Please be patient while the chart is being deployed **

{{ if .Values.usePassword }}
To get your password run:
    {{ include "common.utils.secret.getvalue" (dict "secret" $secretName "field" "redis-password" "context" $) }}
{{- end }}

{{- if .Values.cluster.externalAccess.enabled }}

To connect to your Redis(TM) server from outside the cluster check the following information:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "common.names.fullname" . }}'

    You will have a different external IP for each Redis(TM) node. Get the external ip from `-external` suffixed services: `kubectl get svc`.
    Redis(TM) port: {{ .Values.cluster.externalAccess.service.port }}

    {{- if not .Values.cluster.externalAccess.service.loadBalancerIP }}
    Once the LoadBalancerIPs are ready, you need to provide them and perform a Helm Upgrade:

    helm upgrade {{ .Release.Name }} --set "cluster.externalAccess.enabled=true,cluster.externalAccess.service.type=LoadBalancer{{- $root := . }}{{ $count := .Values.cluster.nodes | int }}{{ range $i, $v := until $count }},cluster.externalAccess.service.loadBalancerIP[{{ $i }}]=load-balancerip-{{- $i }}{{- end }}" bitnami/redis-cluster
    Where loadbalancer-ip-i are the LoadBalancerIPs provided by the cluster.
    {{- else -}}
    {{- if .Values.cluster.init -}}
    INFO: The Job to create the cluster will be created.
    {{- end -}}

    To connect to your database from outside the cluster execute the following commands:

    export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "common.names.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
    redis-cli -c -h $SERVICE_IP -p {{ .Values.service.port }} {{- if .Values.usePassword }} -a $REDIS_PASSWORD{{ end }}{{ if .Values.tls.enabled }} --tls --cert /tmp/client.cert --key /tmp/client.key --cacert /tmp/CA.cert{{ end }}
    {{- end }}

{{- else }}

You have deployed a Redis(TM) Cluster accessible only from within you Kubernetes Cluster.

{{- if .Values.cluster.init -}}
INFO: The Job to create the cluster will be created.
{{- end -}}

To connect to your Redis(TM) cluster:

1. Run a Redis(TM) pod that you can use as a client:

{{- if .Values.tls.enabled }}
   kubectl run --namespace {{ .Release.Namespace }} {{ template "common.names.fullname" . }}-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image {{ template "redis-cluster.image" . }} --command -- sleep infinity

   Copy your TLS certificates to the pod:

   kubectl cp --namespace {{ .Release.Namespace }} /path/to/client.cert {{ template "common.names.fullname" . }}-client:/tmp/client.cert
   kubectl cp --namespace {{ .Release.Namespace }} /path/to/client.key {{ template "common.names.fullname" . }}-client:/tmp/client.key
   kubectl cp --namespace {{ .Release.Namespace }} /path/to/CA.cert {{ template "common.names.fullname" . }}-client:/tmp/CA.cert

   Use the following command to attach to the pod:

   kubectl exec --tty -i {{ template "common.names.fullname" . }}-client \
   {{- if and (.Values.networkPolicy.enabled) (not .Values.networkPolicy.allowExternal) }}--labels="{{ template "common.names.fullname" . }}-client=true" \{{- end }}
   --namespace {{ .Release.Namespace }} -- bash
{{- else }}
kubectl run --namespace {{ .Release.Namespace }} {{ template "common.names.fullname" . }}-client --rm --tty -i --restart='Never' \
{{ if .Values.usePassword }} --env REDIS_PASSWORD=$REDIS_PASSWORD \{{ end }}
{{- if and (.Values.networkPolicy.enabled) (not .Values.networkPolicy.allowExternal) }}--labels="{{ template "common.names.fullname" . }}-client=true" \{{- end }}
--image {{ template "redis-cluster.image" . }} -- bash
{{- end }}

2. Connect using the Redis(TM) CLI:

redis-cli -c -h {{ template "common.names.fullname" . }}{{ if .Values.usePassword }} -a $REDIS_PASSWORD{{ end }}{{ if .Values.tls.enabled }} --tls --cert /tmp/client.cert --key /tmp/client.key --cacert /tmp/CA.cert{{ end }}

{{ if and (.Values.networkPolicy.enabled) (not .Values.networkPolicy.allowExternal) }}
Note: Since NetworkPolicy is enabled, only pods with label
{{ template "common.names.fullname" . }}-client=true"
will be able to connect to redis.
{{- end -}}
{{- end -}}

{{- include "redis-cluster.validateValues" . }}
{{- include "redis-cluster.checkRollingTags" . }}

{{- if and .Values.usePassword (not .Values.existingSecret) -}}
  {{- $requiredPassword := dict "valueKey" "password" "secret" $secretName "field" "redis-password" "context" $ -}}
  {{- $requiredPasswordError := include "common.validations.values.single.empty" $requiredPassword -}}

  {{- include "common.errors.upgrade.passwords.empty" (dict "validationErrors" (list $requiredPasswordError) "context" $) -}}
{{- end -}}
