From e9cbc7b8a569b05a85e0e60917d74d040559fa34 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:08:23 +0200 Subject: [PATCH] Adds Actual Budget (#2035) * initial commit * add service * add ci values * add values * add portal * add storage * add workload * add ui * add readme's * fix storage * update default port * typo * remove comment --- .../ix-dev/community/actual-budget/Chart.lock | 6 + .../ix-dev/community/actual-budget/Chart.yaml | 26 ++ .../ix-dev/community/actual-budget/README.md | 3 + .../community/actual-budget/app-readme.md | 3 + .../actual-budget/charts/common-1.2.8.tgz | Bin 0 -> 63192 bytes .../actual-budget/ci/basic-values.yaml | 7 + .../actual-budget/ci/hostNet-values.yaml | 6 + .../actual-budget/ci/https-values.yaml | 98 +++++ .../ix-dev/community/actual-budget/item.yaml | 10 + .../community/actual-budget/metadata.yaml | 8 + .../community/actual-budget/questions.yaml | 374 ++++++++++++++++++ .../actual-budget/templates/NOTES.txt | 1 + .../actual-budget/templates/_actual.tpl | 60 +++ .../actual-budget/templates/_persistence.tpl | 58 +++ .../actual-budget/templates/_portal.tpl | 16 + .../actual-budget/templates/_service.tpl | 15 + .../actual-budget/templates/common.yaml | 11 + .../community/actual-budget/upgrade_info.json | 1 + .../community/actual-budget/upgrade_strategy | 31 ++ .../community/actual-budget/values.yaml | 28 ++ 20 files changed, 762 insertions(+) create mode 100644 library/ix-dev/community/actual-budget/Chart.lock create mode 100644 library/ix-dev/community/actual-budget/Chart.yaml create mode 100644 library/ix-dev/community/actual-budget/README.md create mode 100644 library/ix-dev/community/actual-budget/app-readme.md create mode 100644 library/ix-dev/community/actual-budget/charts/common-1.2.8.tgz create mode 100644 library/ix-dev/community/actual-budget/ci/basic-values.yaml create mode 100644 library/ix-dev/community/actual-budget/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/actual-budget/ci/https-values.yaml create mode 100644 library/ix-dev/community/actual-budget/item.yaml create mode 100644 library/ix-dev/community/actual-budget/metadata.yaml create mode 100644 library/ix-dev/community/actual-budget/questions.yaml create mode 100644 library/ix-dev/community/actual-budget/templates/NOTES.txt create mode 100644 library/ix-dev/community/actual-budget/templates/_actual.tpl create mode 100644 library/ix-dev/community/actual-budget/templates/_persistence.tpl create mode 100644 library/ix-dev/community/actual-budget/templates/_portal.tpl create mode 100644 library/ix-dev/community/actual-budget/templates/_service.tpl create mode 100644 library/ix-dev/community/actual-budget/templates/common.yaml create mode 100644 library/ix-dev/community/actual-budget/upgrade_info.json create mode 100755 library/ix-dev/community/actual-budget/upgrade_strategy create mode 100644 library/ix-dev/community/actual-budget/values.yaml diff --git a/library/ix-dev/community/actual-budget/Chart.lock b/library/ix-dev/community/actual-budget/Chart.lock new file mode 100644 index 0000000000..e667a00300 --- /dev/null +++ b/library/ix-dev/community/actual-budget/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.2.8 +digest: sha256:6798e8f5a66aa1f06247a6b75c10b03b6d7777b129251995e2e4249c89b0eaef +generated: "2024-01-12T19:16:20.011645912+02:00" diff --git a/library/ix-dev/community/actual-budget/Chart.yaml b/library/ix-dev/community/actual-budget/Chart.yaml new file mode 100644 index 0000000000..d0d9170666 --- /dev/null +++ b/library/ix-dev/community/actual-budget/Chart.yaml @@ -0,0 +1,26 @@ +name: actual-budget +description: Actual Budget is a super fast and privacy-focused app for managing your finances. +annotations: + title: Actual Budget +type: application +version: 1.2.8 +apiVersion: v2 +appVersion: 24.1.0 +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.2.8 +home: https://actualbudget.org/ +icon: https://media.sys.truenas.net/apps/actual-budget/icons/icon.png +sources: + - https://github.com/actualbudget/actual-server + - https://github.com/truenas/charts/tree/master/community/actual-budget + - https://hub.docker.com/r/actualbudget/actual-server +keywords: + - finance + - budget diff --git a/library/ix-dev/community/actual-budget/README.md b/library/ix-dev/community/actual-budget/README.md new file mode 100644 index 0000000000..e81e3c680f --- /dev/null +++ b/library/ix-dev/community/actual-budget/README.md @@ -0,0 +1,3 @@ +# Actual Budget + +[Actual Budget](https://actualbudget.org/) is a super fast and privacy-focused app for managing your finances. diff --git a/library/ix-dev/community/actual-budget/app-readme.md b/library/ix-dev/community/actual-budget/app-readme.md new file mode 100644 index 0000000000..e81e3c680f --- /dev/null +++ b/library/ix-dev/community/actual-budget/app-readme.md @@ -0,0 +1,3 @@ +# Actual Budget + +[Actual Budget](https://actualbudget.org/) is a super fast and privacy-focused app for managing your finances. diff --git a/library/ix-dev/community/actual-budget/charts/common-1.2.8.tgz b/library/ix-dev/community/actual-budget/charts/common-1.2.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..006b2382a34c2f742aee8c4d72204e059e713ab7 GIT binary patch literal 63192 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Π-t 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 a4g1oUzVxMK`R@P#0RR7Vg!di*A_xG7Xqz7Z literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/actual-budget/ci/basic-values.yaml b/library/ix-dev/community/actual-budget/ci/basic-values.yaml new file mode 100644 index 0000000000..ed36698063 --- /dev/null +++ b/library/ix-dev/community/actual-budget/ci/basic-values.yaml @@ -0,0 +1,7 @@ +actualRunAs: + user: 1000 + group: 1000 + +actualStorage: + data: + type: pvc diff --git a/library/ix-dev/community/actual-budget/ci/hostNet-values.yaml b/library/ix-dev/community/actual-budget/ci/hostNet-values.yaml new file mode 100644 index 0000000000..b268028e83 --- /dev/null +++ b/library/ix-dev/community/actual-budget/ci/hostNet-values.yaml @@ -0,0 +1,6 @@ +actualNetwork: + hostNetwork: true + +actualStorage: + data: + type: pvc diff --git a/library/ix-dev/community/actual-budget/ci/https-values.yaml b/library/ix-dev/community/actual-budget/ci/https-values.yaml new file mode 100644 index 0000000000..eef5da0a5f --- /dev/null +++ b/library/ix-dev/community/actual-budget/ci/https-values.yaml @@ -0,0 +1,98 @@ +actualNetwork: + webPort: 31000 + certificateID: 1 + +actualStorage: + data: + type: pvc + additionalStorages: + - type: pvc + mountPath: /data1 + - type: pvc + mountPath: /data2 + +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/library/ix-dev/community/actual-budget/item.yaml b/library/ix-dev/community/actual-budget/item.yaml new file mode 100644 index 0000000000..c79363ba77 --- /dev/null +++ b/library/ix-dev/community/actual-budget/item.yaml @@ -0,0 +1,10 @@ +icon_url: https://media.sys.truenas.net/apps/actual-budget/icons/icon.png +categories: + - productivity +screenshots: + - https://media.sys.truenas.net/apps/actual-budget/screenshots/screenshot1.png + - https://media.sys.truenas.net/apps/actual-budget/screenshots/screenshot2.png + - https://media.sys.truenas.net/apps/actual-budget/screenshots/screenshot3.png +tags: + - finance + - budget diff --git a/library/ix-dev/community/actual-budget/metadata.yaml b/library/ix-dev/community/actual-budget/metadata.yaml new file mode 100644 index 0000000000..41d5497279 --- /dev/null +++ b/library/ix-dev/community/actual-budget/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: actual + groupName: actual + gid: 568 + uid: 568 + description: Actual Budget can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/community/actual-budget/questions.yaml b/library/ix-dev/community/actual-budget/questions.yaml new file mode 100644 index 0000000000..c5549e0e21 --- /dev/null +++ b/library/ix-dev/community/actual-budget/questions.yaml @@ -0,0 +1,374 @@ +groups: + - name: Actual Budget Configuration + description: Configure Actual Budget + - name: User and Group Configuration + description: Configure User and Group for Actual Budget + - name: Network Configuration + description: Configure Network for Actual Budget + - name: Storage Configuration + description: Configure Storage for Actual Budget + - name: Resources Configuration + description: Configure Resources for Actual Budget + +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: actualConfig + label: "" + group: Actual Budget Configuration + schema: + type: dict + attrs: + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Actual Budget. + 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: actualRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Actual Budget will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Actual Budget will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: actualNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Actual Budget Web UI. + schema: + type: int + default: 31012 + 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 Actual Budget + schema: + type: int + "null": true + $ref: + - "definitions/certificate" + + - variable: actualStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Actual Budget Data Storage + description: The path to store Actual Budget 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 + immutable: 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: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "data" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Actual Budget. + 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.
+ SMB Share: Is a SMB share that is mounted to a persistent volume claim. + schema: + type: string + required: true + default: "ixVolume" + immutable: true + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - value: "smb-pv-pvc" + description: SMB Share (Mounts a persistent volume claim to a SMB share) + - variable: readOnly + label: Read Only + description: Mount the volume as read only. + schema: + type: boolean + default: false + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + default: "storage_entry" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: smbConfig + label: SMB Share Configuration + description: The configuration for the SMB Share. + schema: + type: dict + show_if: [["type", "=", "smb-pv-pvc"]] + attrs: + - variable: server + label: Server + description: The server for the SMB share. + schema: + type: string + required: true + - variable: share + label: Share + description: The share name for the SMB share. + schema: + type: string + required: true + - variable: domain + label: Domain (Optional) + description: The domain for the SMB share. + schema: + type: string + - variable: username + label: Username + description: The username for the SMB share. + schema: + type: string + required: true + - variable: password + label: Password + description: The password for the SMB share. + schema: + type: string + required: true + private: true + - variable: size + label: Size (in Gi) + description: The size of the volume quota. + schema: + type: int + required: true + min: 1 + default: 1 + + - 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 Actual Budget. + 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 Actual Budget. + 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/library/ix-dev/community/actual-budget/templates/NOTES.txt b/library/ix-dev/community/actual-budget/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/actual-budget/templates/_actual.tpl b/library/ix-dev/community/actual-budget/templates/_actual.tpl new file mode 100644 index 0000000000..139903efaa --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/_actual.tpl @@ -0,0 +1,60 @@ +{{- define "actual.workload" -}} +workload: + actual: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.actualNetwork.hostNetwork }} + containers: + actual: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.actualRunAs.user }} + runAsGroup: {{ .Values.actualRunAs.group }} + env: + ACTUAL_PORT: {{ .Values.actualNetwork.webPort }} + ACTUAL_HOSTNAME: 0.0.0.0 + ACTUAL_SERVER_FILES: /data/server-files + ACTUAL_USER_FILES: /data/user-files + NODE_ENV: production + {{- if .Values.actualNetwork.certificateID }} + ACTUAL_HTTPS_KEY: /certs/tls.key + ACTUAL_HTTPS_CERT: /certs/tls.crt + {{- end }} + {{ with .Values.actualConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + {{- $proto := "http" -}} + {{- if .Values.actualNetwork.certificateID -}} + {{- $proto = "https" -}} + {{- end }} + probes: + liveness: + enabled: true + type: {{ $proto }} + port: {{ .Values.actualNetwork.webPort }} + path: /health + readiness: + enabled: true + type: {{ $proto }} + port: {{ .Values.actualNetwork.webPort }} + path: /health + startup: + enabled: true + type: {{ $proto }} + port: {{ .Values.actualNetwork.webPort }} + path: /health + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.actualRunAs.user + "GID" .Values.actualRunAs.group + "mode" "check" + "type" "install") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/actual-budget/templates/_persistence.tpl b/library/ix-dev/community/actual-budget/templates/_persistence.tpl new file mode 100644 index 0000000000..baeae2402d --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/_persistence.tpl @@ -0,0 +1,58 @@ +{{- define "actual.persistence" -}} +persistence: + data: + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.actualStorage.data) | nindent 4 }} + targetSelector: + actual: + actual: + mountPath: /data + {{- if and (eq .Values.actualStorage.data.type "ixVolume") + (not (.Values.actualStorage.data.ixVolumeConfig | default dict).aclEnable) }} + 01-permissions: + mountPath: /mnt/directories + {{- end }} + tmp: + enabled: true + type: emptyDir + targetSelector: + actual: + actual: + mountPath: /tmp + {{- range $idx, $storage := .Values.actualStorage.additionalStorages }} + {{ printf "actual-%v:" (int $idx) }} + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 4 }} + targetSelector: + actual: + actual: + mountPath: {{ $storage.mountPath }} + {{- if and (eq $storage.type "ixVolume") (not ($storage.ixVolumeConfig | default dict).aclEnable) }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} + {{- end }} + + {{- if .Values.actualNetwork.certificateID }} + cert: + enabled: true + type: secret + objectName: actual-cert + defaultMode: "0600" + items: + - key: tls.key + path: tls.key + - key: tls.crt + path: tls.crt + targetSelector: + actual: + actual: + mountPath: /certs + readOnly: true + +scaleCertificate: + actual-cert: + enabled: true + id: {{ .Values.actualNetwork.certificateID }} + {{- end -}} +{{- end -}} diff --git a/library/ix-dev/community/actual-budget/templates/_portal.tpl b/library/ix-dev/community/actual-budget/templates/_portal.tpl new file mode 100644 index 0000000000..d21ab12739 --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/_portal.tpl @@ -0,0 +1,16 @@ +{{- define "actual.portal" -}} +{{- $proto := "http" -}} +{{- if .Values.actualNetwork.certificateID -}} + {{- $proto = "https" -}} +{{- end }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.actualNetwork.webPort | quote }} + protocol: {{ $proto }} + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/actual-budget/templates/_service.tpl b/library/ix-dev/community/actual-budget/templates/_service.tpl new file mode 100644 index 0000000000..64d487df54 --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/_service.tpl @@ -0,0 +1,15 @@ +{{- define "actual.service" -}} +service: + actual: + enabled: true + primary: true + type: NodePort + targetSelector: actual + ports: + webui: + enabled: true + primary: true + port: {{ .Values.actualNetwork.webPort }} + nodePort: {{ .Values.actualNetwork.webPort }} + targetSelector: actual +{{- end -}} diff --git a/library/ix-dev/community/actual-budget/templates/common.yaml b/library/ix-dev/community/actual-budget/templates/common.yaml new file mode 100644 index 0000000000..77c2d8c9c7 --- /dev/null +++ b/library/ix-dev/community/actual-budget/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "actual.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "actual.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "actual.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "actual.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/actual-budget/upgrade_info.json b/library/ix-dev/community/actual-budget/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/actual-budget/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/actual-budget/upgrade_strategy b/library/ix-dev/community/actual-budget/upgrade_strategy new file mode 100755 index 0000000000..41e9448b21 --- /dev/null +++ b/library/ix-dev/community/actual-budget/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/actual-budget/values.yaml b/library/ix-dev/community/actual-budget/values.yaml new file mode 100644 index 0000000000..23d0f756aa --- /dev/null +++ b/library/ix-dev/community/actual-budget/values.yaml @@ -0,0 +1,28 @@ +image: + repository: actualbudget/actual-server + pullPolicy: IfNotPresent + tag: 24.1.0 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +actualConfig: + additionalEnvs: [] + +actualNetwork: + webPort: 31012 + certificateID: + hostNetwork: false + +actualRunAs: + user: 568 + group: 568 + +actualStorage: + data: + type: ixVolume + ixVolumeConfig: + datasetName: data + additionalStorages: []