# _helpers.tpl
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "artifactory.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Expand the name nginx service.
*/}}
{{- define "artifactory.nginx.name" -}}
{{- default .Chart.Name .Values.nginx.name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "artifactory.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified nginx name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "artifactory.nginx.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s-%s" .Release.Name $name .Values.nginx.name | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create the name of the service account to use
*/}}
{{- define "artifactory.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (include "artifactory.fullname" .) .Values.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.name }}
{{- end -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "artifactory.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
 # artifactory-pvc.yaml
{{- if and .Values.artifactory.persistence.enabled (not .Values.artifactory.persistence.existingClaim) -}}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: {{ template "artifactory.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
{{- if .Values.artifactory.persistence.annotations }}
  annotations:
{{ toYaml .Values.artifactory.persistence.annotations | indent 4 }}
{{- end }}
spec:
  accessModes:
    - {{ .Values.artifactory.persistence.accessMode | quote }}
  resources:
    requests:
      storage: {{ .Values.artifactory.persistence.size | quote }}
{{- if .Values.artifactory.persistence.storageClass }}
{{- if (eq "-" .Values.artifactory.persistence.storageClass) }}
  storageClassName: ""
{{- else }}
  storageClassName: "{{ .Values.artifactory.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}
 # artifactory-role.yaml
{{- if .Values.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.artifactory.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
  name: {{ template "artifactory.fullname" . }}
rules:
{{ toYaml .Values.rbac.role.rules }}
{{- end }}
 # artifactory-rolebinding.yaml
{{- if .Values.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.artifactory.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
  name: {{ template "artifactory.fullname" . }}
subjects:
- kind: ServiceAccount
  name: {{ template "artifactory.serviceAccountName" . }}
roleRef:
  kind: Role
  apiGroup: rbac.authorization.k8s.io
  name: {{ template "artifactory.fullname" . }}
{{- end }}
 # artifactory-secrets.yaml
{{- if .Values.database.password }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ template "artifactory.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
type: Opaque
data:
  db-password: {{ .Values.database.password | b64enc | quote }}
{{- end }}
 # artifactory-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: {{ template "artifactory.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.artifactory.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
{{- if .Values.artifactory.service.annotations }}
  annotations:
{{ toYaml .Values.artifactory.service.annotations | indent 4 }}
{{- end }}
spec:
  type: {{ .Values.artifactory.service.type }}
  ports:
  - port: {{ .Values.artifactory.externalPort }}
    targetPort: {{ .Values.artifactory.internalPort }}
    protocol: TCP
    name: {{ .Release.Name }}
  {{- if .Values.artifactory.replicator.enabled }}
  - port: {{ .Values.artifactory.externalPortReplicator }}
    targetPort: {{ .Values.artifactory.internalPortReplicator }}
    protocol: TCP
    name: replicator
  {{- end}}
  selector:
    app: {{ template "artifactory.name" . }}
    component: "{{ .Values.artifactory.name }}"
    release: {{ .Release.Name }}
 # artifactory-serviceaccount.yaml
{{- if .Values.serviceAccount.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.artifactory.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
  name: {{ template "artifactory.serviceAccountName" . }}
{{- end }}
 # artifactory-statefulset.yaml
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: {{ template "artifactory.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.artifactory.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
spec:
  serviceName: {{ template "artifactory.name" . }}
  replicas: 1
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: {{ template "artifactory.name" . }}
      role: {{ template "artifactory.name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ template "artifactory.name" . }}
        role: {{ template "artifactory.name" . }}
        component: {{ .Values.artifactory.name }}
        release: {{ .Release.Name }}
    spec:
      serviceAccountName: {{ template "artifactory.serviceAccountName" . }}
    {{- if .Values.imagePullSecrets }}
      imagePullSecrets:
      - name: {{ .Values.imagePullSecrets }}
    {{- end }}
      initContainers:
      - name: "remove-lost-found"
        image: "{{ .Values.initContainerImage }}"
        imagePullPolicy: {{ .Values.artifactory.image.pullPolicy }}
        command:
        - 'sh'
        - '-c'
        - 'rm -rfv {{ .Values.artifactory.persistence.mountPath }}/lost+found {{ .Values.artifactory.persistence.mountPath }}/data/.lock'
        volumeMounts:
        - mountPath: {{ .Values.artifactory.persistence.mountPath | quote }}
          name: artifactory-volume
      - name: "wait-for-db"
        image: "{{ .Values.initContainerImage }}"
        command:
        - 'sh'
        - '-c'
        - >
      {{- if .Values.postgresql.enabled }}
          until nc -z -w 2 {{ .Release.Name }}-postgresql {{ .Values.postgresql.service.port }} && echo database ok; do
      {{- else }}
          until nc -z -w 2 {{ .Values.database.host }} {{ .Values.database.port }} && echo database ok; do
      {{- end }}
            sleep 2;
          done;
      containers:
      - name: {{ .Values.artifactory.name }}
        image: "{{ .Values.artifactory.image.repository }}:{{ default .Chart.AppVersion .Values.artifactory.image.version }}"
        imagePullPolicy: {{ .Values.artifactory.image.pullPolicy }}
        lifecycle:
          postStart:
            exec:
              command:
              - '/bin/sh'
              - '-c'
              - >
                {{- if .Values.artifactory.configMapName }}
                cp -Lrf /bootstrap/* /artifactory_extra_conf/;
                {{- end }}
                if [ -d {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys ]; then
                chown -R {{ .Values.artifactory.uid }}:{{ .Values.artifactory.uid }} {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys;
                fi;
                {{- if .Values.artifactory.replicator.enabled }}
                mkdir -p {{ .Values.artifactory.persistence.mountPath }}/replicator/etc;
                cp -fv /tmp/replicator/replicator.yaml {{ .Values.artifactory.persistence.mountPath }}/replicator/etc/replicator.yaml;
                chown -R {{ .Values.artifactory.uid }}:{{ .Values.artifactory.uid }} {{ .Values.artifactory.persistence.mountPath }}/replicator;
                {{- end }}
                {{- if .Values.artifactory.distributionCerts }}
                mkdir -p {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys/trusted;
                cp -fv /tmp/access/etc/keys/private.key {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys;
                cp -fv /tmp/access/etc/keys/root.crt    {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys;
                cp -fv /tmp/access/etc/keys/root.crt    {{ .Values.artifactory.persistence.mountPath }}/access/etc/keys/trusted;
                chown -R {{ .Values.artifactory.uid }}:{{ .Values.artifactory.uid }} {{ .Values.artifactory.persistence.mountPath }}/access/etc;
                {{- end }}
                {{- if .Values.artifactory.postStartCommand }}
                {{ .Values.artifactory.postStartCommand }}
                {{- end }}
        env:
        {{- if .Values.postgresql.enabled }}
        - name: DB_TYPE
          value: 'postgresql'
        - name: DB_USER
          value: {{.Values.postgresql.postgresUser | quote }}
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ .Release.Name }}-postgresql
              key: postgres-password
        - name: DB_HOST
          value: {{ .Release.Name }}-postgresql
        {{- else }}
        - name: DB_TYPE
          value: '{{ .Values.database.type }}'
        - name: DB_HOST
          value: '{{ .Values.database.host }}'
        - name: DB_PORT
          value: '{{ .Values.database.port }}'
        - name: DB_USER
          value: '{{ .Values.database.user }}'
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ template "artifactory.fullname" . }}
              key: db-password
      {{- end }}
        - name: EXTRA_JAVA_OPTIONS
          value: "
      {{- if .Values.artifactory.javaOpts.other }}
          {{ .Values.artifactory.javaOpts.other }}
      {{- end}}
      {{- if .Values.artifactory.javaOpts.xms }}
          -Xms{{ .Values.artifactory.javaOpts.xms }}
      {{- end}}
      {{- if .Values.artifactory.javaOpts.xmx }}
          -Xmx{{ .Values.artifactory.javaOpts.xmx }}
      {{- end}}
      {{- if .Values.artifactory.replicator.enabled }}
          -Dartifactory.releasebundle.feature.enabled=true
      {{- end }}
            "
        {{- if .Values.artifactory.replicator.enabled }}
        - name: START_LOCAL_REPLICATOR
          value: "true"
        {{- end }}
        ports:
        - containerPort: {{ .Values.artifactory.internalPort }}
        {{- if .Values.artifactory.replicator.enabled }}
        - containerPort: {{ .Values.artifactory.internalPortReplicator }}
        {{- end }}
        volumeMounts:
        - name: artifactory-volume
          mountPath: {{ .Values.artifactory.persistence.mountPath | quote }}
      {{- if .Values.artifactory.distributionCerts }}
        - name: distribution-certs
          mountPath: "/tmp/access/etc/keys"
      {{- end }}
      {{- if .Values.artifactory.configMapName }}
        - name: bootstrap-config
          mountPath: "/bootstrap/"
      {{- end }}
      {{- if .Values.artifactory.license.secret }}
        - name: artifactory-license
          mountPath: "/artifactory_extra_conf/artifactory.lic"
          subPath: {{ .Values.artifactory.license.dataKey }}
      {{- end }}
      {{- if .Values.artifactory.replicator.enabled }}
        - name: replicator-config
          mountPath: "/tmp/replicator/replicator.yaml"
          subPath: replicator.yaml
      {{- end }}
        resources:
{{ toYaml .Values.artifactory.resources | indent 10 }}
    {{- with .Values.artifactory.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.artifactory.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.artifactory.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
        {{- if .Values.artifactory.readinessProbe.enabled }}
        readinessProbe:
          httpGet:
            path: '/artifactory/webapp/#/login'
            port: 8081
          initialDelaySeconds: {{ .Values.artifactory.readinessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.artifactory.readinessProbe.periodSeconds }}
          timeoutSeconds: {{ .Values.artifactory.readinessProbe.timeoutSeconds }}
          failureThreshold: {{ .Values.artifactory.readinessProbe.failureThreshold }}
          successThreshold: {{ .Values.artifactory.readinessProbe.successThreshold }}
        {{- end }}
        {{- if .Values.artifactory.livenessProbe.enabled }}
        livenessProbe:
          httpGet:
            path: '/artifactory/webapp/#/login'
            port: 8081
          initialDelaySeconds: {{ .Values.artifactory.livenessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.artifactory.livenessProbe.periodSeconds }}
          timeoutSeconds: {{ .Values.artifactory.livenessProbe.timeoutSeconds }}
          failureThreshold: {{ .Values.artifactory.livenessProbe.failureThreshold }}
          successThreshold: {{ .Values.artifactory.livenessProbe.successThreshold }}
        {{- end }}
      volumes:
      {{- if .Values.artifactory.distributionCerts }}
      - name: distribution-certs
        configMap:
          name: {{ .Values.artifactory.distributionCerts }}
      {{- end }}
      {{- if .Values.artifactory.replicator.enabled }}
      - name: replicator-config
        configMap:
          name: {{ template "artifactory.fullname" . }}-replicator-config
      {{- end }}
      {{- if .Values.artifactory.configMapName }}
      - name: bootstrap-config
        configMap:
          name: {{ .Values.artifactory.configMapName }}
      {{- end}}
      {{- if .Values.artifactory.license.secret }}
      - name: artifactory-license
        secret:
          secretName: {{ .Values.artifactory.license.secret }}
      {{- end }}
      {{- if .Values.artifactory.persistence.enabled }}
  volumeClaimTemplates:
  - metadata:
      name: artifactory-volume
    spec:
    {{- if .Values.artifactory.persistence.existingClaim }}
      selector:
        matchLabels:
          app: {{ template "artifactory.name" . }}
    {{- else }}
      {{- if .Values.artifactory.persistence.storageClass }}
      {{- if (eq "-" .Values.artifactory.persistence.storageClass) }}
      storageClassName: ""
      {{- else }}
      storageClassName: "{{ .Values.artifactory.persistence.storageClass }}"
      {{- end }}
      {{- end }}
      accessModes: [ "{{ .Values.artifactory.persistence.accessMode }}" ]
      resources:
        requests:
          storage: {{ .Values.artifactory.persistence.size }}
    {{- end }}
      {{- else }}
      - name: artifactory-volume
        emptyDir: {}
      {{- end }} # ingress.yaml
{{- if .Values.ingress.enabled -}}
{{- $serviceName := include "artifactory.fullname" . -}}
{{- $servicePort := .Values.artifactory.externalPort -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ template "artifactory.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
  annotations:
    {{- range $key, $value := .Values.ingress.annotations }}
      {{ $key }}: {{ $value | quote }}
    {{- end }}
spec:
  backend:
    serviceName: {{ $serviceName }}
    servicePort: {{ $servicePort }}
{{- if .Values.ingress.hosts }}
  rules:
  {{- range $host := .Values.ingress.hosts }}
  - host: {{ $host }}
    http:
      paths:
        - path: /
          backend:
            serviceName: {{ $serviceName }}
            servicePort: {{ $servicePort }}
  {{- end -}}
{{- end -}}
  {{- if .Values.ingress.tls }}
  tls:
{{ toYaml .Values.ingress.tls | indent 4 }}
  {{- end -}}
{{- end -}}
 # nginx-deployment.yaml
{{- if .Values.nginx.enabled -}}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ template "artifactory.nginx.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.nginx.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
spec:
  replicas: {{ .Values.nginx.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ template "artifactory.name" . }}
        component: {{ .Values.nginx.name }}
        release: {{ .Release.Name }}
    spec:
      serviceAccountName: {{ template "artifactory.serviceAccountName" . }}
    {{- if .Values.imagePullSecrets }}
      imagePullSecrets:
      - name: {{ .Values.imagePullSecrets }}
    {{- end }}
      initContainers:
    {{- if .Values.nginx.persistence.enabled }}
      - name: "remove-lost-found"
        image: "{{ .Values.initContainerImage }}"
        imagePullPolicy: {{ .Values.nginx.image.pullPolicy }}
        command:
        - '/bin/sh'
        - '-c'
        - 'rm -rfv {{ .Values.nginx.persistence.mountPath }}/lost+found'
        volumeMounts:
        - mountPath: {{ .Values.nginx.persistence.mountPath | quote }}
          name: nginx-volume
    {{- end }}
      - name: "wait-for-artifactory"
        image: "{{ .Values.initContainerImage }}"
        command:
        - 'sh'
        - '-c'
        - >
          until nc -z -w 2 {{ template "artifactory.fullname" . }} {{ .Values.artifactory.externalPort }} && echo artifactory ok; do
            sleep 2;
          done;
      containers:
      - name: {{ .Values.nginx.name }}
        image: "{{ .Values.nginx.image.repository }}:{{ default .Chart.AppVersion .Values.nginx.image.version }}"
        imagePullPolicy: {{ .Values.nginx.image.pullPolicy }}
        lifecycle:
          postStart:
            exec:
              command:
              - '/bin/sh'
              - '-c'
              - >
                {{- if .Values.nginx.customConfigMap }}
                cp -Lrf /tmp/nginx.conf /etc/nginx/nginx.conf;
                {{- end }}
                if [ -f /tmp/replicator-nginx.conf ]; then
                cp -Lfv /tmp/replicator-nginx.conf /etc/nginx/conf.d/replicator-nginx.conf;
                fi;
                if [ -f /tmp/ssl/*.crt ]; then
                rm -rf /var/opt/jfrog/nginx/ssl/example.*;
                cp -Lfv /tmp/ssl/* /var/opt/jfrog/nginx/ssl;
                fi;
                until [ -f /etc/nginx/conf.d/artifactory.conf ]; do sleep 1; done;
                if ! grep -q 'upstream' /etc/nginx/conf.d/artifactory.conf; then
                sed -i -e 's,proxy_pass .*,proxy_pass     http://{{ template "artifactory.fullname" . }}:{{ .Values.artifactory.externalPort }}/artifactory/;,g' \
                    -e 's,server_name .*,server_name ~(?<repo>.+)\\.{{ template "artifactory.fullname" . }} {{ template "artifactory.fullname" . }};,g' \
                    /etc/nginx/conf.d/artifactory.conf;
                fi;
                if ! grep -q 'proxy_http_version' /etc/nginx/conf.d/artifactory.conf; then
                sed -i 's,\(proxy_next_upstream .*\),proxy_http_version  1.1;\n    \1,g' /etc/nginx/conf.d/artifactory.conf;
                fi;
                sleep 5; nginx -s reload; touch /var/log/nginx/conf.done
        env:
        - name: ART_BASE_URL
          {{- if .Values.nginx.env.artUrl }}
          value: {{ .Values.nginx.env.artUrl }}
          {{- else }}
          value: "http://{{ template "artifactory.fullname" . }}:{{ .Values.artifactory.externalPort }}/artifactory"
          {{- end }}
        - name: SSL
          value: "{{ .Values.nginx.env.ssl }}"
        - name: SKIP_AUTO_UPDATE_CONFIG
          value: "{{ .Values.nginx.env.skipAutoConfigUpdate }}"
        ports:
        - containerPort: {{ .Values.nginx.internalPortHttp }}
        - containerPort: {{ .Values.nginx.internalPortHttps }}
        {{- if .Values.artifactory.replicator.enabled }}
        - containerPort: {{ .Values.nginx.internalPortReplicator }}
        {{- end }}
        volumeMounts:
        - name: nginx-volume
          mountPath: {{ .Values.nginx.persistence.mountPath | quote }}
        {{- if .Values.artifactory.replicator.enabled }}
        - name: replicator-nginx-config
          mountPath: "/tmp/replicator-nginx.conf"
          subPath: replicator-nginx.conf
        {{- end }}
        {{- if .Values.nginx.tlsSecretName }}
        - name: ssl-secret-volume
          mountPath: "/tmp/ssl"
        {{- end }}
        {{- if .Values.nginx.customConfigMap }}
        - name: nginx-config
          mountPath: "/tmp/"
        {{- end}}
        resources:
{{ toYaml .Values.nginx.resources | indent 10 }}
    {{- with .Values.nginx.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.nginx.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.nginx.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}
        {{- if .Values.nginx.readinessProbe.enabled }}
        readinessProbe:
          httpGet:
            path: '/artifactory/webapp/#/login'
            port: 80
          initialDelaySeconds: {{ .Values.nginx.readinessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.nginx.readinessProbe.periodSeconds }}
          timeoutSeconds: {{ .Values.nginx.readinessProbe.timeoutSeconds }}
          failureThreshold: {{ .Values.nginx.readinessProbe.failureThreshold }}
          successThreshold: {{ .Values.nginx.readinessProbe.successThreshold }}
        {{- end }}
        {{- if .Values.nginx.livenessProbe.enabled }}
        livenessProbe:
          httpGet:
            path: '/artifactory/webapp/#/login'
            port: 80
          initialDelaySeconds: {{ .Values.nginx.livenessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.nginx.livenessProbe.periodSeconds }}
          timeoutSeconds: {{ .Values.nginx.livenessProbe.timeoutSeconds }}
          failureThreshold: {{ .Values.nginx.livenessProbe.failureThreshold }}
          successThreshold: {{ .Values.nginx.livenessProbe.successThreshold }}
        {{- end }}
      volumes:
      {{- if .Values.artifactory.replicator.enabled }}
      - name: replicator-nginx-config
        configMap:
          name: {{ template "artifactory.fullname" . }}-replicator-nginx-config
      {{- end}}
      {{- if .Values.nginx.customConfigMap }}
      - name: nginx-config
        configMap:
          name: {{ .Values.nginx.customConfigMap }}
      {{- end}}
      - name: nginx-volume
      {{- if .Values.nginx.persistence.enabled }}
        persistentVolumeClaim:
          claimName: {{ .Values.nginx.persistence.existingClaim | default (include "artifactory.nginx.fullname" .) }}
      {{- else }}
        emptyDir: {}
      {{- end -}}
      {{- if .Values.nginx.tlsSecretName }}
      - name: ssl-secret-volume
        secret:
          secretName: {{ .Values.nginx.tlsSecretName }}
      {{- end -}}
{{- end }}
 # nginx-pvc.yaml
{{- if and .Values.nginx.persistence.enabled (.Values.nginx.enabled ) }}
{{- if (not .Values.nginx.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: {{ template "artifactory.nginx.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  accessModes:
    - {{ .Values.nginx.persistence.accessMode | quote }}
  resources:
    requests:
      storage: {{ .Values.nginx.persistence.size | quote }}
{{- if .Values.nginx.persistence.storageClass }}
{{- if (eq "-" .Values.nginx.persistence.storageClass) }}
  storageClassName: ""
{{- else }}
  storageClassName: "{{ .Values.nginx.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}
{{- end }}
 # nginx-replicator-conf.yaml
{{- if .Values.artifactory.replicator.enabled -}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "artifactory.fullname" . }}-replicator-nginx-config
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
data:
  replicator-nginx.conf: |
      ## Artifactory replicator
      server {
        listen         {{ .Values.nginx.externalPortReplicator }};
        server_name    {{ include "artifactory.fullname" . }};

        client_max_body_size 0;

        location / {
          proxy_read_timeout  900;
          proxy_pass_header   Server;
          proxy_pass          http://{{ include "artifactory.fullname" . }}:{{ .Values.nginx.internalPortReplicator }};
          proxy_http_version  1.1;
        }
      }
{{- end -}} # nginx-service.yaml
{{- if .Values.nginx.enabled -}}
apiVersion: v1
kind: Service
metadata:
  name: {{ template "artifactory.nginx.fullname" . }}
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    component: {{ .Values.nginx.name }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
{{- if .Values.nginx.service.annotations }}
  annotations:
{{ toYaml .Values.nginx.service.annotations | indent 4 }}
{{- end }}
spec:
  type: {{ .Values.nginx.service.type }}
{{- if eq .Values.nginx.service.type "LoadBalancer" }}
  {{ if .Values.nginx.service.loadBalancerIP -}}
  loadBalancerIP: {{ .Values.nginx.service.loadBalancerIP }}
  {{ end -}}
  externalTrafficPolicy: Local
{{- end }}
{{- if .Values.nginx.service.loadBalancerSourceRanges }}
  loadBalancerSourceRanges:
{{ toYaml .Values.nginx.service.loadBalancerSourceRanges | indent 4 }}
{{- end }}
  ports:
  {{- if .Values.artifactory.replicator.enabled }}
  - port: {{ .Values.nginx.externalPortReplicator }}
    targetPort: {{ .Values.nginx.internalPortReplicator }}
    protocol: TCP
    name: replicator
  {{- end }}
  - port: {{ .Values.nginx.externalPortHttp }}
    targetPort: {{ .Values.nginx.internalPortHttp }}
    protocol: TCP
    name: {{ .Values.nginx.name }}http
  - port: {{ .Values.nginx.externalPortHttps }}
    targetPort: {{ .Values.nginx.internalPortHttps }}
    protocol: TCP
    name: {{ .Release.Name }}https
  selector:
    app: {{ template "artifactory.name" . }}
    component: {{ .Values.nginx.name }}
    release: {{ .Release.Name }}
{{- end }}
 # replicator-configmap.yaml
{{- if .Values.artifactory.replicator.enabled -}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "artifactory.fullname" . }}-replicator-config
  labels:
    app: {{ template "artifactory.name" . }}
    chart: {{ template "artifactory.chart" . }}
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
data:
  replicator.yaml: |
    externalUrl: {{ .Values.artifactory.replicator.publicUrl }}
    internalUrl: http://localhost:6061
    listenPort: 6061
{{- end -}}
# Default values for artifactory.
# This is a YAML-formatted file.

# Beware when changing values here. You should know what you are doing!
# Access the values with {{ .Values.key.subkey }}

# Common
initContainerImage: "alpine:3.6"

# For supporting pulling from private registries
imagePullSecrets:

## Role Based Access Control
## Ref: https://kubernetes.io/docs/admin/authorization/rbac/
rbac:
  create: true
  role:
    ## Rules to create. It follows the role specification
    rules:
    - apiGroups:
      - ''
      resources:
      - services
      - endpoints
      - pods
      verbs:
      - get
      - watch
      - list

## Service Account
## Ref: https://kubernetes.io/docs/admin/service-accounts-admin/
##
serviceAccount:
  create: true
  ## The name of the ServiceAccount to use.
  ## If not set and create is true, a name is generated using the fullname template
  name:

ingress:
  enabled: false
  # Used to create an Ingress record.
  hosts:
    - artifactory.domain.example
  annotations:
  # kubernetes.io/ingress.class: nginx
  # kubernetes.io/tls-acme: "true"
  tls:
  # Secrets must be manually created in the namespace.
  # - secretName: chart-example-tls
  #   hosts:
  #     - artifactory.domain.example

# Artifactory
artifactory:
  name: artifactory
  image:
    # repository: "docker.bintray.io/jfrog/artifactory-oss"
    repository: "docker.bintray.io/jfrog/artifactory-pro"
    # Note that by default we use appVersion to get image tag
    # version: 6.1.0
    pullPolicy: IfNotPresent

  ## Artifactory license secret.
  ## If artifactory.license.secret is passed, it will be mounted as
  ## ARTIFACTORY_HOME/etc/artifactory.lic and loaded at run time.
  ## The dataKey should be the name of the secret data key created.
  license:
    secret:
    dataKey:
  ## Create configMap with artifactory.config.import.xml and security.import.xml and pass name of configMap in following parameter
  configMapName:

  ## Extra postStart command to install JDBC driver for MySql/MariaDb/Oracle
  # postStartCommand: "curl -L -o /opt/jfrog/artifactory/tomcat/lib/mysql-connector-java-5.1.41.jar https://jcenter.bintray.com/mysql/mysql-connector-java/5.1.41/mysql-connector-java-5.1.41.jar && chown 1030:1030 /opt/jfrog/artifactory/tomcat/lib/mysql-connector-java-5.1.41.jar"

  service:
    name: artifactory
    type: ClusterIP
    annotations: {}
  externalPort: 8081
  internalPort: 8081
  internalPortReplicator: 6061
  externalPortReplicator: 6061
  uid: 1030
  ## The following settings are to configure the frequency of the liveness and readiness probes
  livenessProbe:
    enabled: true
    initialDelaySeconds: 180
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1

  readinessProbe:
    enabled: true
    initialDelaySeconds: 60
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1
  persistence:
    mountPath: "/var/opt/jfrog/artifactory"
    enabled: true
    ## A manually managed Persistent Volume and Claim
    ## Requires persistence.enabled: true
    ## If defined, PVC must be created manually before volume will be bound with the name e.g `artifactory`
    # existingClaim:

    accessMode: ReadWriteOnce
    size: 20Gi
    ## artifactory data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ##
    # storageClass: "-"
    ## Annotations for the Persistent Volume Claim
    annotations: {}
  ## Uncomment the following resources definitions or pass them from command line
  ## to control the cpu and memory resources allocated by the Kubernetes cluster
  resources: {}
  #  requests:
  #    memory: "1Gi"
  #    cpu: "500m"
  #  limits:
  #    memory: "2Gi"
  #    cpu: "1"
  ## The following Java options are passed to the java process running Artifactory.
  ## You should set them according to the resources set above
  javaOpts: {}
  #  xms: "1g"
  #  xmx: "2g"
  #  other: ""
  nodeSelector: {}

  tolerations: []

  affinity: {}

  ## Artifactory Replicator is available only for Enterprise Plus
  replicator:
    enabled: false
    publicUrl:
  # Name of ConfigMap for Distribution Cert
  distributionCerts:

# Nginx
nginx:
  enabled: true
  name: nginx
  replicaCount: 1
  image:
    repository: "docker.bintray.io/jfrog/nginx-artifactory-pro"
    # Note that by default we use appVersion to get image tag
    # version: 6.1.0
    pullPolicy: IfNotPresent
  service:
    ## For minikube, set this to NodePort, elsewhere use LoadBalancer
    type: LoadBalancer
    ## For supporting whitelist on the Nginx LoadBalancer service
    ## Set this to a list of IP CIDR ranges
    ## Example: loadBalancerSourceRanges: ['10.10.10.5/32', '10.11.10.5/32']
    ## or pass from helm command line
    ## Example: helm install ... --set nginx.service.loadBalancerSourceRanges='{10.10.10.5/32,10.11.10.5/32}'
    loadBalancerSourceRanges: []
    annotations: {}
    ## Provide static ip address
    loadBalancerIP:
  externalPortHttp: 80
  internalPortHttp: 80
  externalPortHttps: 443
  internalPortHttps: 443
  internalPortReplicator: 6061
  externalPortReplicator: 6061
  ## The following settings are to configure the frequency of the liveness and readiness probes
  livenessProbe:
    enabled: true
    initialDelaySeconds: 60
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1

  readinessProbe:
    enabled: true
    initialDelaySeconds: 60
    failureThreshold: 10
    timeoutSeconds: 10
    periodSeconds: 10
    successThreshold: 1

  ## The SSL secret that will be used by the Nginx pod
  # tlsSecretName: chart-example-tls
  env:
    # artUrl: "http://artifactory:8081/artifactory"
    ssl: true
    skipAutoConfigUpdate: false
  ## Custom ConfigMap for nginx.conf
  customConfigMap:
  persistence:
    mountPath: "/var/opt/jfrog/nginx"
    enabled: false
    ## A manually managed Persistent Volume and Claim
    ## Requires persistence.enabled: true
    ## If defined, PVC must be created manually before volume will be bound
    # existingClaim:

    accessMode: ReadWriteOnce
    size: 5Gi
    ## nginx data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ##
    # storageClass: "-"
  resources: {}
  #  requests:
  #    memory: "250Mi"
  #    cpu: "100m"
  #  limits:
  #    memory: "250Mi"
  #    cpu: "500m"
  nodeSelector: {}

  tolerations: []

  affinity: {}

## Configuration values for the postgresql dependency
## ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md
##
postgresql:
  enabled: true
  postgresUser: "artifactory"
  postgresPassword:
  postgresDatabase: "artifactory"
  postgresConfig:
    maxConnections: "1500"
  persistence:
    enabled: true
  service:
    port: 5432

## If NOT using the PostgreSQL in this chart (postgresql.enabled=false),
## you must specify the following database details
database:
  type:
  host:
  port:
  user:
  password:
