From 7ab2b165e9ce382b5d6a365318e5e1b7bee87bc1 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Tue, 12 Sep 2023 18:37:49 +0000 Subject: [PATCH] Publish new changes in catalog --- community/n8n/1.0.0/Chart.lock | 6 + community/n8n/1.0.0/Chart.yaml | 26 ++ community/n8n/1.0.0/README.md | 11 + community/n8n/1.0.0/app-readme.md | 11 + community/n8n/1.0.0/charts/common-1.1.1.tgz | Bin 0 -> 61738 bytes community/n8n/1.0.0/ci/basic-values.yaml | 13 + community/n8n/1.0.0/ci/https-values.yaml | 107 +++++++ community/n8n/1.0.0/ix_values.yaml | 52 ++++ community/n8n/1.0.0/metadata.yaml | 18 ++ community/n8n/1.0.0/questions.yaml | 281 ++++++++++++++++++ community/n8n/1.0.0/templates/NOTES.txt | 1 + .../n8n/1.0.0/templates/_configuration.tpl | 86 ++++++ community/n8n/1.0.0/templates/_n8n.tpl | 61 ++++ .../n8n/1.0.0/templates/_persistence.tpl | 86 ++++++ community/n8n/1.0.0/templates/_portal.tpl | 18 ++ community/n8n/1.0.0/templates/_postgres.tpl | 6 + community/n8n/1.0.0/templates/_redis.tpl | 6 + community/n8n/1.0.0/templates/_service.tpl | 38 +++ community/n8n/1.0.0/templates/_validation.tpl | 6 + community/n8n/1.0.0/templates/common.yaml | 16 + community/n8n/item.yaml | 11 + 21 files changed, 860 insertions(+) create mode 100644 community/n8n/1.0.0/Chart.lock create mode 100644 community/n8n/1.0.0/Chart.yaml create mode 100644 community/n8n/1.0.0/README.md create mode 100644 community/n8n/1.0.0/app-readme.md create mode 100644 community/n8n/1.0.0/charts/common-1.1.1.tgz create mode 100644 community/n8n/1.0.0/ci/basic-values.yaml create mode 100644 community/n8n/1.0.0/ci/https-values.yaml create mode 100644 community/n8n/1.0.0/ix_values.yaml create mode 100644 community/n8n/1.0.0/metadata.yaml create mode 100644 community/n8n/1.0.0/questions.yaml create mode 100644 community/n8n/1.0.0/templates/NOTES.txt create mode 100644 community/n8n/1.0.0/templates/_configuration.tpl create mode 100644 community/n8n/1.0.0/templates/_n8n.tpl create mode 100644 community/n8n/1.0.0/templates/_persistence.tpl create mode 100644 community/n8n/1.0.0/templates/_portal.tpl create mode 100644 community/n8n/1.0.0/templates/_postgres.tpl create mode 100644 community/n8n/1.0.0/templates/_redis.tpl create mode 100644 community/n8n/1.0.0/templates/_service.tpl create mode 100644 community/n8n/1.0.0/templates/_validation.tpl create mode 100644 community/n8n/1.0.0/templates/common.yaml create mode 100644 community/n8n/item.yaml diff --git a/community/n8n/1.0.0/Chart.lock b/community/n8n/1.0.0/Chart.lock new file mode 100644 index 0000000000..f787bacea0 --- /dev/null +++ b/community/n8n/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-07T19:31:40.578164035+03:00" diff --git a/community/n8n/1.0.0/Chart.yaml b/community/n8n/1.0.0/Chart.yaml new file mode 100644 index 0000000000..69243d329c --- /dev/null +++ b/community/n8n/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: n8n +description: n8n is an extendable workflow automation tool. +annotations: + title: n8n +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 1.6.1 +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://n8n.io/ +icon: https://avatars.githubusercontent.com/u/45487711 +sources: + - https://github.com/n8n-io/n8n + - https://github.com/truenas/charts/tree/master/community/n8n + - https://hub.docker.com/r/n8nio/n8n +keywords: + - workflows + - automation diff --git a/community/n8n/1.0.0/README.md b/community/n8n/1.0.0/README.md new file mode 100644 index 0000000000..8edbca9b4f --- /dev/null +++ b/community/n8n/1.0.0/README.md @@ -0,0 +1,11 @@ +# n8n + +[n8n](https://n8n.io/) is an extendable workflow automation tool. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterward, the `postgres` container will run as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/n8n/1.0.0/app-readme.md b/community/n8n/1.0.0/app-readme.md new file mode 100644 index 0000000000..8edbca9b4f --- /dev/null +++ b/community/n8n/1.0.0/app-readme.md @@ -0,0 +1,11 @@ +# n8n + +[n8n](https://n8n.io/) is an extendable workflow automation tool. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterward, the `postgres` container will run as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/n8n/1.0.0/charts/common-1.1.1.tgz b/community/n8n/1.0.0/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..46584e357a00f8545b425850c73c49f24e0a28f5 GIT binary patch literal 61738 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 literal 0 HcmV?d00001 diff --git a/community/n8n/1.0.0/ci/basic-values.yaml b/community/n8n/1.0.0/ci/basic-values.yaml new file mode 100644 index 0000000000..460cb092f0 --- /dev/null +++ b/community/n8n/1.0.0/ci/basic-values.yaml @@ -0,0 +1,13 @@ +n8nNetwork: + webPort: 31000 + +n8nStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/pgData + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/pgBackup diff --git a/community/n8n/1.0.0/ci/https-values.yaml b/community/n8n/1.0.0/ci/https-values.yaml new file mode 100644 index 0000000000..c2fedfe6b7 --- /dev/null +++ b/community/n8n/1.0.0/ci/https-values.yaml @@ -0,0 +1,107 @@ +n8nStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/pgData + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/pgBackup + +n8nConfig: + webHost: localhost + +n8nRunAs: + user: 1001 + group: 1001 + +n8nNetwork: + webPort: 31000 + certificateID: 1 + +ixCertificates: + "1": + certificate: | + -----BEGIN CERTIFICATE----- + MIIEdjCCA16gAwIBAgIDYFMYMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz + ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD + VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w + HhcNMjEwODMwMjMyMzU0WhcNMjMxMjAzMjMyMzU0WjBuMQswCQYDVQQDDAJhZDEL + MAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxDTALBgNVBAcMBGFzZGYxDTALBgNV + BAoMBGFkc2YxDTALBgNVBAsMBGFzZGYxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w + ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7+1xOHRQyOnQTHFcrdasX + Zl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/AbkH7oVFWC1 + P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI4vQCdYgW + 2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2dNgsxKU0H + PGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB+Zie331t + AzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7A/FuDVg3 + AgMBAAGjggEdMIIBGTAnBgNVHREEIDAehwTAqAADhwTAqAAFhwTAqAC2hwTAqACB + hwTAqACSMB0GA1UdDgQWBBQ4G2ff4tgZl4vmo4xCfqmJhdqShzAMBgNVHRMBAf8E + AjAAMIGYBgNVHSMEgZAwgY2AFLlYf9L99nxJDcpCM/LT3V5hQ/a3oXCkbjBsMQww + CgYDVQQDDANhc2QxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQH + DAJhZjENMAsGA1UECgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkB + FgdhQGEuY29tggNgUxcwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEwDgYDVR0PAQH/ + BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IBAQA6FpOInEHB5iVk3FP67GybJ29vHZTD + KQHbQgmg8s4L7qIsA1HQ+DMCbdylpA11x+t/eL/n48BvGw2FNXpN6uykhLHJjbKR + h8yITa2KeD3LjLYhScwIigXmTVYSP3km6s8jRL6UKT9zttnIHyXVpBDya6Q4WTMx + fmfC6O7t1PjQ5ZyVtzizIUP8ah9n4TKdXU4A3QIM6WsJXpHb+vqp1WDWJ7mKFtgj + x5TKv3wcPnktx0zMPfLb5BTSE9rc9djcBG0eIAsPT4FgiatCUChe7VhuMnqskxEz + MymJLoq8+mzucRwFkOkR2EIt1x+Irl2mJVMeBow63rVZfUQBD8h++LqB + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- + MIIEhDCCA2ygAwIBAgIDYFMXMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz + ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD + VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w + HhcNMjEwODMwMjMyMDQ1WhcNMzEwODI4MjMyMDQ1WjBsMQwwCgYDVQQDDANhc2Qx + CzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQHDAJhZjENMAsGA1UE + CgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkBFgdhQGEuY29tMIIB + IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq//c0hEEr83CS1pMgsHX50jt + 2MqIbcf63UUNJTiYpUUvUQSFJFc7m/dr+RTZvu97eDCnD5K2qkHHvTPaPZwY+Djf + iy7N641Sz6u/y3Yo3xxs1Aermsfedh48vusJpjbkT2XS44VjbkrpKcWDNVpp3Evd + M7oJotXeUsZ+imiyVCfr4YhoY5gbGh/r+KN9Wf9YKoUyfLLZGwdZkhtX2zIbidsL + Thqi9YTaUHttGinjiBBum234u/CfvKXsfG3yP2gvBGnlvZnM9ktv+lVffYNqlf7H + VmB1bKKk84HtzuW5X76SGAgOG8eHX4x5ZLI1WQUuoQOVRl1I0UCjBtbz8XhwvQID + AQABo4IBLTCCASkwLQYDVR0RBCYwJIcEwKgABYcEwKgAA4cEwKgAkocEwKgAtYcE + wKgAgYcEwKgAtjAdBgNVHQ4EFgQUuVh/0v32fEkNykIz8tPdXmFD9rcwDwYDVR0T + AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBS5WH/S/fZ8SQ3KQjPy091eYUP2t6Fw + pG4wbDEMMAoGA1UEAwwDYXNkMQswCQYDVQQGEwJVUzENMAsGA1UECAwEYXNkZjEL + MAkGA1UEBwwCYWYxDTALBgNVBAoMBGFzZGYxDDAKBgNVBAsMA2FzZDEWMBQGCSqG + SIb3DQEJARYHYUBhLmNvbYIDYFMXMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF + BQcDAjAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAKEocOmVuWlr + zegtKYMe8NhHIkFY9oVn5ym6RHNOJpPH4QF8XYC3Z5+iC5yGh4P/jVe/4I4SF6Ql + PtofU0jNq5vzapt/y+m008eXqPQFmoUOvu+JavoRVcRx2LIP5AgBA1mF56CSREsX + TkuJAA9IUQ8EjnmAoAeKINuPaKxGDuU8BGCMqr/qd564MKNf9XYL+Fb2rlkA0O2d + 2No34DQLgqSmST/LAvPM7Cbp6knYgnKmGr1nETCXasg1cueHLnWWTvps2HiPp2D/ + +Fq0uqcZLu4Mdo0CPs4e5sHRyldEnRSKh0DVLprq9zr/GMipmPLJUsT5Jed3sj0w + M7Y3vwxshpo= + -----END CERTIFICATE----- + privatekey: | + -----BEGIN PRIVATE KEY----- + MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7+1xOHRQyOnQT + HFcrdasXZl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/Abk + H7oVFWC1P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI + 4vQCdYgW2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2d + NgsxKU0HPGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB + +Zie331tAzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7 + A/FuDVg3AgMBAAECggEAapt30rj9DitGTtxAt13pJMEhyYxvvD3WkvmJwguF/Bbu + eW0Ba1c668fMeRCA54FWi1sMqusPS4HUqqUvk+tmyAOsAF4qgD/A4MMSC7uJSVI5 + N/JWhJWyhCY94/FPakiO1nbPbVw41bcqtzU2qvparpME2CtxSCbDiqm7aaag3Kqe + EF0fGSUdZ+TYl9JM05+eIyiX+UY19Fg0OjTHMn8nGpxcNTfDBdQ68TKvdo/dtIKL + PLKzJUNNdM8odC4CvQtfGMqaslwZwXkiOl5VJcW21ncj/Y0ngEMKeD/i65ZoqGdR + 0FKCQYEAGtM2FvJcZQ92Wsw7yj2bK2MSegVUyLK32QKBgQDe8syVCepPzRsfjfxA + 6TZlWcGuTZLhwIx97Ktw3VcQ1f4rLoEYlv0xC2VWBORpzIsJo4I/OLmgp8a+Ga8z + FkVRnq90dV3t4NP9uJlHgcODHnOardC2UUka4olBSCG6zmK4Jxi34lOxhGRkshOo + L4IBeOIB5g+ZrEEXkzfYJHESRQKBgQDX2YhFhGIrT8BAnC5BbXbhm8h6Bhjz8DYL + d+qhVJjef7L/aJxViU0hX9Ba2O8CLK3FZeREFE3hJPiJ4TZSlN4evxs5p+bbNDcA + 0mhRI/o3X4ac6IxdRebyYnCOB/Cu94/MzppcZcotlCekKNike7eorCcX4Qavm7Pu + MUuQ+ifmSwKBgEnchoqZzlbBzMqXb4rRuIO7SL9GU/MWp3TQg7vQmJerTZlgvsQ2 + wYsOC3SECmhCq4117iCj2luvOdihCboTFsQDnn0mpQe6BIF6Ns3J38wAuqv0CcFd + DKsrge1uyD3rQilgSoAhKzkUc24o0PpXQurZ8YZPgbuXpbj5vPaOnCdBAoGACYc7 + wb3XS4wos3FxhUfcwJbM4b4VKeeHqzfu7pI6cU/3ydiHVitKcVe2bdw3qMPqI9Wc + nvi6e17Tbdq4OCsEJx1OiVwFD9YdO3cOTc6lw/3+hjypvZBRYo+/4jUthbu96E+S + dtOzehGZMmDvN0uSzupSi3ZOgkAAUFpyuIKickMCgYAId0PCRjonO2thn/R0rZ7P + //L852uyzYhXKw5/fjFGhQ6LbaLgIRFaCZ0L2809u0HFnNvJjHv4AKP6j+vFQYYY + qQ+66XnfsA9G/bu4MDS9AX83iahD9IdLXQAy8I19prAbpVumKegPbMnNYNB/TYEc + 3G15AKCXo7jjOUtHY01DCQ== + -----END PRIVATE KEY----- diff --git a/community/n8n/1.0.0/ix_values.yaml b/community/n8n/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..2051a37771 --- /dev/null +++ b/community/n8n/1.0.0/ix_values.yaml @@ -0,0 +1,52 @@ +image: + repository: n8nio/n8n + pullPolicy: IfNotPresent + tag: 1.6.1 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +n8nConfig: + webHost: localhost + additionalEnvs: [] + +n8nRunAs: + user: 568 + group: 568 + +n8nNetwork: + webPort: 30068 + certificateID: + hostNetwork: false + +n8nStorage: + data: + type: ixVolume + datasetName: data + pgData: + type: ixVolume + hostPath: pgData + pgBackup: + type: ixVolume + hostPath: pgBackup + additionalStorages: [] + +notes: + custom: | + ## Database + You can connect to the database using the pgAdmin App from the catalog + +
+ Database Details + + - Database: `n8n` + - Username: `n8n` + - Password: `{{ .Values.n8nDbPass }}` + - Host: `{{ .Values.n8nDbHost }}.{{ .Release.Namespace }}.svc.cluster.local` + - Port: `5432` + +
+ {{- $_ := unset .Values "n8nDbPass" }} + {{- $_ := unset .Values "n8nDbHost" }} diff --git a/community/n8n/1.0.0/metadata.yaml b/community/n8n/1.0.0/metadata.yaml new file mode 100644 index 0000000000..3a348adcaa --- /dev/null +++ b/community/n8n/1.0.0/metadata.yaml @@ -0,0 +1,18 @@ +runAsContext: + - userName: n8n + groupName: n8n + gid: 568 + uid: 568 + description: n8n runs as any non-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: [] +hostMounts: [] diff --git a/community/n8n/1.0.0/questions.yaml b/community/n8n/1.0.0/questions.yaml new file mode 100644 index 0000000000..ac5940f610 --- /dev/null +++ b/community/n8n/1.0.0/questions.yaml @@ -0,0 +1,281 @@ +groups: + - name: n8n Configuration + description: Configure n8n + - name: User and Group Configuration + description: Configure User and Group for n8n + - name: Network Configuration + description: Configure Network for n8n + - name: Storage Configuration + description: Configure Storage for n8n + - name: Resources Configuration + description: Configure Resources for n8n + +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: n8nConfig + label: "" + group: n8n Configuration + schema: + type: dict + attrs: + - variable: webHost + label: n8n Host + description: | + The host address.
+ Examples:
+ n8n.example.com
+ 192.168.1.100 + schema: + type: string + default: "" + required: true + $ref: + - "definitions/nodeIP" + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for n8n. + 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: n8nRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that n8n will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that n8n will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: n8nNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the n8n WebUI. + schema: + type: int + default: 30068 + 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: certificateID + label: Certificate + description: The certificate to use for n8n + schema: + type: int + "null": true + $ref: + - "definitions/certificate" + + - variable: n8nStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: n8n Data Storage + description: The path to store n8n 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: pgData + label: n8n Postgres Data Storage + description: The path to store n8n 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: n8n Postgres Backup Storage + description: The path to store n8n 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: resources + label: "" + group: Resources Configuration + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for n8n. + 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 n8n. + 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/n8n/1.0.0/templates/NOTES.txt b/community/n8n/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/n8n/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/n8n/1.0.0/templates/_configuration.tpl b/community/n8n/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..d8c7afb511 --- /dev/null +++ b/community/n8n/1.0.0/templates/_configuration.tpl @@ -0,0 +1,86 @@ +{{- define "n8n.configuration" -}} + + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $dbHost := (printf "%s-postgres" $fullname) -}} + {{- $dbUser := "n8n" -}} + {{- $dbName := "n8n" -}} + + {{- $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 "n8nDbPass" $dbPass -}} + {{- $_ := set .Values "n8nDbHost" $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 -}} + + {{- $encKey := (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-n8n-config" $fullname)) -}} + {{- $encKey = ((index .data "N8N_ENCRYPTION_KEY") | b64dec) -}} + {{- end -}} + + {{- $dbURL := (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $dbUser $dbPass $dbHost $dbName) }} +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 }} + + n8n-creds: + enabled: true + data: + N8N_ENCRYPTION_KEY: {{ $encKey }} + DB_TYPE: postgresdb + EXECUTIONS_MODE: queue + DB_POSTGRESDB_USER: {{ $dbUser }} + DB_POSTGRESDB_PASSWORD: {{ $dbPass }} + DB_POSTGRESDB_DATABASE: {{ $dbName }} + DB_POSTGRESDB_HOST: {{ $dbHost }} + DB_POSTGRESDB_PORT: "5432" + QUEUE_BULL_REDIS_USERNAME: default + QUEUE_BULL_REDIS_PASSWORD: {{ $redisPass }} + QUEUE_BULL_REDIS_DB: "0" + QUEUE_BULL_REDIS_HOST: {{ $redisHost }} + QUEUE_BULL_REDIS_PORT: "6379" + +{{- $prot := "http" -}} +{{- if .Values.n8nNetwork.certificateID -}} + {{- $prot = "https" -}} +{{- end }} +configmap: + n8n-config: + enabled: true + data: + NODE_ENV: production + N8N_PATH: / + N8N_PORT: {{ .Values.n8nNetwork.webPort | quote }} + N8N_HOST: {{ .Values.n8nConfig.webHost | quote }} + GENERIC_TIMEZONE: {{ .Values.TZ }} + N8N_PROTOCOL: {{ $prot }} + N8N_USER_FOLDER: "/data" + {{- if .Values.n8nNetwork.certificateID }} + N8N_SSL_KEY: /certs/tls.key + N8N_SSL_CERT: /certs/tls.crt + {{- end }} + +{{- end -}} diff --git a/community/n8n/1.0.0/templates/_n8n.tpl b/community/n8n/1.0.0/templates/_n8n.tpl new file mode 100644 index 0000000000..dcaacbefa2 --- /dev/null +++ b/community/n8n/1.0.0/templates/_n8n.tpl @@ -0,0 +1,61 @@ +{{- define "n8n.workload" -}} +workload: + n8n: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.n8nNetwork.hostNetwork }} + containers: + n8n: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.n8nRunAs.user }} + runAsGroup: {{ .Values.n8nRunAs.group }} + runAsNonRoot: false + readOnlyRootFilesystem: false + envFrom: + - secretRef: + name: n8n-creds + - configMapRef: + name: n8n-config + {{ with .Values.n8nConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + {{ $prot := "http" }} + {{ if .Values.n8nNetwork.certificateID }} + {{ $prot = "https" }} + {{ end }} + liveness: + enabled: true + type: {{ $prot }} + path: /healthz + port: {{ .Values.n8nNetwork.webPort }} + readiness: + enabled: true + type: {{ $prot }} + path: /healthz + port: {{ .Values.n8nNetwork.webPort }} + startup: + enabled: true + type: {{ $prot }} + path: /healthz + port: {{ .Values.n8nNetwork.webPort }} + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.n8nRunAs.user + "GID" .Values.n8nRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} + {{- 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/n8n/1.0.0/templates/_persistence.tpl b/community/n8n/1.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..e5356478f2 --- /dev/null +++ b/community/n8n/1.0.0/templates/_persistence.tpl @@ -0,0 +1,86 @@ +{{- define "n8n.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.n8nStorage.data.type }} + datasetName: {{ .Values.n8nStorage.data.datasetName | default "" }} + hostPath: {{ .Values.n8nStorage.data.hostPath | default "" }} + targetSelector: + n8n: + n8n: + mountPath: /data + 01-permissions: + mountPath: /mnt/directories/data + tmp: + enabled: true + type: emptyDir + targetSelector: + n8n: + n8n: + mountPath: /tmp + {{- range $idx, $storage := .Values.n8nStorage.additionalStorages }} + {{ printf "n8n-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + n8n: + n8n: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} + # Postgres + postgresdata: + enabled: true + type: {{ .Values.n8nStorage.pgData.type }} + datasetName: {{ .Values.n8nStorage.pgData.datasetName | default "" }} + hostPath: {{ .Values.n8nStorage.pgData.hostPath | default "" }} + targetSelector: + # Postgres pod + postgres: + # Postgres container + postgres: + mountPath: /var/lib/postgresql/data + # Permissions container + permissions: + mountPath: /mnt/directories/postgres_data + # Postgres backup + postgresbackup: + enabled: true + type: {{ .Values.n8nStorage.pgBackup.type }} + datasetName: {{ .Values.n8nStorage.pgBackup.datasetName | default "" }} + hostPath: {{ .Values.n8nStorage.pgBackup.hostPath | default "" }} + targetSelector: + # Postgres backup pod + postgresbackup: + # Postgres backup container + postgresbackup: + mountPath: /postgres_backup + # Permissions container + permissions: + mountPath: /mnt/directories/postgres_backup + {{- if .Values.n8nNetwork.certificateID }} + cert: + enabled: true + type: secret + objectName: n8n-cert + defaultMode: "0600" + items: + - key: tls.key + path: tls.key + - key: tls.crt + path: tls.crt + targetSelector: + n8n: + n8n: + mountPath: /certs + readOnly: true + +scaleCertificate: + n8n-cert: + enabled: true + id: {{ .Values.n8nNetwork.certificateID }} + {{- end }} +{{- end -}} diff --git a/community/n8n/1.0.0/templates/_portal.tpl b/community/n8n/1.0.0/templates/_portal.tpl new file mode 100644 index 0000000000..fc6a5e6e25 --- /dev/null +++ b/community/n8n/1.0.0/templates/_portal.tpl @@ -0,0 +1,18 @@ +{{- define "n8n.portal" -}} + {{- $protocol := "http" -}} + {{- if .Values.n8nNetwork.certificateID -}} + {{- $protocol = "https" -}} + {{- end -}} + {{- $host := .Values.n8nConfig.webHost -}} + {{- $port := .Values.n8nNetwork.webPort -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + port: {{ $port | quote }} + path: "/" + protocol: {{ $protocol }} + host: {{ $host }} +{{- end -}} diff --git a/community/n8n/1.0.0/templates/_postgres.tpl b/community/n8n/1.0.0/templates/_postgres.tpl new file mode 100644 index 0000000000..0c050b6ca0 --- /dev/null +++ b/community/n8n/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/n8n/1.0.0/templates/_redis.tpl b/community/n8n/1.0.0/templates/_redis.tpl new file mode 100644 index 0000000000..c90b61b2be --- /dev/null +++ b/community/n8n/1.0.0/templates/_redis.tpl @@ -0,0 +1,6 @@ +{{- define "redis.workload" -}} +workload: +{{- include "ix.v1.common.app.redis" (dict "secretName" "redis-creds" + "resources" .Values.resources) | nindent 2 }} + +{{- end -}} diff --git a/community/n8n/1.0.0/templates/_service.tpl b/community/n8n/1.0.0/templates/_service.tpl new file mode 100644 index 0000000000..13232cd107 --- /dev/null +++ b/community/n8n/1.0.0/templates/_service.tpl @@ -0,0 +1,38 @@ +{{- define "n8n.service" -}} +service: + n8n: + enabled: true + primary: true + type: NodePort + targetSelector: n8n + ports: + webui: + enabled: true + primary: true + port: {{ .Values.n8nNetwork.webPort }} + nodePort: {{ .Values.n8nNetwork.webPort }} + targetSelector: n8n + # Redis + redis: + enabled: true + type: ClusterIP + targetSelector: redis + ports: + redis: + enabled: true + primary: true + port: 6379 + targetPort: 6379 + targetSelector: redis + # Postgres + postgres: + enabled: true + type: ClusterIP + targetSelector: postgres + ports: + postgres: + enabled: true + primary: true + port: 5432 + targetSelector: postgres +{{- end -}} diff --git a/community/n8n/1.0.0/templates/_validation.tpl b/community/n8n/1.0.0/templates/_validation.tpl new file mode 100644 index 0000000000..193405d0eb --- /dev/null +++ b/community/n8n/1.0.0/templates/_validation.tpl @@ -0,0 +1,6 @@ +{{- define "n8n.validation" -}} + {{- $host := .Values.n8nConfig.webHost -}} + {{- if or (hasPrefix "http://" $host) (hasPrefix "https://" $host) (hasSuffix "/" $host) (contains ":" $host) -}} + {{- fail "n8n - Do not start with [http(s)://] or have a trailing slash [/] or have port [:###] in [Web Host] field" -}} + {{- end -}} +{{- end -}} diff --git a/community/n8n/1.0.0/templates/common.yaml b/community/n8n/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..84b6293ea7 --- /dev/null +++ b/community/n8n/1.0.0/templates/common.yaml @@ -0,0 +1,16 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{- include "n8n.validation" $ -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "n8n.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "n8n.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "n8n.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "n8n.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "postgres.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "redis.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "n8n.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/n8n/item.yaml b/community/n8n/item.yaml new file mode 100644 index 0000000000..af2a5009b1 --- /dev/null +++ b/community/n8n/item.yaml @@ -0,0 +1,11 @@ +icon_url: https://avatars.githubusercontent.com/u/45487711 +categories: + - productivity +screenshots: + - https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/screen_connect_any_system_v4_584_2672253392.png + - https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/screen_simple_debugging_v4_584_69c9b38149.png + - https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/screen_templates_v4_584_8d0d5942ff.png + - https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/screen_code_ui_v4_584_0971e56ef7.png +tags: + - workflows + - automation