diff --git a/charts/photoprism/1.1.3/.helmignore b/charts/photoprism/1.1.3/.helmignore new file mode 100644 index 0000000000..c1347c2c27 --- /dev/null +++ b/charts/photoprism/1.1.3/.helmignore @@ -0,0 +1,2 @@ +# Patterns to ignore when building packages. +*.png diff --git a/charts/photoprism/1.1.3/Chart.lock b/charts/photoprism/1.1.3/Chart.lock new file mode 100644 index 0000000000..436bb99b1e --- /dev/null +++ b/charts/photoprism/1.1.3/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common/2304.0.1 + version: 2304.0.1 +digest: sha256:1ed155c6760e1166e2cb75b52bc5e81c6bdf0252c16ff5ede001157077c41670 +generated: "2023-04-24T13:40:53.604174144+03:00" diff --git a/charts/photoprism/1.1.3/Chart.yaml b/charts/photoprism/1.1.3/Chart.yaml new file mode 100644 index 0000000000..01982bfd76 --- /dev/null +++ b/charts/photoprism/1.1.3/Chart.yaml @@ -0,0 +1,24 @@ +name: photoprism +description: AI-powered app for browsing, organizing & sharing your photo collection. +annotations: + title: PhotoPrism +type: application +version: 1.1.3 +apiVersion: v2 +appVersion: '231128' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common/2304.0.1 + version: 2304.0.1 +home: https://photoprism.app/ +icon: https://media.sys.truenas.net/apps/photoprism/icons/icon.svg +sources: + - https://photoprism.app/ + - https://github.com/truenas/charts/tree/master/charts/photoprism +keywords: + - media diff --git a/charts/photoprism/1.1.3/README.md b/charts/photoprism/1.1.3/README.md new file mode 100644 index 0000000000..ed190c02d6 --- /dev/null +++ b/charts/photoprism/1.1.3/README.md @@ -0,0 +1,3 @@ +# Photo Prism + +PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection. diff --git a/charts/photoprism/1.1.3/app-readme.md b/charts/photoprism/1.1.3/app-readme.md new file mode 100644 index 0000000000..ed190c02d6 --- /dev/null +++ b/charts/photoprism/1.1.3/app-readme.md @@ -0,0 +1,3 @@ +# Photo Prism + +PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection. diff --git a/charts/photoprism/1.1.3/charts/common-2304.0.1.tgz b/charts/photoprism/1.1.3/charts/common-2304.0.1.tgz new file mode 100644 index 0000000000..a8e95b4c04 Binary files /dev/null and b/charts/photoprism/1.1.3/charts/common-2304.0.1.tgz differ diff --git a/charts/photoprism/1.1.3/ci/test-values.yaml b/charts/photoprism/1.1.3/ci/test-values.yaml new file mode 100644 index 0000000000..ba31c4d883 --- /dev/null +++ b/charts/photoprism/1.1.3/ci/test-values.yaml @@ -0,0 +1,21 @@ +appVolumeMounts: + import: + emptyDir: true + mountPath: /photoprism/import + original: + emptyDir: true + mountPath: /photoprism/originals + storage: + emptyDir: true + mountPath: /photoprism/storage +dnsConfig: + options: [] +emptyDirVolumes: true +environmentVariables: [] +extraAppVolumeMounts: [] +ownerGID: 568 +ownerUID: 568 +password: admin123 +public: false +web_port: 32000 +global: {} diff --git a/charts/photoprism/1.1.3/ix_values.yaml b/charts/photoprism/1.1.3/ix_values.yaml new file mode 100644 index 0000000000..d81ef841d7 --- /dev/null +++ b/charts/photoprism/1.1.3/ix_values.yaml @@ -0,0 +1,4 @@ +image: + pullPolicy: IfNotPresent + repository: photoprism/photoprism + tag: '231128' diff --git a/charts/photoprism/1.1.3/metadata.yaml b/charts/photoprism/1.1.3/metadata.yaml new file mode 100644 index 0000000000..0208f67bda --- /dev/null +++ b/charts/photoprism/1.1.3/metadata.yaml @@ -0,0 +1,36 @@ +runAsContext: + - userName: root + groupName: root + gid: 0 + uid: 0 + description: Photoprism runs as root user. +capabilities: + - name: CHOWN + description: Photoprism is able to chown files. + - name: FOWNER + description: Photoprism is able to bypass permission checks for it's sub-processes. + - name: SYS_CHROOT + description: Photoprism is able to use chroot. + - name: MKNOD + description: Photoprism is able to create device nodes. + - name: DAC_OVERRIDE + description: Photoprism is able to bypass permission checks. + - name: FSETID + description: Photoprism is able to set file capabilities. + - name: KILL + description: Photoprism is able to kill processes. + - name: SETGID + description: Photoprism is able to set group ID for it's sub-processes. + - name: SETUID + description: Photoprism is able to set user ID for it's sub-processes. + - name: SETPCAP + description: Photoprism is able to set process capabilities. + - name: NET_BIND_SERVICE + description: Photoprism is able to bind to privileged ports. + - name: SETFCAP + description: Photoprism is able to set file capabilities. + - name: NET_RAW + description: Photoprism is able to use raw sockets. + - name: AUDIT_WRITE + description: Photoprism is able to write to audit log. +hostMounts: [] diff --git a/charts/photoprism/1.1.3/questions.yaml b/charts/photoprism/1.1.3/questions.yaml new file mode 100644 index 0000000000..9eea1d8be6 --- /dev/null +++ b/charts/photoprism/1.1.3/questions.yaml @@ -0,0 +1,315 @@ +groups: + - name: "Configuration" + description: "Photo Prism application configuration" + - name: "Storage" + description: "Configure storage for photo prism" + - name: "Networking" + description: "Networking Configuration for photo prism" + - name: "Advanced DNS Settings" + description: "Configure DNS settings" + - name: "Resource Reservation" + description: "Specify resources to be allocated to workload" + - name: "Resource Limits" + description: "Set CPU/memory limits for Kubernetes Pod" + +portals: + web_portal: + protocols: + - "http" + host: + - "$node_ip" + ports: + - "$variable-web_port" + path: "/" + +questions: + - variable: host_network + group: Networking + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled but may be needed for photoprism to be reachable from a hostNetworked VPN.
+ schema: + type: boolean + default: false + + - variable: web_port + label: "Web Port for photo prism" + group: Networking + schema: + type: int + min: 8000 + max: 65535 + default: 20800 + required: true + + - variable: dnsConfig + label: "DNS Configuration" + group: "Advanced DNS Settings" + schema: + type: dict + attrs: + - variable: options + label: "DNS Options" + schema: + type: list + items: + - variable: optionsEntry + label: "Option Entry Configuration" + schema: + type: dict + attrs: + - variable: name + label: "Option Name" + schema: + type: string + required: true + - variable: value + label: "Option Value" + schema: + type: string + required: true + + - variable: ownerUID + label: "Storage User ID" + description: "User ID of the storage volume being used (application will chown the storage volume path with specified UID)" + group: Configuration + schema: + type: int + default: 568 + min: 1 + max: 65535 + + - variable: ownerGID + label: "Storage Group ID" + description: "Group ID of the storage volume being used (application will chown the storage volume path with specified GID)" + group: Configuration + schema: + type: int + default: 568 + min: 1 + max: 65535 + + - variable: password + label: "Password" + group: "Configuration" + schema: + type: string + private: true + required: true + empty: false + immutable: true + default: "admin123" + show_if: [["public", "=", false]] + + - variable: public + label: "Enable Public Access" + description: "Disable password authentication, WebDAV, and the advanced settings page" + group: "Configuration" + schema: + type: boolean + default: false + + - variable: environmentVariables + label: "Photo Prism environment" + group: "Configuration" + schema: + type: list + default: [] + items: + - variable: environmentVariable + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: appVolumeMounts + label: "Photo Prism Storage" + group: "Storage" + schema: + type: dict + attrs: + - variable: original + label: "Storage Volume for Original Media" + schema: + type: dict + attrs: + - variable: datasetName + label: "Original Storage Volume Dataset Name" + schema: + type: string + hidden: true + $ref: + - "normalize/ixVolume" + show_if: [["hostPathEnabled", "=", false]] + default: "ix-photoprism_original" + editable: false + - variable: mountPath + label: "Original Storage Mount Path" + description: "Path where the volume will be mounted inside the pod" + schema: + type: path + hidden: true + editable: true + default: "/photoprism/originals" + - variable: readOnly + label: "Read Only" + description: "Mount volume as read only" + schema: + type: boolean + default: false + - variable: hostPathEnabled + label: "Enable Custom Host Path for Photo Prism Original Storage Volume" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "Host Path for Photo Prism Original Storage Volume" + schema: + type: hostpath + required: true + - variable: storage + label: "Storage Volume for sidecar/cache/database" + schema: + type: dict + attrs: + - variable: datasetName + label: "Storage Volume Dataset Name" + schema: + type: string + hidden: true + $ref: + - "normalize/ixVolume" + show_if: [["hostPathEnabled", "=", false]] + default: "ix-photoprism_storage" + editable: false + - variable: mountPath + label: "Storage Mount Path" + description: "Path where the volume will be mounted inside the pod" + schema: + type: path + hidden: true + editable: true + default: "/photoprism/storage" + - variable: hostPathEnabled + label: "Enable Custom Host Path for Photo Prism Storage Volume" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "Host Path for Photo Prism Storage Volume" + schema: + type: hostpath + required: true + - variable: import + label: "Storage Volume for imports" + schema: + type: dict + attrs: + - variable: datasetName + label: "Import Storage Volume Dataset Name" + schema: + type: string + hidden: true + $ref: + - "normalize/ixVolume" + show_if: [["hostPathEnabled", "=", false]] + default: "ix-photoprism_import" + editable: false + - variable: mountPath + label: "Storage Mount Path" + description: "Path where the volume will be mounted inside the pod" + schema: + type: path + hidden: true + editable: true + default: "/photoprism/import" + - variable: hostPathEnabled + label: "Enable Custom Host Path for Photo Prism Import Storage Volume" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "Host Path for Photo Prism Import Storage Volume" + schema: + type: hostpath + required: true + + - variable: extraAppVolumeMounts + label: "Extra Host Path Volumes" + group: "Storage" + schema: + type: list + items: + - variable: extraAppVolume + label: "Host Path Volume" + description: "Add an extra host path volume for Photo Prism application" + schema: + type: dict + attrs: + - variable: mountPath + label: "Mount Path in Pod" + description: "Path where the volume will be mounted inside the pod" + schema: + type: path + required: true + - variable: readOnly + label: "Read Only" + description: "Mount volume as read only" + schema: + type: boolean + default: false + - variable: hostPath + label: "Host Path" + description: "Host path" + schema: + type: hostpath + required: true + + # Specify GPU configuration + - variable: gpuConfiguration + label: "GPU Configuration" + group: "Resource Reservation" + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + + - variable: enableResourceLimits + label: "Enable Pod resource limits" + group: "Resource Limits" + schema: + type: boolean + default: false + - variable: cpuLimit + label: "CPU Limit" + description: "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100." + group: "Resource Limits" + schema: + type: string + show_if: [["enableResourceLimits", "=", true]] + valid_chars: "^\\d+(?:\\.\\d+(?!.*m$)|m?$)" + default: "4000m" + - variable: memLimit + label: "Memory Limit" + group: "Resource Limits" + description: "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi" + schema: + type: string + show_if: [["enableResourceLimits", "=", true]] + valid_chars: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" + default: "8Gi" diff --git a/charts/photoprism/1.1.3/templates/deployment.yaml b/charts/photoprism/1.1.3/templates/deployment.yaml new file mode 100644 index 0000000000..7471b82b52 --- /dev/null +++ b/charts/photoprism/1.1.3/templates/deployment.yaml @@ -0,0 +1,93 @@ +{{ include "common.storage.hostPathValidate" .Values }} +apiVersion: {{ template "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ template "common.names.fullname" . }}-photoprism + labels: + app: {{ template "common.names.name" . }} + chart: {{ template "common.names.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + annotations: + rollme: {{ randAlphaNum 5 | quote }} +spec: + replicas: {{ (default 1 .Values.replicas) }} + strategy: + type: "Recreate" + selector: + matchLabels: + app: {{ template "common.names.name" . }} + release: {{ .Release.Name }} + template: + metadata: + name: {{ template "common.names.fullname" . }} + labels: + app: {{ template "common.names.name" . }} + release: {{ .Release.Name }} + {{- include "common.labels.selectorLabels" . | nindent 8 }} + annotations: {{ include "common.annotations" . | nindent 8 }} + spec: + hostNetwork: {{ .Values.host_network }} + {{- if hasKey .Values "global" }} + {{- if hasKey .Values.global "ixChartContext" }} + {{- if .Values.global.ixChartContext.addNvidiaRuntimeClass }} + runtimeClassName: {{ .Values.global.ixChartContext.nvidiaRuntimeClassName }} + {{- end }} + {{- end }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + {{ include "common.resources.limitation" . | nindent 10 }} + {{ include "common.containers.imageConfig" .Values.image | nindent 10 }} + volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" .Values | nindent 12 }} + {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }} + - name: extrappvolume-{{ $index }} + mountPath: {{ $hostPathConfiguration.mountPath }} + readOnly: {{ $hostPathConfiguration.readOnly | default false }} + {{ end }} + ports: + - name: web + containerPort: {{ .Values.web_port }} + readinessProbe: + httpGet: + path: / + port: {{ .Values.web_port }} + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 5 + successThreshold: 2 + livenessProbe: + httpGet: + path: / + port: {{ .Values.web_port }} + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 5 + successThreshold: 1 + startupProbe: + httpGet: + path: / + port: {{ .Values.web_port }} + initialDelaySeconds: 10 + periodSeconds: 5 + timeoutSeconds: 2 + failureThreshold: 60 + successThreshold: 1 + env: + {{ $secretName := (include "common.names.fullname" .) }} + {{ $envList := (default list .Values.environmentVariables) }} + {{ $envList = mustAppend $envList (dict "name" "PHOTOPRISM_HTTP_PORT" "value" .Values.web_port) }} + {{ $envList = mustAppend $envList (dict "name" "PHOTOPRISM_ADMIN_PASSWORD" "valueFromSecret" true "secretName" $secretName "secretKey" "password") }} + {{ if .Values.public }} + {{ $envList = mustAppend $envList (dict "name" "PHOTOPRISM_PUBLIC" "value" "true") }} + {{ end }} + {{ include "common.containers.environmentVariables" (dict "environmentVariables" $envList) | nindent 12 }} +{{ include "common.networking.dnsConfiguration" .Values | nindent 6 }} + volumes: {{ include "common.storage.configureAppVolumes" .Values | nindent 8 }} + {{ range $index, $hostPathConfiguration := .Values.extraAppVolumeMounts }} + - name: extrappvolume-{{ $index }} + hostPath: + path: {{ $hostPathConfiguration.hostPath }} + {{ end }} diff --git a/charts/photoprism/1.1.3/templates/pre-install-job.yaml b/charts/photoprism/1.1.3/templates/pre-install-job.yaml new file mode 100644 index 0000000000..0a7b6b8625 --- /dev/null +++ b/charts/photoprism/1.1.3/templates/pre-install-job.yaml @@ -0,0 +1,34 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: "{{ template "common.names.fullname" . }}-preinstall-job" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + helm.sh/chart: {{ template "common.names.chart" . }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + name: "{{ template "common.names.fullname" . }}-preinstall-hook" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + helm.sh/chart: {{ template "common.names.chart" . }} + spec: + restartPolicy: Never + containers: + - name: pre-install-job + image: "alpine:latest" + command: + - "chown" + - "-R" + - "{{ .Values.ownerUID }}:{{ .Values.ownerGID }}" + - "{{ .Values.appVolumeMounts.storage.mountPath }}" + - "{{ .Values.appVolumeMounts.original.mountPath }}" + - "{{ .Values.appVolumeMounts.import.mountPath }}" + volumeMounts: {{ include "common.storage.configureAppVolumeMountsInContainer" .Values | nindent 12 }} + volumes: {{ include "common.storage.configureAppVolumes" .Values | nindent 8 }} diff --git a/charts/photoprism/1.1.3/templates/secret.yaml b/charts/photoprism/1.1.3/templates/secret.yaml new file mode 100644 index 0000000000..e531b6015e --- /dev/null +++ b/charts/photoprism/1.1.3/templates/secret.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "common.names.fullname" . }} + labels: {{ include "common.labels" . | nindent 4 }} +type: Opaque +data: + password: {{ .Values.password | b64enc | quote }} diff --git a/charts/photoprism/1.1.3/templates/service.yaml b/charts/photoprism/1.1.3/templates/service.yaml new file mode 100644 index 0000000000..bec4be3b99 --- /dev/null +++ b/charts/photoprism/1.1.3/templates/service.yaml @@ -0,0 +1,9 @@ +{{ $selectors := list }} +{{ $selectors = mustAppend $selectors (dict "key" "app" "value" (include "common.names.name" .) ) }} +{{ $selectors = mustAppend $selectors (dict "key" "release" "value" .Release.Name ) }} +{{ $ports := list }} +{{ $ports = mustAppend $ports (dict "name" "web" "port" .Values.web_port "nodePort" .Values.web_port "targetPort" .Values.web_port) }} +{{ $params := . }} +{{ $_ := set $params "commonService" (dict "type" "NodePort" "ports" $ports ) }} +{{ $_1 := set .Values "extraSelectorLabels" $selectors }} +{{ include "common.classes.service" $params }} diff --git a/charts/photoprism/1.1.3/templates/tests/deployment-check.yaml b/charts/photoprism/1.1.3/templates/tests/deployment-check.yaml new file mode 100644 index 0000000000..da2a65ed8d --- /dev/null +++ b/charts/photoprism/1.1.3/templates/tests/deployment-check.yaml @@ -0,0 +1,21 @@ +{{- $serviceName := (include "common.names.fullname" .) -}} +apiVersion: v1 +kind: Pod +metadata: + name: {{ .Release.Name }}-photoprism + labels: + app: {{ .Release.Name }} + release: {{ .Release.Name }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: test-curl + image: alpine/curl + imagePullPolicy: "IfNotPresent" + command: + - /bin/sh + - -ec + - | + curl --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 15 --retry-max-time 90 --retry-all-errors -ksf http://{{ $serviceName }}:{{.Values.web_port}}/ + restartPolicy: Never diff --git a/library/ix-dev/charts/photoprism/Chart.yaml b/library/ix-dev/charts/photoprism/Chart.yaml index 0709e0e427..1fb14868bf 100644 --- a/library/ix-dev/charts/photoprism/Chart.yaml +++ b/library/ix-dev/charts/photoprism/Chart.yaml @@ -3,7 +3,7 @@ description: AI-powered app for browsing, organizing & sharing your photo collec annotations: title: PhotoPrism type: application -version: 2.0.1 +version: 2.0.2 apiVersion: v2 appVersion: '231128' kubeVersion: '>=1.16.0-0' diff --git a/library/ix-dev/charts/photoprism/to_keep_versions.md b/library/ix-dev/charts/photoprism/to_keep_versions.md index e4cce13dfb..64cdd90204 100644 --- a/library/ix-dev/charts/photoprism/to_keep_versions.md +++ b/library/ix-dev/charts/photoprism/to_keep_versions.md @@ -1,4 +1,4 @@ -# 1.1.13 +# 1.1.3 This version is kept because it contains a fix that is needed for migration to v2.x.x It should be safe to remove few months after v2.x.x is released. diff --git a/library/ix-dev/charts/photoprism/to_keep_versions.yaml b/library/ix-dev/charts/photoprism/to_keep_versions.yaml index 5b1f3ff935..054c57975e 100644 --- a/library/ix-dev/charts/photoprism/to_keep_versions.yaml +++ b/library/ix-dev/charts/photoprism/to_keep_versions.yaml @@ -1 +1 @@ -- 1.1.13 +- 1.1.3