diff --git a/.gitignore b/.gitignore index 62dc0faa..e0a05489 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ npm-debug.log !mock-cert.pem .env *.env +!example.umami-secret.env coverage lib taxonomy diff --git a/argocd/overlays/applicaitons/app-of-apps.yaml b/argocd/overlays/applicaitons/app-of-apps.yaml new file mode 100644 index 00000000..06c0cf75 --- /dev/null +++ b/argocd/overlays/applicaitons/app-of-apps.yaml @@ -0,0 +1,19 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: app-of-apps-ilab +spec: + destination: + namespace: openshift-gitpos + name: in-cluster + project: default + source: + path: argocd/overlays/applicaitons + repoURL: https://github.com/instructlab/ui.git + targetRevision: HEAD + syncPolicy: + syncOptions: + - Validate=false + - ApplyOutOfSyncOnly=true + # automated: + # selfHeal: true diff --git a/argocd/overlays/applicaitons/kustomization.yaml b/argocd/overlays/applicaitons/kustomization.yaml new file mode 100644 index 00000000..69d1d6bb --- /dev/null +++ b/argocd/overlays/applicaitons/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: openshift-gitops +resources: + # - prod.yaml # currently not deployed via argo + - qa.yaml + - umami.yaml diff --git a/argocd/overlays/applicaitons/prod.yaml b/argocd/overlays/applicaitons/prod.yaml index 067e0753..f787d5f6 100644 --- a/argocd/overlays/applicaitons/prod.yaml +++ b/argocd/overlays/applicaitons/prod.yaml @@ -4,7 +4,7 @@ metadata: name: ilab-ui-stack-production spec: destination: - name: in-cluster + name: in-cluster # THIS NEEDS TO CHANGE once we get prod on ARGO namespace: instructlab project: default source: diff --git a/argocd/overlays/applicaitons/umami.yaml b/argocd/overlays/applicaitons/umami.yaml new file mode 100644 index 00000000..e0b4c2a5 --- /dev/null +++ b/argocd/overlays/applicaitons/umami.yaml @@ -0,0 +1,17 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: umami +spec: + project: default + source: + repoURL: https://github.com/instructlab/ui.git + path: deploy/k8s/overlays/openshift/umami + targetRevision: main + destination: + namespace: umami + name: in-cluster + syncPolicy: + automated: + selfHeal: true + diff --git a/deploy/k8s/base/umami/deployment.yaml b/deploy/k8s/base/umami/deployment.yaml new file mode 100644 index 00000000..8d7ee15f --- /dev/null +++ b/deploy/k8s/base/umami/deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: umami + labels: + app: umami +spec: + replicas: 1 + selector: + matchLabels: + app: umami + template: + metadata: + labels: + app: umami + spec: + containers: + - name: postgresql + image: registry.redhat.io/rhel9/postgresql-15:9.5-1733127512 + env: + - name: POSTGRESQL_DATABASE + valueFrom: + secretKeyRef: + name: umami-secret + key: POSTGRESQL_DATABASE + - name: POSTGRESQL_USER + valueFrom: + secretKeyRef: + name: umami-secret + key: POSTGRESQL_USER + - name: POSTGRESQL_PASSWORD + valueFrom: + secretKeyRef: + name: umami-secret + key: POSTGRESQL_PASSWORD + ports: + - containerPort: 5432 + name: postgres + livenessProbe: + exec: + command: ["pg_isready"] + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + exec: + command: ["pg_isready"] + initialDelaySeconds: 5 + periodSeconds: 10 + volumeMounts: + - name: db-data + mountPath: /var/lib/postgresql/data + - name: umami + image: ghcr.io/umami-software/umami:postgresql-latest + env: + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: umami-secret + key: DATABASE_URL + - name: DATABASE_TYPE + value: postgresql + - name: APP_SECRET + valueFrom: + secretKeyRef: + name: umami-secret + key: APP_SECRET + - name: HASH_SALT + valueFrom: + secretKeyRef: + name: umami-secret + key: HASH_SALT + - name: PORT + value: "3001" + ports: + - containerPort: 3001 + volumes: + - name: db-data + persistentVolumeClaim: + claimName: umami-postgresql-db-data diff --git a/deploy/k8s/base/umami/kustomization.yaml b/deploy/k8s/base/umami/kustomization.yaml new file mode 100644 index 00000000..89967049 --- /dev/null +++ b/deploy/k8s/base/umami/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: umami +resources: + - deployment.yaml + - namespace.yaml + - postgresql-pvc.yaml + - postgresql-service.yaml + - umami-service.yaml diff --git a/deploy/k8s/base/umami/namespace.yaml b/deploy/k8s/base/umami/namespace.yaml new file mode 100644 index 00000000..170ed2db --- /dev/null +++ b/deploy/k8s/base/umami/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: umami + labels: + name: umami diff --git a/deploy/k8s/base/umami/postgresql-pvc.yaml b/deploy/k8s/base/umami/postgresql-pvc.yaml new file mode 100644 index 00000000..3ffa7397 --- /dev/null +++ b/deploy/k8s/base/umami/postgresql-pvc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: umami-postgresql-db-data + labels: + app: umami +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + volumeMode: Filesystem diff --git a/deploy/k8s/base/umami/postgresql-service.yaml b/deploy/k8s/base/umami/postgresql-service.yaml new file mode 100644 index 00000000..6cd17d10 --- /dev/null +++ b/deploy/k8s/base/umami/postgresql-service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: umami-db + labels: + app: umami + component: db +spec: + ports: + - port: 5432 + name: postgres + selector: + app: umami diff --git a/deploy/k8s/base/umami/umami-service.yaml b/deploy/k8s/base/umami/umami-service.yaml new file mode 100644 index 00000000..f7268d15 --- /dev/null +++ b/deploy/k8s/base/umami/umami-service.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: umami + labels: + app: umami + component: web +spec: + ports: + - name: web + port: 3001 + selector: + app: umami + type: ClusterIP diff --git a/deploy/k8s/overlays/kind/README.md b/deploy/k8s/overlays/kind/README.md new file mode 100644 index 00000000..c222aff7 --- /dev/null +++ b/deploy/k8s/overlays/kind/README.md @@ -0,0 +1,25 @@ +# Introduction + +Kind is a tool that can allow you to emulate a local kuberenetes cluster. These manifests will help you provision a correctly configured kind cluster and apply the resources. + +# Usage + +## Building the cluster + +You can either create a default cluster, or use the setup we have to mimic our openshift dpeloyment more closely: `kind create cluster --config kind.yaml`. + +## Applying the kind-ingress manifests + +If you dont care about using an ingress and choose to hit the services directly, use host networking on your container runtime on which you are using kind, or some other +edge case which would remove the necesity of ingresses, you can simple ignore the [kind-ingress.yaml](./kind-ingress.yaml). However if you do want to use ingresses +(which are a part of both the default UI stack and the umami metrics stack), then you should deploy the kind ingress: `kubectl create -f kind-ingress.yaml`. +This will take some time to deploy, so now we can simply wait for it: +```bash +kubectl wait --namespace ingress-nginx \ + --for=condition=ready pod \ + --selector=app.kubernetes.io/component=controller \ + --timeout=90s +``` + +Once this goes through, you should review a message similar to the following letting you know you can proceed: +`pod/ingress-nginx-controller-68c4c94464-jvnjf condition met`. diff --git a/deploy/k8s/overlays/kind/umami/README.md b/deploy/k8s/overlays/kind/umami/README.md new file mode 100644 index 00000000..dc831a8a --- /dev/null +++ b/deploy/k8s/overlays/kind/umami/README.md @@ -0,0 +1,17 @@ +# Notes + +To try to deploy Umami via kind you must first create and apply the manifests 1 directory up. After that, creating umami within kind is very straightforward. +Simply set your `.umami-secret.env` with your values from the template `example.umami-secret.env` in this directory. After this, we need to import the +container image that we use for the Umami postgresql database. + +To do this, we first start by pulling down the image +```bash +PSQL_IMAGE="registry.redhat.io/rhel9/postgresql-15:9.5-1733127512" +docker pull ${PSQL_IMAGE} +``` + +If you provisioned a default kind cluster, you can load your image onto it as follows: `kind load docker-image ${PSQL_IMAGE}`. +However if you provisioned a kind cluster with the [kind.yaml](../kind.yaml) configuration we provided in the directory above this, then you will need to +specify the name of the cluster as well: `kind load docker-image ${PSQL_IMAGE} --name instructlab-ui` + +After that you can apply the Umami manifests: `kustomize build . | kubectl apply -f -`. diff --git a/deploy/k8s/overlays/kind/umami/example.umami-secret.yaml b/deploy/k8s/overlays/kind/umami/example.umami-secret.yaml new file mode 100644 index 00000000..d0ddb7d7 --- /dev/null +++ b/deploy/k8s/overlays/kind/umami/example.umami-secret.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Secret +metadata: + name: umami-secret + labels: + app: umami +type: Opaque +stringData: + DATABASE_TYPE: postgresql + POSTGRESQL_DATABASE: umami + POSTGRESQL_USER: umami + POSTGRESQL_PASSWORD: umami + APP_SECRET: app_secret + HASH_SALT: hash_salt + DATABASE_URL: postgresql://umami:umami@umami-db:5432/umami diff --git a/deploy/k8s/overlays/kind/umami/kustomization.yaml b/deploy/k8s/overlays/kind/umami/kustomization.yaml new file mode 100644 index 00000000..7e956512 --- /dev/null +++ b/deploy/k8s/overlays/kind/umami/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: umami +resources: + - ../../../base/umami + - umami-ingress.yaml + - example.umami-secret.yaml diff --git a/deploy/k8s/overlays/kind/umami/umami-ingress.yaml b/deploy/k8s/overlays/kind/umami/umami-ingress.yaml new file mode 100644 index 00000000..dcb3a787 --- /dev/null +++ b/deploy/k8s/overlays/kind/umami/umami-ingress.yaml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: umami-ingress + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - host: umami.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: umami + port: + number: 3001 diff --git a/deploy/k8s/overlays/openshift/umami/kustomization.yaml b/deploy/k8s/overlays/openshift/umami/kustomization.yaml new file mode 100644 index 00000000..b1d8690e --- /dev/null +++ b/deploy/k8s/overlays/openshift/umami/kustomization.yaml @@ -0,0 +1,8 @@ +# Umami will be deployed on the QA cluster but host metrics for both prod and QA +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: umami +resources: + - ../../../base/umami + - umami.sealedsecret.yaml + - umami-route.yaml diff --git a/deploy/k8s/overlays/openshift/umami/umami-route.yaml b/deploy/k8s/overlays/openshift/umami/umami-route.yaml new file mode 100644 index 00000000..8a7111b9 --- /dev/null +++ b/deploy/k8s/overlays/openshift/umami/umami-route.yaml @@ -0,0 +1,18 @@ +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + name: umami + labels: + name: umami +spec: + host: umami.qa.instructlab.ui + port: + targetPort: 3001 + tls: + termination: edge + to: + kind: Service + name: umami + weight: 100 + wildcardPolicy: None + diff --git a/deploy/k8s/overlays/openshift/umami/umami.sealedsecret.yaml b/deploy/k8s/overlays/openshift/umami/umami.sealedsecret.yaml new file mode 100644 index 00000000..f7a8df9d --- /dev/null +++ b/deploy/k8s/overlays/openshift/umami/umami.sealedsecret.yaml @@ -0,0 +1,25 @@ +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + creationTimestamp: null + name: umami-secret + namespace: umami +spec: + encryptedData: + ADMIN_PASSWORD: AgCKiqvuCtrkZW/NjwU+bNcnYGmSoLkqRB/Y+JUJA+HLUuJdBep4yi2z2eSOWbjOhPfE20g2LmCG2DcRi8+RgTbJIihHkLfmIQsnM9K3XIWj6EGke5Qjh/GfWiF1p2idJM63YD6eInCBm2HimjdDkTr8v6JQ2aU918sSntgFGs5g6RVtZ8BC1EB+hvFW00CIDRWExdGTfBqIgR8Z5bVMK3cVT1HdZj6AklUBp2iR2aCWN4KCsAWVh2jmzkXdmg0Id2c9phsfI11GxLFIWwou3VcfdbCCRnN3n+jU+CkCfJ3dDYUGFbQTQPcNI47joiLN3bAT4UNG8XhSBMq7ZmOBOK6vKy6bDfa0+KN8IKwGajZd+cGZ3jgTuQ9bmpwqztdnpgSaVx8bTSUo9yMfgcuMHlGezxzwGQdnOfRlAryq3NTqGuUJkgyxEyM2w1iGaTFOvD9j0W1tIl5JbExz0Jp5ObNYDeSrnjWA+O7zthE5oKaNsPPfU4y6IGGyWYV40X3wuZpBtJkdPu3nFLVqZUCKoiB7pT554/fqtqgGip/1dD+Q0eCkRszS9G140ZTGv9wjel3yvfR1C0jxM1gpeI4NMZArvd2Fzn6iNoCharzfqVnIAAqmeKkpGU/YEmgTxqoLIT3R6+okWIdt8QgcJpU3oKIxmoo1BNSBtJe+46jO290W87oEvOYlASNi4b0jpSQJroso/hIWJzDEvYrdxaQpknVP8mErBDbWmG1Cl+KuJw== + APP_SECRET: AgCIg+JyWbM5O0oB/4h3/KVdVlLYU7HnbRz6WsCnriPAVlhs2rRwObNVPHuWxYrKbng6ihCZftxgdIKQhrY73v0cYKyEQlK3zmpeIktT+YXctLhLqrVYPU8pc34hh5DvFvYDzvRwYg8rBAR6gasPlnHQ/u3vL+wsRmb9Rf5Oeu1NQz0NdGv7wU4ZkRB0ZfZ0vBwYYJHRgXA6YKbNKzZVKbjQZdjL6i5ZmgiJ9goKnoE1kKdM6HcLhiOjQFyzlMu3ZG6om3hU+7FUCarakuRkaMqFl5OIi/rfFd3YY9b6E+lLsOhKqKgLnxS3w1uYXZrDDPAjadns0neLzHRmN7ACgzt9sync3f8tw9qUMAC0/nmZbHUcSltiEYfu3ZEiR1o69+MvjA7xwa17XnuCjsZvx0hp+I/vumsh3smiyiiYWAvOdbE66mh3NCENBBQIcWBFxpGBIhswJL1SWsvw2yb4rzTBm0hiL7weha6tqm11ioauWBDK2bznzBVh/qU+1yAV1XrIcPeKgosDlECOWYHWs4tmPOnOwyINgAnZtyHLOgT+Oh5F+qkh6U1pXMTAkVRIJNTAYTPGf1p026NfiGnglVSk5XfeRxsi0m9qaPSb4ULjDcPKJl+jxNbxTR2veiiAP6RwLqM1WpRE8rWaaqmZiH5JWFnOtkamuRwh2MVqpmB1gj1OzoywvuAN9uouLFg/T5853gm1FHt5z1wB5X9w + DATABASE_TYPE: AgARB8z2qrRjbj+oK9f5povXhCW4pvivcH4L9qfLN0KEobSIT8Eh2aGimvTvX5tMQ5Sr12og8x5oe1x7Xs3mwZvZLNKaS3gAGKPEjiJSXmb8Fm0Sjm6XQ0IgX4PMfnwqGaVA7CMRpGwOjOxHur91TnIffQsZYDXVxD9Qw3WkW6lvtMAxnIXp0fuKlWVcNkuEPY9dsk6s00pjA+/VN/5pjJemZkc0czcO5jZQ8pN606gSuhFdg4KZO9fPs286NHHbU/oMLFkxzLAGISvnQrLnVMrqnW7XV9J6Weo+4rB9ok5a3iodoQ9JBQBlvNipto35VEUpRQNDyMRxkzQUtK8kro9OmW1wTTGZsTffKsxHN0Jge3dw2/qOi0MBjX8QViN9/Mv2uyDB2Wa07i7hnEjrba4tgqoABoskittk18DJ1uctMIXFml14P9nKsQ9NN8E1Oyo8X6cVzBi5KIwDJhFx8SQzKklFRD284eP/trzjKHcqY4F+P0WylAYflcpwL0BshEi3VPIiZyAfQczaesGClMeglPnCJ8zFE7OPXvn633sIwo2TByO3r7RLl0ZRBzmy19+/UKAMyFXacolKclvsC9wUP1tzcRxPyzRzMlEDV+6cn0MBNoWgNpw9Rr7JJoEMlWRyHErq3Xy5bJRuzfuDmtIXzgckpWoPg9hTimE91E9xf2N1g9ovlrws+tYpkTFQkzuxsNHXd+1k21YxmA== + DATABASE_URL: AgCexLYEJnWkklIhAJX35KrrBH/OT+vi4hJBpQv/mOxoK7iCUllRKK1y3iNGmggvL9PBvDFH9YJRQ+/Yd9ufhrpc/a8/BI+oSrjtLNuwF4QFaQFBqz1DoN2jX/wbuJAgn87DJ81RRugPgwvrub8OF1OA9g4vdja+0RvUl9m3TwfaAyHnOq5IMwVMgUGu9h6WWhMvhmt3ROEDoASSAfLNGkeOoYbxboX2gllgBis3sU5jBJ2d+iddkUpniD/lGlmLqDUUm44l2BovwaJ4M2i13RmZC12e4kY83tQFVEqDqT+P63FmIVBd1nLpdBujN2E1Krrac0fLa+H1GX2k1XQ0ao6d+72pJHL5f9882RDD/y448L+6fTN6CCkDqfVT1VQy08jNyHHZP3MMN3Q9psn4Ey+CKKt/t+1Puyo1IEXBspO4dAa4qHEjLJYJO1eMCfpez2E2XysdJvFJ/FqFXnT9EJAyRwUK16HNK6dbFR8sHU2jQhoRqmyjy5DXu0LS+eCPMHyLwtVkBn0TZJqnYv3HHgJQVI5al8QWwRJq7fYU8NMWe/8HF3aBUmVDY/ACVqgoLKFrfls9pcr8ENKG+HRy6gwhqISbFDhQjl1uyEJDZ+OqnaP1q9B+nzujCystaDTd1x7Y0NbN/jdWEY8SlGhee6+jH9fQSCvQQbdAdcoik4HlxpOr+mWT5bVJvgoPrrNSCR9sI64Vl9n6cUctzCjDKWqlNxCO1gaNuQp8QPJ/Lpj3GidL6sssGl+xV+IVAlR9 + HASH_SALT: AgCGet4Cbyhhh56K3a32s8XGTQa8LZiJFEdXMON+NqknJXXcMlYBeeM26I/Id1frRKZyQ0CrhJVXmvHi9UcB9GeGmJqMsIsZ19rH3CCMDgRXf98h0ickhkJyyGKXb4pxSGQuHJ6KNwKuhWLGX6BHP9ZyeFm6P698ThUa4RFireugKTpHcdGl/MFVXwDNgBi8761Ku0FCU+zTfXwsZCTRqC0NGa9lahrTDiW47VSRg+YE6xfRH9ib5UXUBTQwrFXb/zpsHe+4WAt9Ffe2xj3Lg1Ug33e5ukkRuYyqSXN6nX80u+9uavE+ugW/DRGrFSVyyb7vptQcQ76KU31wRyG+D7UnqkMKFY3Dze+cwvOYtwGdBbwJIL6xm5piuKMGQY12dEvf3u+XRgCMKjx4G9tBqfnd4LeQ/CCN034r0A94bt9ClvYpMogEyNMRk5g27ubGRFOT69akIUaQF7toD/otM+5AquvuUhvFdt1M9q6MaAq1bOqhanRy2It4iLsnGOliAJKqAJi67o77RFM0zIeDUBCBWzj3x4uS/BSBNfTh5Blf3Pr06mbhx/zaHJCKBXIVBNIvV5lSvDBfG5zYAvJszWSuv48AbeN0JlqhCfJ1IBWwK/IoyUbHYDPkHHlaJ8ViQi2RZXHk9jZG72mgetSARZ+HuMr/kX0Z3jQBF+zKov+/pNLiJmhVgQznR64bvU+5td4KU2NbluGbhEgg2x4= + POSTGRESQL_DATABASE: AgBnyQJFdd2JRibSUnOLx3DxQUI5LLnpropRC1CygcI43vZ/mwCa82xW8e4XCKuxoWweFVjadDHZ8VZCEMdmoUHRttgVzwY1JqvlwjnbnAilPUjqgppdBc7zp1cv7eIpywapXNCjd8Axnp9vCITFR9R0chAXmf//NB69oDJZOUvS1U0TDvG6QVkhMuwQfy+iQ/WWzOUP3msr8Klnepdvg5lyE5Dtibl567dJ+TLCs8lJCD4Q8/IXQhonGBekBlkm2AZCSkvWbRH2cruvHM35qBtN1HZxiEqbCOr0SAjD2vsvPPBPjyIVg1aORPiO6A2pzfp7UJx7R/4HCCLQw8TYuOfloqC0qm4Mu2JT/o/qVQkNBBElz4+x+YWiU/eNF+P6u9xOfLaaIxkSgZC+uYLSv8D76lI3moSZBxKPbvHO85r7kZfzApc0+R3VhcX+cTHmOjfC7dOsB8Af+tSR1cEMHX1HDIcLOsViA3k9BvA+tNwmxu/vRCSuS9WaPnnyVMUye/e4duEjrYcDr9F2Aj28mPDo1ty76n+XTg15bypK5dfl+HwXclinj7FSCwWXuRpFC50qQn4Zng2wBygccNm5XlM2P41Hs2oRKd2EwVe/FuQZxN9cLswKIRfucsNv4BH6i0BXP4nNyq969VBM3E7baPvtg71MeCOf9GGpt3fxYNH48tpgJpS1ma4JpLm+F14nS+k/4Wubcw== + POSTGRESQL_PASSWORD: AgB3KVdEMngd+Ztm3htZvcUsO3a+KqtO/LEX1b8NOymtbTBr6oWM1y1h6v2Le+CK7M2ExghnMPmDdQOXeWgWeSY1cNMoTDIS8EzbAd9XzNr3gYpWXCTopLFXTbPst0gEgP2dUcJS59jxC6r0JIYbzxP8G+wAPtFym1T7D4Ik6bf6LrQ9kQHGtnZHBz4q/fRuSk4hbIjHZ4OXNyjJ4ZKffOXcmdGsv0+dhLUzNS+c2/yQRx+m0NFJZkP49v/yIgkGw5GaqwtYswfVlhsjI+Biw/0H9wZUM9WMkuX1BwIBp/f5942rga9rv+whZmAT2MS4h7UJAwoyCbiV/PG/NOXXKiJA7nC6HZKZqxu/NBHrLKFVLX1ZXVKd6T0zMHmhFnpqvMJkKPPBduU0nn9nIdzldj+QOl263WCLjCcdUXe82UFC5Lzc4zmJL2sBc0j+pyuWJYYqUI8v1x0qxcsbZFbEeDbazj3GY7eixs/mFQX4YC6ZJKUlXUXK9mV3FvyDjC7hp8YNSrw85w4xnmaY37TdiQT5jxsTzZSgY7mLRaB7RU0AahC3ZCAe0kCKmsM2JJdtXwARJ1RDSV4t7zmXsXTpZHu2hwkPBiENswJ7DvcLdjfmUKc3rQGKI7PiK5h7/csLfEN6Q4c1oSW3d5pYJpMvquRdr1PsBctDBPwTIKevOkyEsM/ueC6r3d7S1LSJhVkXEuFLeG7TSw== + POSTGRESQL_USER: AgCaanMEfhIe8LtCi01R6GSPT+A1lOaoDaLaZ5JS/8Ar7vmCUbrT+pG20Q+DKsUOcP/ke8r29Zpr1ZBl8lLKWFp8PaC9jw1KP3s/zcukKuLwEhNs73ldu4U757g6xLwB8+zYcgCWQA9J6flKq+9HLREki7CORtJT9BPo75TxIOBH8Ya/kT8u/+nlYqvDxAWsPeWCBljzeiKUtoLkXySCl5qhRwwyvUsuffMTHIouOtY/Y1OEuIhSvCi01A1kL5/vddAUtJYxvp+Kh2TuEU//g0kjXTUo8sCbnoj36I/trFplSZTe9680k1rhYK4H2Cca98t0JzPuwHUlg4akm5JORZ/BxQMKDCcuaESZIn4bC4Yoq7LUPrDhJpGqgiZSHFlqLs46UPg/534sc1HacmVr2qprHWNEqkwVHoej28YqWTJlP4XEqTnPQK645wMBvyhCKXrwod6pUmAaQZS7KA7giFCAlZxyVJXpp2bvTpG36H9BG/5FwzC8jIZKzZj9yFmkdKiI6CyMDuDrVA7qbpvVprmtqE2kRRgxOTEazgThMYMnLt9hdJiRIAv4JE+rwk8n07W+cOsfxAXLwaAGcQvZPOhQKnB2Rb2hWa7SYmJt3GJV64LrkUpYtRWQ204xhY8DIYVzXGQ8GY6ziFkrZe0TCdVeWbxLdB01rXWKXnb1chfCB2GVD0ZUuUmVL250a9MOwhTy31zzOw== + template: + metadata: + creationTimestamp: null + labels: + app: umami + name: umami-secret + namespace: umami + type: Opaque +