From 6a904dc62e0349946190673ee0a46c0a015b61ea Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:55:18 +0200 Subject: [PATCH] add minio to test catalog (#1989) --- library/ix-dev/test/minio/Chart.lock | 6 + library/ix-dev/test/minio/Chart.yaml | 26 ++ library/ix-dev/test/minio/README.md | 16 + library/ix-dev/test/minio/app-readme.md | 16 + .../ix-dev/test/minio/charts/common-1.2.2.tgz | Bin 0 -> 62474 bytes .../test/minio/ci/snmd-https-values.yaml | 126 ++++++ .../minio/ci/snmd-logsearch-https-values.yaml | 139 +++++++ .../test/minio/ci/snmd-logsearch-values.yaml | 43 ++ library/ix-dev/test/minio/ci/snmd-values.yaml | 30 ++ .../test/minio/ci/snsd-https-values.yaml | 106 +++++ .../minio/ci/snsd-logsearch-https-values.yaml | 118 ++++++ .../test/minio/ci/snsd-logsearch-values.yaml | 28 ++ library/ix-dev/test/minio/ci/snsd-values.yaml | 19 + library/ix-dev/test/minio/item.yaml | 11 + library/ix-dev/test/minio/metadata.yaml | 18 + library/ix-dev/test/minio/migrations/migrate | 29 ++ library/ix-dev/test/minio/questions.yaml | 371 ++++++++++++++++++ library/ix-dev/test/minio/templates/NOTES.txt | 1 + .../test/minio/templates/_configuration.tpl | 61 +++ .../ix-dev/test/minio/templates/_helpers.tpl | 115 ++++++ .../test/minio/templates/_logsearch.tpl | 51 +++ .../ix-dev/test/minio/templates/_minio.tpl | 143 +++++++ .../ix-dev/test/minio/templates/_portal.tpl | 20 + .../ix-dev/test/minio/templates/_postgres.tpl | 15 + .../ix-dev/test/minio/templates/common.yaml | 15 + library/ix-dev/test/minio/upgrade_info.json | 1 + .../test/minio/upgrade_strategy_disable | 62 +++ library/ix-dev/test/minio/values.yaml | 48 +++ 28 files changed, 1634 insertions(+) create mode 100644 library/ix-dev/test/minio/Chart.lock create mode 100644 library/ix-dev/test/minio/Chart.yaml create mode 100644 library/ix-dev/test/minio/README.md create mode 100644 library/ix-dev/test/minio/app-readme.md create mode 100644 library/ix-dev/test/minio/charts/common-1.2.2.tgz create mode 100644 library/ix-dev/test/minio/ci/snmd-https-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snmd-logsearch-https-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snmd-logsearch-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snmd-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snsd-https-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snsd-logsearch-https-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snsd-logsearch-values.yaml create mode 100644 library/ix-dev/test/minio/ci/snsd-values.yaml create mode 100644 library/ix-dev/test/minio/item.yaml create mode 100644 library/ix-dev/test/minio/metadata.yaml create mode 100755 library/ix-dev/test/minio/migrations/migrate create mode 100644 library/ix-dev/test/minio/questions.yaml create mode 100644 library/ix-dev/test/minio/templates/NOTES.txt create mode 100644 library/ix-dev/test/minio/templates/_configuration.tpl create mode 100644 library/ix-dev/test/minio/templates/_helpers.tpl create mode 100644 library/ix-dev/test/minio/templates/_logsearch.tpl create mode 100644 library/ix-dev/test/minio/templates/_minio.tpl create mode 100644 library/ix-dev/test/minio/templates/_portal.tpl create mode 100644 library/ix-dev/test/minio/templates/_postgres.tpl create mode 100644 library/ix-dev/test/minio/templates/common.yaml create mode 100644 library/ix-dev/test/minio/upgrade_info.json create mode 100755 library/ix-dev/test/minio/upgrade_strategy_disable create mode 100644 library/ix-dev/test/minio/values.yaml diff --git a/library/ix-dev/test/minio/Chart.lock b/library/ix-dev/test/minio/Chart.lock new file mode 100644 index 0000000000..4bf65bf146 --- /dev/null +++ b/library/ix-dev/test/minio/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.2.2 +digest: sha256:fb077cb81f6acecd5c9e6adc22a18e156f780cd78f27198cdb47810f95364b56 +generated: "2023-11-09T15:45:47.242411019+02:00" diff --git a/library/ix-dev/test/minio/Chart.yaml b/library/ix-dev/test/minio/Chart.yaml new file mode 100644 index 0000000000..5ea5d2f62c --- /dev/null +++ b/library/ix-dev/test/minio/Chart.yaml @@ -0,0 +1,26 @@ +name: minio +description: High Performance, Kubernetes Native Object Storage +annotations: + title: MinIO +type: application +version: 1.0.24 +apiVersion: v2 +appVersion: '2023-03-24' +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.2 +home: https://min.io +icon: https://media.sys.truenas.net/apps/minio/icons/icon.png +sources: + - https://github.com/minio/minio + - https://github.com/truenas/charts/tree/master/enterprise/minio +keywords: + - storage + - object-storage + - S3 diff --git a/library/ix-dev/test/minio/README.md b/library/ix-dev/test/minio/README.md new file mode 100644 index 0000000000..f4c20c7e50 --- /dev/null +++ b/library/ix-dev/test/minio/README.md @@ -0,0 +1,16 @@ +# MinIO + +[MinIO](https://min.io) is a High Performance Object Storage released under Apache License v2.0. +It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure +for machine learning, analytics and application data workloads. + +> During the installation process, a container will be launched with **root** privileges. This is required +> in order to apply the correct permissions to the MinIO data directory. Afterward, the `MinIO` container +> will run as a **non**-root user (`568`). +> Same applies to the `postgres` container. This will run afterwards 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 `MinIO` and `postgres` data directories. + +When Multi Mode is enabled and entries contain `://` (url) will enable Host Networking. Regardless of the selection in the `Networking` section. diff --git a/library/ix-dev/test/minio/app-readme.md b/library/ix-dev/test/minio/app-readme.md new file mode 100644 index 0000000000..f4c20c7e50 --- /dev/null +++ b/library/ix-dev/test/minio/app-readme.md @@ -0,0 +1,16 @@ +# MinIO + +[MinIO](https://min.io) is a High Performance Object Storage released under Apache License v2.0. +It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure +for machine learning, analytics and application data workloads. + +> During the installation process, a container will be launched with **root** privileges. This is required +> in order to apply the correct permissions to the MinIO data directory. Afterward, the `MinIO` container +> will run as a **non**-root user (`568`). +> Same applies to the `postgres` container. This will run afterwards 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 `MinIO` and `postgres` data directories. + +When Multi Mode is enabled and entries contain `://` (url) will enable Host Networking. Regardless of the selection in the `Networking` section. diff --git a/library/ix-dev/test/minio/charts/common-1.2.2.tgz b/library/ix-dev/test/minio/charts/common-1.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6a22173c74f2a1d6e7ab27986c4275ef60c004d1 GIT binary patch literal 62474 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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/test/minio/ci/snmd-https-values.yaml b/library/ix-dev/test/minio/ci/snmd-https-values.yaml new file mode 100644 index 0000000000..05c5dac5a5 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snmd-https-values.yaml @@ -0,0 +1,126 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/basic-https-values.yaml . + +# Always use a unique hostPath for each test +# Release.Namespace is guaranteed to be a unique value +# in the test environment (ct-install) + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioRunAs: + user: 1000 + group: 1000 + +minioNetwork: + certificateID: 1 + +minioMultiMode: + - /data{1...4} + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + datasetName: "" + mountPath: /data2 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data3 + datasetName: "" + mountPath: /data3 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data4 + datasetName: "" + mountPath: /data4 + +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/test/minio/ci/snmd-logsearch-https-values.yaml b/library/ix-dev/test/minio/ci/snmd-logsearch-https-values.yaml new file mode 100644 index 0000000000..048c0cb431 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snmd-logsearch-https-values.yaml @@ -0,0 +1,139 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/logsearch-https-values.yaml . + +# Always use a unique hostPath for each test +# Release.Namespace is guaranteed to be a unique value +# in the test environment (ct-install) + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioNetwork: + certificateID: 1 + +minioRunAs: + user: 1000 + group: 1000 + +minioMultiMode: + - /data{1...4} + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + datasetName: "" + mountPath: /data2 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data3 + datasetName: "" + mountPath: /data3 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data4 + datasetName: "" + mountPath: /data4 + +minioLogging: + logsearch: + enabled: true + diskCapacityGB: 5 + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_data + datasetName: "" + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_backup + datasetName: "" + +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/test/minio/ci/snmd-logsearch-values.yaml b/library/ix-dev/test/minio/ci/snmd-logsearch-values.yaml new file mode 100644 index 0000000000..3c13baae4e --- /dev/null +++ b/library/ix-dev/test/minio/ci/snmd-logsearch-values.yaml @@ -0,0 +1,43 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/logsearch-values.yaml . + +# Always use a unique hostPath for each test + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioMultiMode: + - /data{1...4} + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + datasetName: "" + mountPath: /data2 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data3 + datasetName: "" + mountPath: /data3 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data4 + datasetName: "" + mountPath: /data4 + +minioLogging: + logsearch: + enabled: true + diskCapacityGB: 5 + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_data + datasetName: "" + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_backup + datasetName: "" diff --git a/library/ix-dev/test/minio/ci/snmd-values.yaml b/library/ix-dev/test/minio/ci/snmd-values.yaml new file mode 100644 index 0000000000..481dd5aaf6 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snmd-values.yaml @@ -0,0 +1,30 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/basic-values.yaml . + +# Always use a unique hostPath for each test + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioMultiMode: + - /data{1...4} + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + datasetName: "" + mountPath: /data2 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data3 + datasetName: "" + mountPath: /data3 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data4 + datasetName: "" + mountPath: /data4 diff --git a/library/ix-dev/test/minio/ci/snsd-https-values.yaml b/library/ix-dev/test/minio/ci/snsd-https-values.yaml new file mode 100644 index 0000000000..8d9f00b1a1 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snsd-https-values.yaml @@ -0,0 +1,106 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/basic-https-values.yaml . + +# Always use a unique hostPath for each test + + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioNetwork: + certificateID: 1 + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + +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/test/minio/ci/snsd-logsearch-https-values.yaml b/library/ix-dev/test/minio/ci/snsd-logsearch-https-values.yaml new file mode 100644 index 0000000000..f882382a04 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snsd-logsearch-https-values.yaml @@ -0,0 +1,118 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/logsearch-https-values.yaml . + +# Always use a unique hostPath for each test + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioNetwork: + certificateID: 1 + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + +minioLogging: + logsearch: + enabled: true + diskCapacityGB: 5 + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_data + datasetName: "" + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_backup + datasetName: "" + +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/test/minio/ci/snsd-logsearch-values.yaml b/library/ix-dev/test/minio/ci/snsd-logsearch-values.yaml new file mode 100644 index 0000000000..cde962dfb5 --- /dev/null +++ b/library/ix-dev/test/minio/ci/snsd-logsearch-values.yaml @@ -0,0 +1,28 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/logsearch-values.yaml . + +# Always use a unique hostPath for each test + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 + +minioLogging: + logsearch: + enabled: true + diskCapacityGB: 5 + pgData: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_data + datasetName: "" + pgBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/postgres_backup + datasetName: "" diff --git a/library/ix-dev/test/minio/ci/snsd-values.yaml b/library/ix-dev/test/minio/ci/snsd-values.yaml new file mode 100644 index 0000000000..6ce309e1cd --- /dev/null +++ b/library/ix-dev/test/minio/ci/snsd-values.yaml @@ -0,0 +1,19 @@ +# When inside the versioned minio folder, run: +# helm dependency update +# helm template -f ix_values.yaml -f ci/basic-values.yaml . + +# Always use a unique hostPath for each test + +minioCreds: + rootUser: minio_test + rootPass: minio_test + +minioRunAs: + user: 1000 + group: 1000 + +minioStorage: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + datasetName: "" + mountPath: /data1 diff --git a/library/ix-dev/test/minio/item.yaml b/library/ix-dev/test/minio/item.yaml new file mode 100644 index 0000000000..3ddd257656 --- /dev/null +++ b/library/ix-dev/test/minio/item.yaml @@ -0,0 +1,11 @@ +icon_url: https://media.sys.truenas.net/apps/minio/icons/icon.png +categories: + - storage +screenshots: + - https://media.sys.truenas.net/apps/minio/screenshots/screenshot1.png + - https://media.sys.truenas.net/apps/minio/screenshots/screenshot2.png + - https://media.sys.truenas.net/apps/minio/screenshots/screenshot3.png +tags: + - object-storage + - S3 + - file-sharing diff --git a/library/ix-dev/test/minio/metadata.yaml b/library/ix-dev/test/minio/metadata.yaml new file mode 100644 index 0000000000..8f8e56d261 --- /dev/null +++ b/library/ix-dev/test/minio/metadata.yaml @@ -0,0 +1,18 @@ +runAsContext: + - userName: minio + groupName: minio + gid: 568 + uid: 568 + description: Minio can run as any non-root user. + - userName: logsearch + groupName: logsearch + gid: 568 + uid: 568 + description: Minio's logsearch can run as any non-root user. + - userName: postgres + groupName: postgres + gid: 999 + uid: 999 + description: Postgres runs as a non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/test/minio/migrations/migrate b/library/ix-dev/test/minio/migrations/migrate new file mode 100755 index 0000000000..4ad8ff5f66 --- /dev/null +++ b/library/ix-dev/test/minio/migrations/migrate @@ -0,0 +1,29 @@ +#!/usr/bin/python3 +import json +import os +import sys + + +def migrate(values): + storageKey = 'minioLogging' + storageSubKey = 'logsearch' + storages = ['pgData', 'pgData'] + + for storage in storages: + check_val = values.get(storageKey, {}).get(storageSubKey, {}).get(storage, {}) + if not isinstance(check_val, dict) or not check_val or check_val.get('type', 'hostPath') == 'hostPath': + continue + + values[storageKey][storageSubKey][storage] = {key: value for key, value in check_val.items() if key != 'hostPath'} + + + return values + + +if __name__ == '__main__': + if len(sys.argv) != 2: + exit(1) + + if os.path.exists(sys.argv[1]): + with open(sys.argv[1], 'r') as f: + print(json.dumps(migrate(json.loads(f.read())))) diff --git a/library/ix-dev/test/minio/questions.yaml b/library/ix-dev/test/minio/questions.yaml new file mode 100644 index 0000000000..c31eceb879 --- /dev/null +++ b/library/ix-dev/test/minio/questions.yaml @@ -0,0 +1,371 @@ +groups: + - name: MinIO Credentials + description: Configure Credentials for MinIO + - name: User and Group Configuration + description: Configure User and Group for MinIO + - name: Network Configuration + description: Configure Network for MinIO + - name: Storage Configuration + description: Configure Storage for MinIO + - name: MultiMode Configuration + description: Configure MultiMode for MinIO + - name: MinIO Logging + description: Configure Logging for MinIO + - name: Resources Configuration + description: Configure Resources for MinIO + +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: minioCreds + label: "" + group: MinIO Credentials + schema: + type: dict + attrs: + - variable: rootUser + label: Root User + description: The access key for the root user. + schema: + type: string + min_length: 5 + required: true + - variable: rootPass + label: Root Password + description: The secret key for the root user. + schema: + type: string + required: true + min_length: 8 + private: true + + - variable: minioRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: | + The user id that MinIO will run as.
+ Can't be changed after initial install. + schema: + type: int + min: 568 + default: 568 + immutable: true + required: true + - variable: group + label: Group ID + description: | + The group id that MinIO will run as.
+ Can't be changed after initial install. + schema: + type: int + min: 568 + default: 568 + immutable: true + required: true + + - variable: minioNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: apiPort + label: API Port + description: The port for the MinIO API. + schema: + type: int + default: 30000 + min: 9000 + max: 65535 + required: true + - variable: webPort + label: Web Port + description: The port for the MinIO Web UI. + schema: + type: int + default: 30001 + 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: true + - variable: certificateID + label: Certificate + description: The certificate to use for MinIO + schema: + type: int + "null": true + $ref: + - "definitions/certificate" + - variable: serverUrl + label: MinIO Server URL (API) + description: | + The URL that console will use to reach API
+ For example https://minio1.example.com.

+ schema: + type: string + required: true + - variable: consoleUrl + label: MinIO Browser Redirect URL + description: | + The URL that console will provide as a redirect URL
+ For example https://console.example.com.

+ schema: + type: string + required: true + + - variable: enableMultiMode + label: Enable Multi Mode (SNMD or MNMD) + group: MultiMode Configuration + description: | + For Single Node Multi Drive (SNMD), the entry will look like this:
+ Example Entry - /data{1...4}

+ For Multi Node Multi Drive (MNMD), the entry will look like this:
+ Example Entry - https://minio{1...3}.example.com:30000/data{1...4}

+ Note that each host must use the same port number and the same number of storage items.
+ In both cases /data{1...4} is the directories to be used for MinIO. + You have to add additional storage for each data entry. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: minioMultiMode + label: Multi Mode (SNMD or MNMD) + group: MultiMode Configuration + schema: + type: list + default: [] + items: + - variable: item + label: "" + schema: + type: string + required: true + + - variable: minioStorage + label: "" + group: Storage Configuration + schema: + type: list + default: [{"type": "ixVolume", "mountPath": "/data1", "datasetName": "data1"}] + empty: false + required: true + items: + - variable: item + label: Storage Item + 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 + immutable: true + 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 + immutable: true + default: /data1 + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + required: true + immutable: true + default: "" + show_if: [["type", "=", "hostPath"]] + - 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 + # Can we make this dynamic, so we can hide it?! + default: data1 + $ref: + - "normalize/ixVolume" + + - variable: minioLogging + label: "" + group: MinIO Logging + schema: + type: dict + attrs: + - variable: anonymous + label: Anonymous + description: Hides sensitive information from logging. + schema: + type: boolean + default: false + - variable: quiet + label: Quiet + description: Disables startup information. + schema: + type: boolean + default: false + + - variable: logsearch + label: LogSearch Configuration + schema: + type: dict + attrs: + - variable: enabled + label: Enable LogSearch + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: diskCapacityGB + label: Disk Capacity (GB) + description: The disk capacity for LogSearch. + schema: + type: int + default: 5 + required: true + - variable: pgData + label: Postgres Data Storage + description: The path to store Postgres data. + schema: + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + required: true + immutable: true + default: ixVolume + enum: + - value: hostPath + description: Host Path + - value: ixVolume + description: ixVolume + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: postgres-data + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: pgBackup + label: Postgres Backup Storage + description: The path to store Postgres backups. + schema: + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + required: true + default: ixVolume + enum: + - value: hostPath + description: Host Path + - value: ixVolume + description: ixVolume + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: postgres-backup + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + 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 MinIO. + 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 MinIO. + 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/test/minio/templates/NOTES.txt b/library/ix-dev/test/minio/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/test/minio/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/test/minio/templates/_configuration.tpl b/library/ix-dev/test/minio/templates/_configuration.tpl new file mode 100644 index 0000000000..c3584dd385 --- /dev/null +++ b/library/ix-dev/test/minio/templates/_configuration.tpl @@ -0,0 +1,61 @@ +{{- define "minio.configuration" -}} + + {{/* Validation */}} + {{ include "minio.validation" $ }} + + {{ $config := fromJson (include "minio.prepare.config" $) }} + +{{/* Secrets */}} +secret: + minio-creds: + enabled: true + data: + MINIO_ROOT_USER: {{ .Values.minioCreds.rootUser }} + MINIO_ROOT_PASSWORD: {{ .Values.minioCreds.rootPass }} + MINIO_VOLUMES: {{ $config.volumes }} + {{ with .Values.minioNetwork.serverUrl }} + MINIO_SERVER_URL: {{ . | quote }} + {{ end }} + {{ with .Values.minioNetwork.consoleUrl }} + MINIO_BROWSER_REDIRECT_URL: {{ . | quote }} + {{ end }} + {{ if .Values.minioLogging.logsearch.enabled }} + MINIO_AUDIT_WEBHOOK_ENABLE_ix_logsearch: "on" + MINIO_AUDIT_WEBHOOK_ENDPOINT_ix_logsearch: {{ $config.webhookURL }} + MINIO_LOG_QUERY_AUTH_TOKEN: {{ $config.queryToken }} + MINIO_LOG_QUERY_URL: {{ $config.logQueryURL }} + {{ end }} + + # Always create the logsearch and postgres secret, even if logsearch is disabled. + # Because autogenerated passwords are stored in the secret, and disabling logsearch after + # the secret is created will cause the passwords to be lost (if the secret is conditionally rendered). + logsearch-creds: + enabled: true + data: + LOGSEARCH_PG_CONN_STR: {{ $config.postgresURL }} + LOGSEARCH_AUDIT_AUTH_TOKEN: {{ $config.auditToken }} + MINIO_LOG_QUERY_AUTH_TOKEN: {{ $config.queryToken }} + {{ if .Values.minioLogging.logsearch.enabled }} + LOGSEARCH_DISK_CAPACITY_GB: {{ $config.diskCapacity | quote }} + {{ end }} + + postgres-creds: + enabled: true + data: + POSTGRES_PASSWORD: {{ $config.dbPass }} + POSTGRES_USER: {{ $config.dbUser }} + POSTGRES_DB: {{ $config.dbName }} + POSTGRES_HOST: {{ $config.dbHost }} + POSTGRES_URL: {{ $config.postgresURL }} + +{{/* MinIO Certificate */}} +{{ if .Values.minioNetwork.certificateID }} +scaleCertificate: + minio-cert: + enabled: true + labels: {} + annotations: {} + id: {{ .Values.minioNetwork.certificateID }} +{{ end }} + +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/_helpers.tpl b/library/ix-dev/test/minio/templates/_helpers.tpl new file mode 100644 index 0000000000..baf8f29064 --- /dev/null +++ b/library/ix-dev/test/minio/templates/_helpers.tpl @@ -0,0 +1,115 @@ +{{/* Scheme */}} +{{- define "minio.scheme" -}} + {{- $scheme := "http" -}} + {{- if .Values.minioNetwork.certificateID -}} + {{- $scheme = "https" -}} + {{- end -}} + + {{- $scheme -}} +{{- end -}} + +{{- define "minio.hostnetwork" -}} + {{- $hostNet := .Values.minioNetwork.hostNetwork -}} + + {{- range $entry := .Values.minioMultiMode -}} + {{/* + Only if multi mode has urls set hostnetwork, + Multi Mode can be used for single node, multi disk setup + */}} + {{- if contains "://" $entry -}} + {{- $hostNet = true -}} + {{- end -}} + + {{- end -}} + {{- $hostNet -}} +{{- end -}} + +{{/* Validation */}} +{{- define "minio.validation" -}} + {{- if not .Values.minioCreds.rootUser -}} + {{- fail "Expected non-empty " -}} + {{- end -}} + + {{- if not .Values.minioCreds.rootPass -}} + {{- fail "Expected non-empty " -}} + {{- end -}} + + {{- if not .Values.minioStorage -}} + {{- fail "Expected at least 1 storage item added" -}} + {{- end -}} + + {{- if and (ne (len .Values.minioStorage) 1) (not .Values.minioMultiMode) -}} + {{- fail "Expected Multi Mode to be enabled, when more than 1 storage mountPaths added" -}} + {{- end -}} + + {{- $notAllowedKeys := (list "server") -}} {{/* Extend if needed */}} + {{- range $item := .Values.minioMultiMode -}} + {{- if (mustHas $item $notAllowedKeys) -}} + {{- fail (printf "Key [%v] is not allowed as a Multi Mode argument" $item) -}} + {{- end -}} + + {{- if hasPrefix "/" $item -}} + {{- if or (contains "{" $item) (contains "}" $item) -}} + {{- if not (contains "..." $item) -}} + {{- fail "Expected Multi Mode Item to have 3 dots when its a path with expansion eg [/some_path{1...4}]" -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + + {{- $mountPaths := list -}} + {{- range $item := .Values.minioStorage -}} + {{- $mountPaths = mustAppend $mountPaths $item.mountPath -}} + {{- end -}} + + {{- if not (deepEqual ($mountPaths) (uniq $mountPaths)) -}} + {{- fail (printf "Expected mountPaths to be unique, but got [%v]" (join ", " $mountPaths)) -}} + {{- end -}} +{{- end -}} + +{{/* Config preparation */}} +{{- define "minio.prepare.config" -}} + {{/* Prepare logsearch related config, shared across different configmaps */}} + {{- $config := dict -}} + + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- if .Values.minioLogging.logsearch.enabled -}} + {{- $_ := set $config "diskCapacity" (required "Expected non-empty " .Values.minioLogging.logsearch.diskCapacityGB) -}} + {{- end -}} + + {{- $_ := set $config "dbUser" "logsearch" -}} + {{- $_ := set $config "dbName" "logsearch" -}} + + {{- $_ := set $config "dbPass" (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-postgres-creds" $fullname)) -}} + {{- $_ := set $config "dbPass" ((index .data "POSTGRES_PASSWORD") | b64dec) -}} + {{- end -}} + + {{- $_ := set $config "auditToken" (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-logsearch-creds" $fullname)) -}} + {{- $_ := set $config "auditToken" ((index .data "LOGSEARCH_AUDIT_AUTH_TOKEN") | b64dec) -}} + {{- end -}} + + {{- $_ := set $config "queryToken" (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-logsearch-creds" $fullname)) -}} + {{- $_ := set $config "queryToken" ((index .data "MINIO_LOG_QUERY_AUTH_TOKEN") | b64dec) -}} + {{- end -}} + + {{- $_ := set $config "dbHost" (printf "%s-postgres" $fullname ) -}} + {{- $_ := set $config "logQueryURL" (printf "http://%s-logsearch:8080" $fullname) -}} + {{- $_ := set $config "webhookURL" (printf "%s/api/ingest?token=%v" $config.logQueryURL $config.auditToken) -}} + {{- $_ := set $config "postgresURL" (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $config.dbUser $config.dbPass $config.dbHost $config.dbName) -}} + + {{/* When no multi mode, use the first storage entry */}} + {{- $_ := set $config "volumes" (.Values.minioStorage | first).mountPath -}} + {{- if .Values.minioMultiMode -}} + {{- $_ := set $config "volumes" (join " " .Values.minioMultiMode) -}} + {{- end -}} + + {{- if not $config.volumes -}} + {{- fail "ERROR: Volumes can't be empty" -}} + {{- end -}} + + {{- $config | toJson -}} +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/_logsearch.tpl b/library/ix-dev/test/minio/templates/_logsearch.tpl new file mode 100644 index 0000000000..f7c3ada148 --- /dev/null +++ b/library/ix-dev/test/minio/templates/_logsearch.tpl @@ -0,0 +1,51 @@ +{{- define "logsearch.workload" -}} +workload: + logsearch: + enabled: true + type: Deployment + podSpec: + containers: + logsearch: + enabled: true + primary: true + imageSelector: logsearchImage + securityContext: + runAsUser: {{ .Values.minioRunAs.user }} + runAsGroup: {{ .Values.minioRunAs.group }} + envFrom: + - secretRef: + name: logsearch-creds + command: /logsearchapi + probes: + liveness: + enabled: true + type: http + port: 8080 + path: /status + readiness: + enabled: true + type: http + port: 8080 + path: /status + startup: + enabled: true + type: http + port: 8080 + path: /status + initContainers: + {{- include "ix.v1.common.app.postgresWait" (dict "name" "postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} + +{{/* Service */}} +service: + logsearch: + enabled: true + type: ClusterIP + targetSelector: logsearch + ports: + logsearch: + enabled: true + primary: true + port: 8080 + targetSelector: logsearch +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/_minio.tpl b/library/ix-dev/test/minio/templates/_minio.tpl new file mode 100644 index 0000000000..d2a47e8166 --- /dev/null +++ b/library/ix-dev/test/minio/templates/_minio.tpl @@ -0,0 +1,143 @@ +{{- define "minio.workload" -}} +workload: + minio: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ include "minio.hostnetwork" $ }} + containers: + minio: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.minioRunAs.user }} + runAsGroup: {{ .Values.minioRunAs.group }} + envFrom: + - secretRef: + name: minio-creds + args: + - server + - "--address" + - {{ printf ":%v" .Values.minioNetwork.apiPort | quote }} + - "--console-address" + - {{ printf ":%v" .Values.minioNetwork.webPort | quote }} + {{- if .Values.minioNetwork.certificateID }} + - "--certs-dir" + - "/.minio/certs" + {{- end -}} + {{- if .Values.minioLogging.anonymous }} + - "--anonymous" + {{- end -}} + {{- if .Values.minioLogging.quiet }} + - "--quiet" + {{- end }} + probes: + liveness: + enabled: true + type: {{ include "minio.scheme" $ }} + port: "{{ .Values.minioNetwork.apiPort }}" + path: /minio/health/live + readiness: + enabled: true + type: {{ include "minio.scheme" $ }} + port: "{{ .Values.minioNetwork.apiPort }}" + path: /minio/health/live + startup: + enabled: true + type: {{ include "minio.scheme" $ }} + port: "{{ .Values.minioNetwork.apiPort }}" + path: /minio/health/live + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "UID" .Values.minioRunAs.user + "GID" .Values.minioRunAs.group + "type" "install") | nindent 8 -}} + {{- if .Values.minioLogging.logsearch.enabled }} + logsearch-wait: + enabled: true + type: init + imageSelector: bashImage + resources: + limits: + cpu: 500m + memory: 256Mi + envFrom: + - secretRef: + name: minio-creds + command: bash + args: + - -c + - | + echo "Pinging Logsearch API for readiness..." + until wget --spider --quiet --timeout=3 --tries=1 ${MINIO_LOG_QUERY_URL}/status; do + echo "Waiting for Logsearch API (${MINIO_LOG_QUERY_URL}/status) to be ready..." + sleep 2 + done + echo "Logsearch API is ready" + {{- end }} + +{{/* Service */}} +service: + minio: + enabled: true + primary: true + type: NodePort + targetSelector: minio + ports: + api: + enabled: true + primary: true + port: {{ .Values.minioNetwork.apiPort }} + nodePort: {{ .Values.minioNetwork.apiPort }} + targetSelector: minio + webui: + enabled: true + port: {{ .Values.minioNetwork.webPort }} + nodePort: {{ .Values.minioNetwork.webPort }} + targetSelector: minio + +{{/* Persistence */}} +persistence: + {{- range $idx, $storage := .Values.minioStorage }} + {{ printf "data%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + minio: + minio: + mountPath: {{ $storage.mountPath }} + permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} + # Minio writes temporary files to this directory. Adding this as an emptyDir, + # So we don't have to set readOnlyRootFilesystem to false + tempdir: + enabled: true + type: emptyDir + targetSelector: + minio: + minio: + mountPath: /.minio + {{- if .Values.minioNetwork.certificateID }} + cert: + enabled: true + type: secret + objectName: minio-cert + defaultMode: "0600" + items: + - key: tls.key + path: private.key + - key: tls.crt + path: public.crt + - key: tls.crt + path: CAs/public.crt + targetSelector: + minio: + minio: + mountPath: /.minio/certs + readOnly: true + {{- end -}} +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/_portal.tpl b/library/ix-dev/test/minio/templates/_portal.tpl new file mode 100644 index 0000000000..25d25a25ed --- /dev/null +++ b/library/ix-dev/test/minio/templates/_portal.tpl @@ -0,0 +1,20 @@ +{{- define "minio.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + {{- $url := urlParse .Values.minioNetwork.consoleUrl -}} + {{- $protocol := $url.scheme -}} + {{- $host := $url.hostname -}} + {{- $port := $url.host | replace $host "" | replace ":" "" -}} + {{/* If user used SCALE certificate, then force https */}} + {{- if eq "https" (include "minio.scheme" $) -}} + {{- $protocol = "https" -}} + {{- end }} + path: "/" + port: {{ $port | default .Values.minioNetwork.webPort | quote }} + protocol: {{ $protocol | default "http" }} + host: {{ $host | default "$node_ip" }} +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/_postgres.tpl b/library/ix-dev/test/minio/templates/_postgres.tpl new file mode 100644 index 0000000000..c8d97bdf84 --- /dev/null +++ b/library/ix-dev/test/minio/templates/_postgres.tpl @@ -0,0 +1,15 @@ +{{- define "postgres.workload" -}} +workload: +{{- include "ix.v1.common.app.postgres" (dict "secretName" "postgres-creds" "resources" .Values.resources) | nindent 2 }} + +{{/* Service */}} +service: + {{- include "ix.v1.common.app.postgresService" $ | nindent 2 }} + +{{/* Persistence */}} +persistence: + {{- include "ix.v1.common.app.postgresPersistence" + (dict "pgData" .Values.minioLogging.logsearch.pgData + "pgBackup" .Values.minioLogging.logsearch.pgBackup + ) | nindent 2 }} +{{- end -}} diff --git a/library/ix-dev/test/minio/templates/common.yaml b/library/ix-dev/test/minio/templates/common.yaml new file mode 100644 index 0000000000..b013a2644c --- /dev/null +++ b/library/ix-dev/test/minio/templates/common.yaml @@ -0,0 +1,15 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "minio.configuration" $ | fromYaml) -}} + +{{- $_ := mustMergeOverwrite .Values (include "minio.workload" $ | fromYaml) -}} +{{- if .Values.minioLogging.logsearch.enabled -}} + {{- $_ := mustMergeOverwrite .Values (include "logsearch.workload" $ | fromYaml) -}} + {{- $_ := mustMergeOverwrite .Values (include "postgres.workload" $ | fromYaml) -}} +{{- end -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "minio.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/test/minio/upgrade_info.json b/library/ix-dev/test/minio/upgrade_info.json new file mode 100644 index 0000000000..1477da7baf --- /dev/null +++ b/library/ix-dev/test/minio/upgrade_info.json @@ -0,0 +1 @@ +{ "filename": "values.yaml", "keys": ["image", "logsearchImage"] } diff --git a/library/ix-dev/test/minio/upgrade_strategy_disable b/library/ix-dev/test/minio/upgrade_strategy_disable new file mode 100755 index 0000000000..0209796a7c --- /dev/null +++ b/library/ix-dev/test/minio/upgrade_strategy_disable @@ -0,0 +1,62 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning +from catalog_update.upgrade_strategy import datetime_versioning + + +ENUMS = { + 'image': { + 'RE_STABLE_VERSION': re.compile(r'RELEASE.\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}}Z'), + 'STRIP_TEXT': 'RELEASE.', + 'function': datetime_versioning, + 'function_arg': '%Y-%m-%dT%H-%M-%SZ' + }, + 'logsearchImage': { + 'RE_STABLE_VERSION': re.compile(r'v\d+\.\d+\.\d+'), + 'STRIP_TEXT': 'v', + 'function': semantic_versioning + }, +} + + +def newer_mapping(image_tags): + + output = { + "tags": {}, + "app_version": "" + } + + for key in image_tags.keys(): + STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None + RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None + VERSION_FUNCTION = ENUMS[key].get('function', None) if key in ENUMS else None + + if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None) or (VERSION_FUNCTION is None): + continue + + tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + if ENUMS[key].get('function_arg', None): + version = VERSION_FUNCTION(list(tags), ENUMS[key].get('function_arg')) + else: + version = VERSION_FUNCTION(list(tags)) + if not version: + continue + + if key == 'image': + output['app_version'] = version + + output['tags'][key] = tags[version] + + return output + + +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/test/minio/values.yaml b/library/ix-dev/test/minio/values.yaml new file mode 100644 index 0000000000..fe482ce6a9 --- /dev/null +++ b/library/ix-dev/test/minio/values.yaml @@ -0,0 +1,48 @@ +image: + repository: minio/minio + tag: RELEASE.2023-03-24T21-41-23Z + pullPolicy: IfNotPresent + +logsearchImage: + repository: minio/operator + tag: v4.5.8 + pullPolicy: IfNotPresent + +resources: + limits: + cpu: 4000m + memory: 8Gi + +minioCreds: + rootUser: '' + rootPass: '' + +minioRunAs: + user: 568 + group: 568 + +minioNetwork: + apiPort: 30000 + webPort: 30001 + certificateID: null + hostNetwork: true + serverUrl: '' + consoleUrl: '' + +minioMultiMode: [] + +minioStorage: [] + +minioLogging: + anonymous: false + quiet: false + + logsearch: + enabled: false + diskCapacityGB: 5 + pgData: + type: ixVolume + datasetName: postgres-data + pgBackup: + type: ixVolume + datasetName: postgres-backup