{{- $disable_lookups:= .Values.disableLookups }}
{{- $cluster_name :=  default "mycluster" .Release.Name }}
{{- $use_self_signed := default false ((.Values.tls).useSelfSigned) }}
{{- $minimalVersion := "8.0.28" }}
{{- $forbiddenVersions := list "8.0.29" }}
{{- $imagePullPolicies := list "ifnotpresent" "always" "never" }}
{{- $serverVersion := .Values.serverVersion | default .Chart.AppVersion }}
{{- $install_namespace := .Release.Namespace }}
{{- if and ((.Values).routerInstances) (((.Values).router).instances) }}
  {{- if ne ((.Values).routerInstances) (((.Values).router).instances) }}
    {{- $err := printf "routerInstances and router.instances both are specified and have different values %d and %d. Use only one" ((.Values).routerInstances) (((.Values).router).instances) }}
    {{- fail $err }}
  {{- end }}
{{- end }}
{{- $routerInstances := coalesce ((.Values).routerInstances) (((.Values).router).instances) }}
{{- if lt $serverVersion $minimalVersion }}
  {{- $err := printf "It is not possible to use MySQL version %s . Please, use %s or above" $serverVersion $minimalVersion }}
  {{- fail $err }}
{{- end }}
{{- if has $serverVersion $forbiddenVersions }}
  {{- $err := printf "It is not possible to use MySQL version %s . Please, use %s or above except %v" $serverVersion $minimalVersion $forbiddenVersions }}
  {{- fail $err }}
{{- end }}
{{- if (((.Values).image).pullPolicy) }}
  {{- if not (has (lower (((.Values).image).pullPolicy)) ($imagePullPolicies)) }}
    {{- $err := printf "Unknown image pull policy %s. Must be one of %v" (((.Values).image).pullPolicy) $imagePullPolicies }}
    {{- fail $err }}
  {{- end }}
{{- else }}
  {{ fail "image.pullPolicy is required" }}
{{- end }}
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: {{ $cluster_name }}
  namespace: {{ $install_namespace }}
spec:
  instances: {{ required "serverInstances is required" .Values.serverInstances }}
  tlsUseSelfSigned: {{ $use_self_signed }}
  router:
    instances: {{ required "router.instances is required" $routerInstances }}
{{- if (((.Values).router).podSpec) }}
    podSpec:  {{ toYaml (((.Values).router).podSpec) | nindent 6 }}
{{- end }}
{{- if (((.Values).router).options) }}
    options:  {{ toYaml (((.Values).router).options) | nindent 6 }}
{{- end }}
{{- if (((.Values).router).bootstrapOptions) }}
    bootstrapOptions:  {{ toYaml (((.Values).router).bootstrapOptions) | nindent 6 }}
{{- end }}
{{- if (((.Values).router).podLabels) }}
    podLabels: {{ toYaml (((.Values).router).podLabels) | nindent 6 }}
{{- end }}
{{- if (((.Values).router).podAnnotations) }}
    podAnnotations: {{ toYaml (((.Values).router).podAnnotations) | nindent 6 }}
{{- end }}
{{- if not $use_self_signed }}
  {{- if and (((.Values).tls).routerCertAndPKsecretName) (((.Values).router).certAndPKsecretName) }}
    {{- if ne (((.Values).tls).routerCertAndPKsecretName) (((.Values).router).certAndPKsecretName) }}
      {{- $err := printf "tls.routerCertAndPKsecretName and router.certAndPKsecretName are both specified and have different values %s and %s. Use only one" (((.Values).tls).routerCertAndPKsecretName) (((.Values).router).certAndPKsecretName) }}
      {{- fail $err }}
    {{- end }}
  {{- end }}
  {{- $default_secret_name := printf "%s-router-tls" $cluster_name }}
  {{- $secret_name := coalesce ((.Values.tls).routerCertAndPKsecretName) ((.Values.router).certAndPKsecretName) $default_secret_name}}
  {{- if and (not $disable_lookups) (not (lookup "v1" "Secret" $install_namespace $secret_name)) }}
    {{- $err := printf "tls.routerCertAndPKsecretName: secret '%s' not found in namespace '%s'" $secret_name $install_namespace }}
    {{- fail $err }}
  {{- end }}
    tlsSecretName: {{ $secret_name }}
{{- end }}
  secretName: {{ .Release.Name }}-cluster-secret
  imagePullPolicy : {{ .Values.image.pullPolicy }}
  baseServerId: {{ required "baseServerId is required" .Values.baseServerId }}
  version: {{ .Values.serverVersion | default .Chart.AppVersion }}
  {{- if ((.Values).edition) }}
  edition: {{ .Values.edition | quote }}
  {{- end }}
  serviceAccountName: {{ .Release.Name }}-sa
  #imageRepository
  {{- if and (not (((.Values).image).registry)) (not (((.Values).image).repository)) }}
  ## Neither registry nor repository provided - OK
  {{- else if (((.Values).image).registry) }}
  ## registry provided
  {{- if (((.Values).image).repository) }}
  ## repository provided
  {{- end }}
  imageRepository: {{ trimSuffix "/" .Values.image.registry }}{{- if (((.Values).image).repository) }}/{{ trimSuffix "/" .Values.image.repository | trimPrefix "/" }}{{ end }}
  {{- else if (((.Values).image).repository) }}
    {{- fail "image.repository provided but image.registry is not or is empty" }}
  {{- end }}

  # imagePullSecrets
{{- if ((((.Values).image).pullSecrets).enabled) }}
  imagePullSecrets:
    {{- $secret_name := .Values.image.pullSecrets.secretName }}
    {{- if not $secret_name }}
      {{- fail "image.pullSecrets.secretName is required when pull secrets are enabled" }}
    {{- end }}
    {{- if and (not $disable_lookups) (not (lookup "v1" "Secret" $install_namespace $secret_name)) }}
      {{- $err := printf "image.pullSecrets.secretName: secret '%s' not found in namespace '%s'" $secret_name $install_namespace }}
      {{- fail $err }}
    {{- end }}
  - name: {{ $secret_name }}
{{- end }}

  # TLS
{{- if not $use_self_signed }}
  {{- $default_secret_name := printf "%s-ca" $cluster_name }}
  {{- $secret_name := default $default_secret_name ((.Values.tls).caSecretName) }}
  {{- if and (not $disable_lookups) (not (lookup "v1" "Secret" $install_namespace $secret_name)) }}
    {{- $err := printf "tls.caSecretName: secret '%s' not found in namespace '%s'" $secret_name $install_namespace }}
    {{- fail $err }}
  {{- end }}
  tlsCASecretName: {{ $secret_name }}

  {{- $default_secret_name := printf "%s-tls" $cluster_name }}
  {{- $secret_name := default $default_secret_name ((.Values.tls).serverCertAndPKsecretName) }}
  {{- if and (not $disable_lookups) (not (lookup "v1" "Secret" $install_namespace $secret_name)) }}
    {{- $err := printf "tls.serverCertAndPKsecretName: secret '%s' not found in namespace '%s'" $secret_name $install_namespace }}
    {{- fail $err }}
  {{- end }}
  tlsSecretName: {{ $secret_name }}
{{- end }}
  # mycnf
{{- if ((.Values).serverConfig) }}
  {{- if (((.Values).serverConfig).mycnf) }}
  mycnf: |
    {{- if not (hasPrefix "[mysqld]" (((.Values).serverConfig).mycnf) ) }}
    [mysqld]
    {{- end }}
{{ (((.Values).serverConfig).mycnf) | indent 4 }}
  {{- end }}
{{- end }}
  # datadirVolumeClaimTemplate
{{- if (.Values).datadirVolumeClaimTemplate }}
  {{- with .Values.datadirVolumeClaimTemplate }}
  datadirVolumeClaimTemplate:
    {{- if .storageClassName }}
    storageClassName: {{ .storageClassName | quote }}
    {{- end}}
    {{- if .accessModes }}
    accessModes: [ "{{ .accessModes }}" ]
    {{- end }}
    {{- if .resources.requests.storage }}
    resources:
      requests:
        storage: "{{ .resources.requests.storage }}"
    {{- end }}
  {{- end }}
{{- end }}
  # datadirPermissions
{{- if (.Values).datadirPermissions }}
  {{- with .Values.datadirPermissions }}
  datadirPermissions:
    {{- if hasKey . "setRightsUsingInitContainer" }}
    setRightsUsingInitContainer: {{ .setRightsUsingInitContainer }}
    {{- end}}
    {{- if .fsGroupChangePolicy }}
    fsGroupChangePolicy: "{{ .fsGroupChangePolicy }}"
    {{- end }}
  {{- end }}
{{- end }}
  # Keyring
{{- if (or (((.Values).keyring).file) (((.Values).keyring).encryptedFile) (((.Values).keyring).oci) ) }}
  keyring:
{{- $keyringAlreadySpecified := "" }}
  {{- if (((.Values).keyring).file) }}
    {{- if $keyringAlreadySpecified }}
      {{- $err := printf "Keyring '%s' already specified" $keyringAlreadySpecified }}
      {{- fail $err }}
    {{- end }}
    {{- $keyringAlreadySpecified = "file" }}
    {{- with .Values.keyring.file }}
    file:
      fileName: {{ required "keyring.file.fileName is required" .fileName | quote }}
      {{- if .readOnly }}
      readOnly: {{ .readOnly }}
      {{- end }}
      storage: {{ toYaml .storage | nindent 8 }}
    {{- end }}
  {{- end }}

  {{- if (((.Values).keyring).encryptedFile) }}
    {{- if $keyringAlreadySpecified }}
      {{- $err := printf "Keyring '%s' already specified" $keyringAlreadySpecified | quote }}
      {{- fail $err }}
    {{- end }}
    {{- $keyringAlreadySpecified = "encryptedFile" }}
    {{- with .Values.keyring.encryptedFile }}
    encryptedFile:
      fileName: {{ required "keyring.encryptedFile.fileName is required" .fileName | quote }}
      {{- if .readOnly }}
      readOnly: {{ .readOnly }}
      {{- end }}
      password: {{ required "keyring.encryptedFile.password is required" .password | quote }}
      storage: {{ toYaml .storage | nindent 8 }}
    {{- end }}
  {{- end }}

  {{- if (((.Values).keyring).oci) }}
    {{- if $keyringAlreadySpecified }}
      {{- $err := printf "Keyring '%s' already specified" $keyringAlreadySpecified }}
      {{- fail $err }}
    {{- end }}
    {{- $keyringAlreadySpecified = "oci" }}
    {{- with .Values.keyring.oci }}
    oci:
      user: {{ required "keyring.oci.user is required" .user | quote}}
      keySecret: {{ required "keyring.oci.keySecret is required" .keySecret | quote}}
      keyFingerprint: {{ required "keyring.oci.keyFingerprint is required" .keyFingerprint | quote }}
      tenancy: {{ required "keyring.oci.tenancy is required" .tenancy | quote}}
      {{- if .compartment}}
      compartment: {{ .compartment | quote }}
      {{- end }}
      {{- if .virtualVault}}
      virtualVault: {{ .virtualVault | quote}}
      {{- end }}
      {{- if .masterKey}}
      masterKey: {{ .masterKey | quote}}
      {{- end }}
      {{- if .caCertificate}}
      caCertificate: {{ .caCertificate | quote}}
      {{- end }}
      {{- if .endpoints}}
      endpoints:
        {{- if ((.endpoints).encryption) }}
        encryption: {{ ((.endpoints).encryption) | quote}}
        {{- end }}
        {{- if ((.endpoints).management) }}
        management: {{ ((.endpoints).management) | quote}}
        {{- end }}
        {{- if ((.endpoints).vaults) }}
        vaults: {{ ((.endpoints).vaults) | quote}}
        {{- end }}
        {{- if ((.endpoints).secrets) }}
        secrets: {{ ((.endpoints).secrets) | quote}}
        {{- end }}
      {{- end }}
    {{- end }}
  {{- end }}
{{- end }}
  # InitDB
{{- if (.Values).initDB }}
  ## InitDB
 {{- if and (and (and .Values.initDB.dump .Values.initDB.dump.name) (and .Values.initDB.clone .Values.initDB.clone.donorUrl)) }}
    {{- fail "Dump and Clone are mutually exclusive for initDB" }}
  {{- end }}
  ## Clone
  {{- if (((.Values).initDB).clone) }}
    {{- with .Values.initDB.clone }}
  initDB:
    clone:
      donorUrl: {{ required "initDB.clone.donorUrl is required" .donorUrl }}
      rootUser: {{ .rootUser | default "root" }}
      secretKeyRef:
        name: {{ required "initDB.clone.credentials is required" .credentials }}
    {{- end }}
  {{- end }}
  ## Dump
  {{- if (((.Values).initDB).dump) }}
    {{- with .Values.initDB.dump }}
      {{- if and .name (or .ociObjectStorage .s3 .azure .persistentVolumeClaim .options) }}
  initDB:
    dump:
        {{- if .name }}
      name: {{ .name | quote }}
        {{- end }}
        {{- if .path }}
      path: {{ .path | quote }}
        {{- end }}
        {{- if .options }}
      options: {{ toYaml .options | nindent 8 }}
        {{- end }}
      storage:
        {{- if .ociObjectStorage }}
        ociObjectStorage:
          prefix: {{ required "initDB.dump.ociObjectStorage.prefix is required" .ociObjectStorage.prefix }}
          bucketName: {{ required "initDB.dump.ociObjectStorage.bucketName is required" .ociObjectStorage.bucketName }}
          credentials: {{ required "initDB.dump.ociObjectStorage.credentials is required" .ociObjectStorage.credentials }}
        {{- end }}
        {{- if .s3 }}
        s3:
          prefix: {{ required "initDB.dump.s3.prefix is required" .s3.prefix }}
          bucketName: {{ required "initDB.dump.s3.bucketName is required" .s3.bucketName }}
          config: {{ required "initDB.dump.s3.config is required" .s3.config }}
          {{- if .s3.profile }}
          profile: {{ .s3.profile }}
          {{- end }}
          {{- if .s3.endpoint }}
          endpoint: {{ .s3.endpoint }}
          {{- end }}
        {{- end }}
        {{- if .azure }}
        azure:
          prefix: {{ required "initDB.dump.azure.prefix is required" .azure.prefix }}
          containerName: {{ required "initDB.dump.azure.containerName is required" .azure.containerName }}
          config: {{ required "initDB.dump.azure.config is required" .azure.config }}
        {{- end }}
        {{- if .persistentVolumeClaim }}
        persistentVolumeClaim: {{ toYaml .persistentVolumeClaim | nindent 10}}
        {{- end }}
      {{- end }}
    {{- end }}
  {{- end }}
{{- end }}
  # Backup Profiles
{{- if (.Values).backupProfiles }}
  backupProfiles:
  {{- $isDumpInstance := false }}
  {{- $isSnapshot := false }}
  {{- range $_, $profile := .Values.backupProfiles }}
    {{- if $profile.name }}
  - name: {{ $profile.name | quote -}}
      {{- if hasKey $profile "podAnnotations" }}
    podAnnotations: {{ toYaml $profile.podAnnotations | nindent 6 }}
      {{- end }}
      {{- if hasKey $profile "podLabels" }}
    podLabels: {{ toYaml $profile.podLabels | nindent 6 }}
      {{- end }}
      {{- $isDumpInstance = hasKey $profile "dumpInstance" }}
      {{- $isSnapshot = hasKey $profile "snapshot" }}
      {{- if or $isDumpInstance $isSnapshot }}
        {{- $backupProfile := ternary $profile.dumpInstance $profile.snapshot $isDumpInstance }}
        {{- if $isDumpInstance }}
    dumpInstance:
        {{- else if $isSnapshot }}
    snapshot:
        {{- else }}
          {{- fail "Impossible backup type" }}
        {{- end }}
        {{- if not (hasKey $backupProfile "storage") }}
          {{- fail "backup profile $profile.name has no storage section" }}
        {{- else if hasKey $backupProfile.storage "ociObjectStorage" }}
      storage:
        ociObjectStorage:
        {{- if $backupProfile.storage.ociObjectStorage.prefix }}
          prefix: {{ $backupProfile.storage.ociObjectStorage.prefix }}
        {{- end }}
          bucketName: {{ required "bucketName is required"  $backupProfile.storage.ociObjectStorage.bucketName }}
          credentials: {{ required "credentials is required"  $backupProfile.storage.ociObjectStorage.credentials }}
        {{- else if hasKey $backupProfile.storage "s3" }}
      storage:
        s3:
        {{- if $backupProfile.storage.s3.prefix }}
          prefix: {{ $backupProfile.storage.s3.prefix }}
        {{- end }}
          bucketName: {{ required "bucketName is required" $backupProfile.storage.s3.bucketName }}
          config: {{ required "config is required" $backupProfile.storage.s3.config }}
          {{- if $backupProfile.storage.s3.profile }}
          profile: {{ $backupProfile.storage.s3.profile }}
          {{- end }}
          {{- if $backupProfile.storage.s3.endpoint }}
          endpoint: {{ $backupProfile.storage.s3.endpoint }}
          {{- end }}
        {{- else if hasKey $backupProfile.storage "azure" }}
      storage:
        azure:
        {{- if $backupProfile.storage.azure.prefix }}
          prefix: {{ $backupProfile.storage.azure.prefix }}
        {{- end }}
          containerName: {{ required "containerName is required" $backupProfile.storage.azure.containerName }}
          config: {{ required "config is required" $backupProfile.storage.azure.config }}
        {{- else if hasKey $backupProfile.storage "persistentVolumeClaim" }}
      storage:
        persistentVolumeClaim: {{ toYaml $backupProfile.storage.persistentVolumeClaim | nindent 12}}
        {{- else -}}
          {{- fail "dumpInstance backup profile $profile.name has empty storage section - neither ociObjectStorage nor persistentVolumeClaim defined" }}
        {{- end -}}
      {{- else }}
        {{- fail "One of dumpInstance or snapshot must be methods of a backupProfile" }}
      {{- end }}
    {{- end }}
  {{- end }}
{{- end }}
  # Backup Schedules
{{- if (.Values).backupSchedules }}
  backupSchedules:
  {{- $isDumpInstance := false }}
  {{- $isSnapshot := false }}
  {{- range $_, $schedule := .Values.backupSchedules }}
  - name: {{ $schedule.name | quote }}
    schedule: {{ quote $schedule.schedule }}
    {{- if ($schedule).timeZone }}
    timeZone: {{ quote $schedule.timeZone }}
    {{- end }}
    deleteBackupData: {{ $schedule.deleteBackupData }}
    enabled: {{ $schedule.enabled }}
    {{- if hasKey $schedule "backupProfileName" }}
    backupProfileName: {{  $schedule.backupProfileName }}
    {{- else if hasKey $schedule "backupProfile" }}
      {{- $isDumpInstance = hasKey $schedule.backupProfile "dumpInstance" }}
      {{- $isSnapshot = hasKey $schedule.backupProfile "snapshot" }}
      {{- if or $isDumpInstance $isSnapshot }}
        {{- $backupProfile := ternary $schedule.backupProfile.dumpInstance $schedule.backupProfile.snapshot $isDumpInstance }}
    backupProfile:
        {{- if hasKey $schedule.backupProfile "podAnnotations" }}
      podAnnotations: {{ toYaml $schedule.backupProfile.podAnnotations | nindent 8 }}
        {{- end }}
        {{- if hasKey $schedule.backupProfile "podLabels" }}
      podLabels: {{ toYaml $schedule.backupProfile.podLabels | nindent 8 }}
        {{- end }}
        {{- if $isDumpInstance }}
      dumpInstance:
        {{- else if $isSnapshot }}
      snapshot:
        {{- end }}
        {{- if not (hasKey $backupProfile "storage") }}
          {{- fail "schedule backup profile $schedule.name has no storage section" }}
        {{- else if hasKey $backupProfile.storage "ociObjectStorage" }}
        storage:
          ociObjectStorage:
          {{- if $backupProfile.storage.ociObjectStorage.prefix }}
            prefix: {{ $backupProfile.storage.ociObjectStorage.prefix }}
          {{- end }}
            bucketName: {{ required "bucketName is required"  $backupProfile.storage.ociObjectStorage.bucketName }}
            credentials: {{ required "credentials is required"  $backupProfile.storage.ociObjectStorage.credentials }}
        {{- else if hasKey $backupProfile.storage "s3" }}
        storage:
          s3:
          {{- if $backupProfile.storage.s3.prefix }}
            prefix: {{ $backupProfile.storage.s3.prefix }}
          {{- end }}
            bucketName: {{ required "bucketName is required" $backupProfile.storage.s3.bucketName }}
            config: {{ required "config is required" $backupProfile.storage.s3.config }}
          {{- if $backupProfile.storage.s3.profile }}
            profile: {{ $backupProfile.storage.s3.profile }}
          {{- end }}
          {{- if $backupProfile.storage.s3.endpoint }}
            endpoint: {{ $backupProfile.storage.s3.endpoint }}
          {{- end }}
        {{- else if hasKey $backupProfile.storage "azure" }}
        storage:
          azure:
          {{- if $backupProfile.storage.azure.prefix }}
            prefix: {{ $backupProfile.storage.azure.prefix }}
          {{- end }}
            containerName: {{ required "containerName is required" $backupProfile.storage.azure.containerName }}
            config: {{ required "config is required" $backupProfile.storage.azure.config }}
        {{- else if hasKey $backupProfile.storage "persistentVolumeClaim" }}
        storage:
          persistentVolumeClaim: {{ toYaml $backupProfile.storage.persistentVolumeClaim | nindent 12}}
        {{- else -}}
          {{- fail "dumpInstance backup profile $profile.name has empty storage section - neither ociObjectStorage nor persistentVolumeClaim defined" }}
        {{- end -}}
      {{- else }}
         {{- fail "Impossible backup type for a schedule" }}
      {{- end }}

    {{- else }}
      {{- fail "Neither backupProfileName nor backupProfile provided for a schedule" }}
    {{- end }}
  {{- end }}
{{- end }}
  # Pod Spec
{{- if ((.Values).podSpec) }}
  podSpec: {{ toYaml ((.Values).podSpec) | nindent 4 }}
{{- end }}
  # Pod Labels
{{- if ((.Values).podLabels) }}
  podLabels: {{ toYaml ((.Values).podLabels) | nindent 4 }}
{{- end }}
  # Pod Annotations
{{- if ((.Values).podAnnotations) }}
  podAnnotations: {{ toYaml ((.Values).podAnnotations) | nindent 4 }}
{{- end }}
  # Logs
{{- if ((.Values).logs) }}
  logs: {{ toYaml ((.Values).logs) | nindent 4 }}
{{- end }}
  # Instance Service
{{- if ((.Values).instanceService) }}
  instanceService: {{ toYaml ((.Values).instanceService) | nindent 4 }}
{{- end }}
  # Service
{{- if ((.Values).service) }}
  service: {{ toYaml ((.Values).service) | nindent 4 }}
{{- end }}
  # Metrics
{{- if ((.Values).metrics) }}
  metrics: {{ toYaml ((.Values).metrics) | nindent 4 }}
{{- end }}
  # Read Replicas
{{- if ((.Values).readReplicas) }}
  readReplicas:
  {{- range $_, $replica := ((.Values).readReplicas) }}
  - name: {{ $replica.name | quote }}
    {{- if hasKey $replica "version" }}
    version: {{ $replica.version | quote }}
    {{- end }}
    baseServerId: {{ $replica.baseServerId }}
    {{- if hasKey $replica "datadirVolumeClaimTemplate" }}
      {{- with $replica.datadirVolumeClaimTemplate }}
    datadirVolumeClaimTemplate:
        {{- if .storageClassName }}
      storageClassName: {{ .storageClassName | quote }}
        {{- end}}
        {{- if .accessModes }}
      accessModes: [ "{{ .accessModes }}" ]
        {{- end }}
        {{- if .resources.requests.storage }}
      resources:
        requests:
          storage: "{{ .resources.requests.storage }}"
        {{- end }}
      {{- end }}
    {{- end }}
    {{- if hasKey $replica "mycnf" }}
    mycnf: | {{- if not (hasPrefix "[mysqld]" (($replica).mycnf) ) }}{{- "[mysqld]" | nindent 6 }}{{- end }}{{ (($replica).mycnf) | nindent 6 }}{{- end }}
    {{- if hasKey $replica "instances" }}
    instances: {{ $replica.instances }}
    {{- end }}
    {{- if hasKey $replica "podSpec" }}
    podSpec: {{ toYaml $replica.podSpec | nindent 6 }}
    {{- end }}
    {{- if (($replica).podAnnotations) }}
    podAnnotations: {{ toYaml $replica.podAnnotations | nindent 6 }}
    {{- end }}
    {{- if (($replica).podLabels) }}
    podLabels: {{ toYaml $replica.podLabels | nindent 6 }}
    {{- end }}
  {{- end }}
{{- end }}
{{- if ((.Values).serviceFqdnTemplate) }}
  serviceFqdnTemplate:  {{ (.Values).serviceFqdnTemplate | quote }}
{{- end }}
