From 09eb92f94240fa21e9968e68842fbec5292b3e02 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Thu, 14 Sep 2023 18:45:54 +0000 Subject: [PATCH] Publish new changes in catalog --- community/paperless-ngx/1.0.0/Chart.lock | 6 + community/paperless-ngx/1.0.0/Chart.yaml | 26 + community/paperless-ngx/1.0.0/README.md | 3 + community/paperless-ngx/1.0.0/app-readme.md | 3 + .../1.0.0/charts/common-1.1.1.tgz | Bin 0 -> 61737 bytes .../paperless-ngx/1.0.0/ci/basic-values.yaml | 31 ++ .../paperless-ngx/1.0.0/ci/extra-values.yaml | 44 ++ .../1.0.0/ci/hostNet-values.yaml | 28 ++ community/paperless-ngx/1.0.0/ix_values.yaml | 63 +++ community/paperless-ngx/1.0.0/metadata.yaml | 28 ++ community/paperless-ngx/1.0.0/questions.yaml | 476 ++++++++++++++++++ .../paperless-ngx/1.0.0/templates/NOTES.txt | 1 + .../1.0.0/templates/_configuration.tpl | 77 +++ .../1.0.0/templates/_paperless.tpl | 67 +++ .../1.0.0/templates/_persistence.tpl | 90 ++++ .../paperless-ngx/1.0.0/templates/_portal.tpl | 12 + .../1.0.0/templates/_postgres.tpl | 6 + .../paperless-ngx/1.0.0/templates/_redis.tpl | 5 + .../1.0.0/templates/_service.tpl | 39 ++ .../paperless-ngx/1.0.0/templates/common.yaml | 14 + community/paperless-ngx/item.yaml | 15 + 21 files changed, 1034 insertions(+) create mode 100644 community/paperless-ngx/1.0.0/Chart.lock create mode 100644 community/paperless-ngx/1.0.0/Chart.yaml create mode 100644 community/paperless-ngx/1.0.0/README.md create mode 100644 community/paperless-ngx/1.0.0/app-readme.md create mode 100644 community/paperless-ngx/1.0.0/charts/common-1.1.1.tgz create mode 100644 community/paperless-ngx/1.0.0/ci/basic-values.yaml create mode 100644 community/paperless-ngx/1.0.0/ci/extra-values.yaml create mode 100644 community/paperless-ngx/1.0.0/ci/hostNet-values.yaml create mode 100644 community/paperless-ngx/1.0.0/ix_values.yaml create mode 100644 community/paperless-ngx/1.0.0/metadata.yaml create mode 100644 community/paperless-ngx/1.0.0/questions.yaml create mode 100644 community/paperless-ngx/1.0.0/templates/NOTES.txt create mode 100644 community/paperless-ngx/1.0.0/templates/_configuration.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_paperless.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_persistence.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_portal.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_postgres.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_redis.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/_service.tpl create mode 100644 community/paperless-ngx/1.0.0/templates/common.yaml create mode 100644 community/paperless-ngx/item.yaml diff --git a/community/paperless-ngx/1.0.0/Chart.lock b/community/paperless-ngx/1.0.0/Chart.lock new file mode 100644 index 0000000000..33854cfcdd --- /dev/null +++ b/community/paperless-ngx/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-12T16:52:35.658245695+03:00" diff --git a/community/paperless-ngx/1.0.0/Chart.yaml b/community/paperless-ngx/1.0.0/Chart.yaml new file mode 100644 index 0000000000..54530d3cbd --- /dev/null +++ b/community/paperless-ngx/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: paperless-ngx +description: Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper. +annotations: + title: Paperless-ngx +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 1.17.4 +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.1.1 +home: https://docs.paperless-ngx.com +icon: https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/9a0e44a731d25524b2525d5316b53eee21dad682/docs/assets/logo_full_black.svg +sources: + - https://hub.docker.com/r/paperlessngx/paperless-ngx + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/paperless-ngx + - https://github.com/paperless-ngx/paperless-ngx +keywords: + - document + - management diff --git a/community/paperless-ngx/1.0.0/README.md b/community/paperless-ngx/1.0.0/README.md new file mode 100644 index 0000000000..5134f9c00e --- /dev/null +++ b/community/paperless-ngx/1.0.0/README.md @@ -0,0 +1,3 @@ +# Paperless-ngx + +[Paperless-ngx](https://docs.paperless-ngx.com) is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper. diff --git a/community/paperless-ngx/1.0.0/app-readme.md b/community/paperless-ngx/1.0.0/app-readme.md new file mode 100644 index 0000000000..5134f9c00e --- /dev/null +++ b/community/paperless-ngx/1.0.0/app-readme.md @@ -0,0 +1,3 @@ +# Paperless-ngx + +[Paperless-ngx](https://docs.paperless-ngx.com) is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper. diff --git a/community/paperless-ngx/1.0.0/charts/common-1.1.1.tgz b/community/paperless-ngx/1.0.0/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d006a24facf01316d1b79468ff715a0b72a6bef6 GIT binary patch literal 61737 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 + Database Details + + - Database: `paperless` + - Username: `paperless` + - Password: `{{ .Values.paperlessDbPass }}` + - Host: `{{ .Values.paperlessDbHost }}.{{ .Release.Namespace }}.svc.cluster.local` + - Port: `5432` + + + {{- $_ := unset .Values "paperlessDbPass" }} + {{- $_ := unset .Values "paperlessDbHost" }} diff --git a/community/paperless-ngx/1.0.0/metadata.yaml b/community/paperless-ngx/1.0.0/metadata.yaml new file mode 100644 index 0000000000..5ef1fb83a2 --- /dev/null +++ b/community/paperless-ngx/1.0.0/metadata.yaml @@ -0,0 +1,28 @@ +runAsContext: + - userName: root + groupName: root + gid: 0 + uid: 0 + description: Paperless-ngx can runs as root user. + - userName: postgres + groupName: postgres + gid: 999 + uid: 999 + description: Postgres runs as a non-root user. + - userName: redis + groupName: redis + gid: 1001 + uid: 0 + description: Redis runs as a non-root user and root group. +capabilities: + - name: CHOWN + description: Paperless-ngx is able to chown files. + - name: DAC_OVERRIDE + description: Paperless-ngx is able to bypass permission checks. + - name: FOWNER + description: Paperless-ngx is able bypass permission checks for it's sub-processes. + - name: SETGID + description: Paperless-ngx is able to set group ID for it's sub-processes. + - name: SETUID + description: Paperless-ngx is able to set user ID for it's sub-processes. +hostMounts: [] diff --git a/community/paperless-ngx/1.0.0/questions.yaml b/community/paperless-ngx/1.0.0/questions.yaml new file mode 100644 index 0000000000..61fba6369d --- /dev/null +++ b/community/paperless-ngx/1.0.0/questions.yaml @@ -0,0 +1,476 @@ +groups: + - name: Paperless-ngx Configuration + description: Configure Paperless-ngx + - name: User and Group Configuration + description: Configure User and Group for Paperless-ngx + - name: Network Configuration + description: Configure Network for Paperless-ngx + - name: Storage Configuration + description: Configure Storage for Paperless-ngx + - name: Resources Configuration + description: Configure Resources for Paperless-ngx + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_path" + +questions: + - variable: TZ + group: Paperless-ngx Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: paperlessConfig + label: "" + group: Paperless-ngx Configuration + schema: + type: dict + attrs: + - variable: adminUser + label: Admin User + description: | + The admin user for Paperless-ngx.
+ It is only used for the initial installation. + schema: + type: string + default: "" + immutable: true + required: true + - variable: adminPassword + label: Admin Password + description: | + The admin password for Paperless-ngx.
+ It is only used for the initial installation. + schema: + type: string + default: "" + immutable: true + required: true + private: true + - variable: adminMail + label: Admin Mail + description: | + The admin mail for Paperless-ngx.
+ It is only used for the initial installation. + schema: + type: string + default: "" + immutable: true + required: true + - variable: enableTrash + label: Enable Trash + description: | + Enable the trash feature for Paperless-ngx.
+ When enabled, documents will be moved to the trash instead of being deleted. + schema: + type: boolean + default: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Paperless-ngx. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: paperlessID + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Paperless-ngx files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Paperless-ngx files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + + - variable: paperlessNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Paperless-ngx Web UI. + schema: + type: int + default: 30070 + min: 9000 + max: 65535 + required: true + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled.
+ schema: + type: boolean + default: false + + - variable: paperlessStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Paperless-ngx Data Storage + description: The path to store Paperless-ngx Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: media + label: Paperless-ngx Media Storage + description: The path to store Paperless-ngx Media. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "media" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: consume + label: Paperless-ngx Consumption Storage + description: The path to store Paperless-ngx Data for Consumption. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "consume" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: trash + label: Paperless-ngx Trash Storage + description: | + The path to store Paperless-ngx Trash.
+ This is only used when the trash feature is enabled. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "trash" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + + - variable: pgData + label: Paperless-ngx Postgres Data Storage + description: The path to store Paperless-ngx Postgres Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: pgData + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: pgBackup + label: Paperless-ngx Postgres Backup Storage + description: The path to store Paperless-ngx Postgres Backup. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: pgBackup + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Paperless-ngx. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Paperless-ngx. + schema: + type: string + max_length: 6 + valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$' + valid_chars_error: | + Valid CPU limit formats are
+ - Plain Integer - eg. 1
+ - Float - eg. 0.5
+ - Milicpu - eg. 500m + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Paperless-ngx. + schema: + type: string + max_length: 12 + valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$' + valid_chars_error: | + Valid Memory limit formats are
+ - Suffixed with E/P/T/G/M/K - eg. 1G
+ - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
+ - Plain Integer in bytes - eg. 1024
+ - Exponent - eg. 134e6 + default: "8Gi" + required: true diff --git a/community/paperless-ngx/1.0.0/templates/NOTES.txt b/community/paperless-ngx/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/paperless-ngx/1.0.0/templates/_configuration.tpl b/community/paperless-ngx/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..af0e2f15d5 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_configuration.tpl @@ -0,0 +1,77 @@ +{{- define "paperless.configuration" -}} + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $dbHost := (printf "%s-postgres" $fullname) -}} + {{- $dbUser := "paperless" -}} + {{- $dbName := "paperless" -}} + + {{- $dbPass := randAlphaNum 32 -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-postgres-creds" $fullname)) -}} + {{- $dbPass = ((index .data "POSTGRES_PASSWORD") | b64dec) -}} + {{- end -}} + + {{/* Temporary set dynamic db details on values, + so we can print them on the notes */}} + {{- $_ := set .Values "paperlessDbPass" $dbPass -}} + {{- $_ := set .Values "paperlessDbHost" $dbHost -}} + + {{- $redisHost := (printf "%s-redis" $fullname) -}} + + {{- $redisPass := randAlphaNum 32 -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-redis-creds" $fullname)) -}} + {{- $redisPass = ((index .data "REDIS_PASSWORD") | b64dec) -}} + {{- end -}} + + {{- $dbURL := (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $dbUser $dbPass $dbHost $dbName) -}} + + {{- $secretKey := randAlphaNum 32 -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-paperless-creds" $fullname)) -}} + {{- $secretKey = ((index .data "PAPERLESS_SECRET_KEY") | b64dec) -}} + {{- end }} + +configmap: + paperless-config: + enabled: true + data: + PAPERLESS_TIME_ZONE: {{ .Values.TZ }} + PAPERLESS_BIND_ADDR: "0.0.0.0" + PAPERLESS_PORT: {{ .Values.paperlessNetwork.webPort | quote }} + USERMAP_UID: {{ .Values.paperlessID.user | quote }} + USERMAP_GID: {{ .Values.paperlessID.group | quote }} + PAPERLESS_DATA_DIR: /usr/src/paperless/data + PAPERLESS_MEDIA_ROOT: /usr/src/paperless/media + PAPERLESS_CONSUMPTION_DIR: /usr/src/paperless/consume + PAPERLESS_TRASH_DIR: {{ ternary "/usr/src/paperless/trash" nil .Values.paperlessConfig.enableTrash }} + +secret: + postgres-creds: + enabled: true + data: + POSTGRES_USER: {{ $dbUser }} + POSTGRES_DB: {{ $dbName }} + POSTGRES_PASSWORD: {{ $dbPass }} + POSTGRES_HOST: {{ $dbHost }} + POSTGRES_URL: {{ $dbURL }} + + redis-creds: + enabled: true + data: + ALLOW_EMPTY_PASSWORD: "no" + REDIS_PASSWORD: {{ $redisPass }} + REDIS_HOST: {{ $redisHost }} + + paperless-creds: + enabled: true + data: + PAPERLESS_SECRET_KEY: {{ $secretKey }} + PAPERLESS_ADMIN_USER: {{ .Values.paperlessConfig.adminUser }} + PAPERLESS_ADMIN_MAIL: {{ .Values.paperlessConfig.adminMail }} + PAPERLESS_ADMIN_PASSWORD: {{ .Values.paperlessConfig.adminPassword }} + PAPERLESS_DBENGINE: postgresql + PAPERLESS_DBHOST: {{ $dbHost }} + PAPERLESS_DBPORT: "5432" + PAPERLESS_DBNAME: {{ $dbName }} + PAPERLESS_DBUSER: {{ $dbUser }} + PAPERLESS_DBPASS: {{ $dbPass }} + PAPERLESS_REDIS: {{ printf "redis://default:%s@%s:6379" $redisPass $redisHost }} +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_paperless.tpl b/community/paperless-ngx/1.0.0/templates/_paperless.tpl new file mode 100644 index 0000000000..cf691ce218 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_paperless.tpl @@ -0,0 +1,67 @@ +{{- define "paperless.workload" -}} +workload: + paperless: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.paperlessNetwork.hostNetwork }} + containers: + paperless: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + - SETGID + - SETUID + envFrom: + - secretRef: + name: paperless-creds + - configMapRef: + name: paperless-config + {{ with .Values.paperlessConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: {{ .Values.paperlessNetwork.webPort }} + path: / + readiness: + enabled: true + type: http + port: {{ .Values.paperlessNetwork.webPort }} + path: / + startup: + enabled: true + type: http + port: {{ .Values.paperlessNetwork.webPort }} + path: / + initContainers: + {{- if .Values.paperlessConfig.enableTrash }} + {{/* Paperless entrypoint never chowns the trash and fails if the permissions are wrong */}} + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.paperlessID.user + "GID" .Values.paperlessID.group + "mode" "check" + "type" "init") | nindent 8 }} + {{- end }} + {{- include "ix.v1.common.app.redisWait" (dict "name" "02-redis-wait" + "secretName" "redis-creds") | nindent 8 }} + {{- include "ix.v1.common.app.postgresWait" (dict "name" "03-postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_persistence.tpl b/community/paperless-ngx/1.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..01036d24f1 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_persistence.tpl @@ -0,0 +1,90 @@ +{{- define "paperless.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.paperlessStorage.data.type }} + datasetName: {{ .Values.paperlessStorage.data.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.data.hostPath | default "" }} + targetSelector: + paperless: + paperless: + mountPath: /usr/src/paperless/data + media: + enabled: true + type: {{ .Values.paperlessStorage.media.type }} + datasetName: {{ .Values.paperlessStorage.media.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.media.hostPath | default "" }} + targetSelector: + paperless: + paperless: + mountPath: /usr/src/paperless/media + consume: + enabled: true + type: {{ .Values.paperlessStorage.consume.type }} + datasetName: {{ .Values.paperlessStorage.consume.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.consume.hostPath | default "" }} + targetSelector: + paperless: + paperless: + mountPath: /usr/src/paperless/consume + trash: + enabled: true + type: {{ .Values.paperlessStorage.trash.type }} + datasetName: {{ .Values.paperlessStorage.trash.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.trash.hostPath | default "" }} + targetSelector: + paperless: + paperless: + mountPath: /usr/src/paperless/trash + 01-permissions: + mountPath: /mnt/directories/trash + tmp: + enabled: true + type: emptyDir + targetSelector: + paperless: + paperless: + mountPath: /tmp + {{- range $idx, $storage := .Values.paperlessStorage.additionalStorages }} + {{ printf "paperless-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + paperless: + paperless: + mountPath: {{ $storage.mountPath }} + {{- end }} + + postgresdata: + enabled: true + type: {{ .Values.paperlessStorage.pgData.type }} + datasetName: {{ .Values.paperlessStorage.pgData.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.pgData.hostPath | default "" }} + targetSelector: + # Postgres pod + postgres: + # Postgres container + postgres: + mountPath: /var/lib/postgresql/data + # Postgres - Permissions container + # Different than the 01-permissions + permissions: + mountPath: /mnt/directories/postgres_data + postgresbackup: + enabled: true + type: {{ .Values.paperlessStorage.pgBackup.type }} + datasetName: {{ .Values.paperlessStorage.pgBackup.datasetName | default "" }} + hostPath: {{ .Values.paperlessStorage.pgBackup.hostPath | default "" }} + targetSelector: + # Postgres backup pod + postgresbackup: + # Postgres backup container + postgresbackup: + mountPath: /postgres_backup + # Postgres - Permissions container + # Different than the 01-permissions + permissions: + mountPath: /mnt/directories/postgres_backup +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_portal.tpl b/community/paperless-ngx/1.0.0/templates/_portal.tpl new file mode 100644 index 0000000000..2844df9162 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "paperless.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.paperlessNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_postgres.tpl b/community/paperless-ngx/1.0.0/templates/_postgres.tpl new file mode 100644 index 0000000000..0c050b6ca0 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_postgres.tpl @@ -0,0 +1,6 @@ +{{- define "postgres.workload" -}} +workload: +{{- include "ix.v1.common.app.postgres" (dict "secretName" "postgres-creds" + "resources" .Values.resources + "ixChartContext" .Values.ixChartContext) | nindent 2 }} +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_redis.tpl b/community/paperless-ngx/1.0.0/templates/_redis.tpl new file mode 100644 index 0000000000..c3c7c86a13 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_redis.tpl @@ -0,0 +1,5 @@ +{{- define "redis.workload" -}} +workload: +{{- include "ix.v1.common.app.redis" (dict "secretName" "redis-creds" + "resources" .Values.resources) | nindent 2 }} +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/_service.tpl b/community/paperless-ngx/1.0.0/templates/_service.tpl new file mode 100644 index 0000000000..2ad9694680 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/_service.tpl @@ -0,0 +1,39 @@ +{{- define "paperless.service" -}} +service: + paperless: + enabled: true + primary: true + type: NodePort + targetSelector: paperless + ports: + webui: + enabled: true + primary: true + port: {{ .Values.paperlessNetwork.webPort }} + nodePort: {{ .Values.paperlessNetwork.webPort }} + targetSelector: paperless + + redis: + enabled: true + type: ClusterIP + targetSelector: redis + ports: + redis: + enabled: true + primary: true + port: 6379 + targetPort: 6379 + targetSelector: redis + + postgres: + enabled: true + type: ClusterIP + targetSelector: postgres + ports: + postgres: + enabled: true + primary: true + port: 5432 + targetPort: 5432 + targetSelector: postgres +{{- end -}} diff --git a/community/paperless-ngx/1.0.0/templates/common.yaml b/community/paperless-ngx/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..40e5a3b104 --- /dev/null +++ b/community/paperless-ngx/1.0.0/templates/common.yaml @@ -0,0 +1,14 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "paperless.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "paperless.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "paperless.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "paperless.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "postgres.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "redis.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "paperless.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/paperless-ngx/item.yaml b/community/paperless-ngx/item.yaml new file mode 100644 index 0000000000..94588e3ea1 --- /dev/null +++ b/community/paperless-ngx/item.yaml @@ -0,0 +1,15 @@ +icon_url: https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/9a0e44a731d25524b2525d5316b53eee21dad682/docs/assets/logo_full_black.svg +categories: + - productivity +screenshots: + - https://docs.paperless-ngx.com/assets/screenshots/dashboard.png + - https://docs.paperless-ngx.com/assets/screenshots/documents-table.png + - https://docs.paperless-ngx.com/assets/screenshots/documents-smallcards.png + - https://docs.paperless-ngx.com/assets/screenshots/documents-largecards.png + - https://docs.paperless-ngx.com/assets/screenshots/documents-smallcards-dark.png + - https://docs.paperless-ngx.com/assets/screenshots/documents-filter.png + - https://docs.paperless-ngx.com/assets/screenshots/bulk-edit.png + - https://docs.paperless-ngx.com/assets/screenshots/editing.png +tags: + - document + - management