diff --git a/.docs/DEVELOPMENT.md b/.docs/dev-guide-app.md similarity index 70% rename from .docs/DEVELOPMENT.md rename to .docs/dev-guide-app.md index c5ab158886b974f710455783d4fb12c38ecaa4cd..6d20ae5065bf8bd52555dcb0869ad9c4096f9ebe 100644 --- a/.docs/DEVELOPMENT.md +++ b/.docs/dev-guide-app.md @@ -1,16 +1,17 @@ -# Development Guide +# Application Developer Guide ## Dependencies -Local development depends on the following packages: +Local development depends on the following packages for Debian 12: -* [Apache Maven](https://maven.apache.org/) 3+ -* [Java JDK](https://openjdk.org/) 17 (LTS) -* [Docker Engine](https://docs.docker.com/engine/install/) 24+ +```shell +apt install -y maven openjdk-17-jdk make +``` -Optional but recommended: +Required tools with their own installing guides: -* [GNU Make](https://www.gnu.org/software/make/) 4+ +* [Docker Engine](https://docs.docker.com/engine/install/) 24+ +* [Minikube](https://minikube.sigs.k8s.io/docs/start/) 1.32.0 ## Getting Started @@ -25,11 +26,13 @@ mvn -f ./dbrepo-metadata-service/pom.xml clean install -DskipTests We practice test-driven development and require contributors to test their code with at least 90% code coverage. -## Code Documentation - -Before creating a merge request, make sure you: +```shell +make test +``` -- [x] Generate the [Swagger Docs](#swagger-docs) endpoint documentation +The Java-based services have the coverage reports generated by `JaCoCo` in the `report/site/` subdirectory, the +Python-based services have the coverage reports generated by `coverage` in the `.coverage` SQLite3 database +and `coverage.txt` log file respectively. ### Swagger Docs @@ -41,20 +44,20 @@ bash .swagger/swagger-generate.sh ### Branching Strategy -<p align="center"> -<img src="../.gitlab/branching-strategy.png" alt="Branching strategy from the master-dev-feature branches and release branches." width="732" height="391" /><br/> -<i><strong>Figure 1.</strong> Branching strategy of the source code development.</i> -</p> +<figure markdown> + +<figcaption>Figure 1: Branching strategy of the source code development.</figcaption> +</figure> ### CI/CD We get compute resources in-kind from [dataLAB](https://www.it.tuwien.ac.at/en/services/network-and-servers/datalab) to run our pipeline: -<p align="center"> -<img src="../.gitlab/gitlab-runner.png" alt="Gitlab runner configuration in the cluster" width="732" height="262" /><br/> -<i><strong>Figure 2.</strong> Gitlab runner configuration in the cluster.</i> -</p> +<figure markdown> + +<figcaption>Figure 2: Gitlab runner configuration in the cluster.</figcaption> +</figure> Minikube cluster with 6vCPU and 28GB RAM. The CI pipeline is configured as follows in the `config.toml`: @@ -90,12 +93,12 @@ For each job in the CI/CD pipeline, a pod with three containers is started: 3. `svc-0` the Docker-in-Docker sidecar (rootless executed as user `rootless`/`1000`) exposing the Docker socket to the `build` container under ` -*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a -dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build` +*Note.* Only Docker-in-Docker (dind) is allowed as service in the pipeline currently. For each job, a +dind-sidecar container `svc-0` is started that exposes the Docker socket at `/var/run/dind/docker.sock` in the `build` container you can freely configure how you want. We are aware this is not optimal as it exposes *root* privileges in the cluster. -The full CI/CD pipeline Helm chart is documented in +The full CI/CD pipeline Helm chart is documented in the [`fda-deployment`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-deployment/-/tree/master/charts/dbrepo-devops) repository. diff --git a/.docs/dev-guide-infra.md b/.docs/dev-guide-infra.md new file mode 100644 index 0000000000000000000000000000000000000000..cb01a76473d24e18a2bcbcbe444912be10890b02 --- /dev/null +++ b/.docs/dev-guide-infra.md @@ -0,0 +1,78 @@ +# Infrastructure Developer Guide + +## tl;dr + +```shell +make cluster-start cluster-image-pull cluster-install +``` + +## Dependencies + +Local development depends on the following packages for Debian 12: + +```shell +apt install -y make +``` + +Required tools with their own installing guides: + +* [Docker Engine](https://docs.docker.com/engine/install/) 24+ +* [Minikube](https://minikube.sigs.k8s.io/docs/start/) 1.32.0 + +## Getting Started + +Start the local development cluster with the Docker driver (takes at least 8 vCPUs and 12GB RAM). It installs a Minikube +single-node Kubernetes cluster with enabled Ingress and Dashboard + +```shell +make cluster-start +``` + +Build the local images with `make build-docker` and copy them to the cluster image cache: + +```shell +make cluster-image-pull +``` + +Build and install the Helm chart: + +```shell +make cluster-install +``` + +## Debug + +Open the Minikube (Kubernetes) Dashboard: + +```shell +make cluster-dashboard +``` + +<figure markdown> + +<figcaption>Figure 1: Minikube Dashboard</figcaption> +</figure> + +Optionally enable the Prometheus metrics addon with: + +```shell +minikube addons enable metrics-server +``` + +## Test + +Test if the Helm chart raises errors on start (the script aborts after 5 minutes automatically if some pods are not +starting or erroneous). + +```shell +make cluster-test +``` + +## Uninstall + +To uninstall DBRepo from the local Minikube cluster, removing all data: + +```shell +make cluster-uninstall +``` + diff --git a/.docs/dev-overview.md b/.docs/dev-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..2ffcbc6ef90bfd4f85cd7bc143afa737c4f9a6ad --- /dev/null +++ b/.docs/dev-overview.md @@ -0,0 +1,21 @@ +# Overview + +## Guides + +* The [application developer guide](../dev-guide-app) guides you through the steps on how to build DBRepo from + scratch and customize the application. +* The [infrastructure developer guide](../dev-guide-infra) guides you through the steps on how to build and customize + the operation environment. + +## Organization + +* Monthly sprints with patch-releases (i.e. `1.4.2` in February, `1.4.3` in March, ...). +* Branching from `dev` for feature development, one release branch per patch (i.e. `release-1.4.2` for release version + `1.4.2`). + +## Roadmap + +- [x] Q1: Python library, versioning in every component, bumping frontend versions, i18n +- [ ] Q2: Kubernetes deployment guidelines for OpenShift +- [ ] Q3: TBD +- [ ] Q4: Release of 2.0.0 \ No newline at end of file diff --git a/.gitlab/branching-strategy.png b/.docs/images/branching-strategy.png similarity index 100% rename from .gitlab/branching-strategy.png rename to .docs/images/branching-strategy.png diff --git a/.gitlab/gitlab-runner.png b/.docs/images/gitlab-runner.png similarity index 100% rename from .gitlab/gitlab-runner.png rename to .docs/images/gitlab-runner.png diff --git a/.docs/images/screenshots/minikube-dashboard.png b/.docs/images/screenshots/minikube-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..038540069fa854a52f241e4aba8a12e9923f5145 Binary files /dev/null and b/.docs/images/screenshots/minikube-dashboard.png differ diff --git a/.gitignore b/.gitignore index 2ae0c2d6d11336d2645da6a8d55eb4c8df68a907..716e25c58a793ef0a1470c3dc924baa6a2479c79 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ schema.xsd final/ build/ swagger/ +*.tar # docs .docs/.swagger/dist/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 97de5ce07190f1af6780e80115c6799aa0660b25..c98213a954ffa2884500f2aff85a832b7041e51b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,9 +4,9 @@ variables: TRIVY_CACHE_DIR: ".trivycache/" DOCKER_HOST: "unix:///var/run/dind/docker.sock" TESTCONTAINERS_RYUK_DISABLED: "false" - DOC_VERSIONS: "latest,1.4.1,1.4.0,1.3.0" - APP_VERSION: "1.4.1" - CHART_VERSION: "1.4.1" + DOC_VERSIONS: "latest,1.4.2,1.4.1,1.4.0,1.3.0" + APP_VERSION: "1.4.2" + CHART_VERSION: "1.4.2" image: debian:12-slim diff --git a/Makefile b/Makefile index 8ad6b93fe3281a993d51d48b2f15038241297af8..9d1a6e890a0f45f3b61f0cd90830ff22315638d0 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ .PHONY: all TAG ?= latest +APP_VERSION ?= 1.4.2 +CHART_VERSION ?= 1.4.2 REPOSITORY_1_URL ?= docker.io/dbrepo REPOSITORY_2_URL ?= s210.dl.hpc.tuwien.ac.at/dbrepo @@ -231,5 +233,54 @@ teardown: build-api: bash .docs/.swagger/swagger-generate.sh +helm-build: + cp ./helm-charts/dbrepo/Chart.tpl.yaml ./helm-charts/dbrepo/Chart.yaml + sed -i -e "s/__CHART_VERSION__/\"${CHART_VERSION}\"/g" ./helm-charts/dbrepo/Chart.yaml + sed -i -e "s/__APP_VERSION__/\"${APP_VERSION}\"/g" ./helm-charts/dbrepo/Chart.yaml + #helm dependency update ./helm-charts/dbrepo + helm package ./helm-charts/dbrepo --destination ./build + +cluster-start: + minikube start --driver="docker" --memory="12g" --cpus="8" # 2 CPUs for Control Plane + 6 + minikube addons disable metrics-server + minikube addons enable ingress && minikube addons enable dashboard + ./helm-charts/dbrepo/hack/add-hosts.sh + #CERT_MANAGER_VERSION=1.14.4 ./helm-charts/dbrepo/hack/install-cert-manager.sh + +cluster-test: cluster-start cluster-image-pull cluster-install + bash ./helm-charts/dbrepo/test.sh + minikube stop + +cluster-stop: + minikube stop + +cluster-image-pull: + docker image save -o ui.tar dbrepo-ui:latest + docker image save -o data-service.tar dbrepo-data-service:latest + docker image save -o search-db-init.tar dbrepo-search-db-init:latest + docker image save -o search-service.tar dbrepo-search-service:latest + docker image save -o analyse-service.tar dbrepo-analyse-service:latest + docker image save -o data-db-sidecar.tar dbrepo-data-db-sidecar:latest + docker image save -o metadata-service.tar dbrepo-metadata-service:latest + echo "[INFO] Saved local images" + minikube image load ui.tar + minikube image load data-service.tar + minikube image load search-db-init.tar + minikube image load search-service.tar + minikube image load analyse-service.tar + minikube image load data-db-sidecar.tar + minikube image load metadata-service.tar + echo "[INFO] Imported local images" + rm -f ./ui.tar ./data-service.tar ./search-service.tar ./analyse-service.tar ./data-db-sidecar.tar ./metadata-service.tar + +cluster-install: helm-build + helm upgrade --install dbrepo -n dbrepo ./build/dbrepo-${CHART_VERSION}.tgz --create-namespace --cleanup-on-fail + +cluster-uninstall: + helm uninstall -n dbrepo dbrepo + +cluster-dashboard: + minikube dashboard + docs: bash ./build-docs.sh diff --git a/helm-charts/dbrepo/.gitignore b/helm-charts/dbrepo/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e7b18ebe6d6b5e6ea7cba8a40b9ee60db844f169 --- /dev/null +++ b/helm-charts/dbrepo/.gitignore @@ -0,0 +1,5 @@ +# generated +*.crt +*.key +*.srl +*.csr \ No newline at end of file diff --git a/helm-charts/dbrepo/Chart.tpl.yaml b/helm-charts/dbrepo/Chart.tpl.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5ae1d128073c61b2efabc9abd62e9d95c514e103 --- /dev/null +++ b/helm-charts/dbrepo/Chart.tpl.yaml @@ -0,0 +1,52 @@ +apiVersion: v2 +name: dbrepo +description: Helm Chart for installing DBRepo +sources: + - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +type: application +version: __CHART_VERSION__ +appVersion: __APP_VERSION__ +keywords: + - dbrepo +maintainers: + - name: Martin Weise + email: martin.weise@tuwien.ac.at +home: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/ +icon: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.docs/images/signet_white.png +dependencies: + - name: opensearch + alias: searchdb + version: 2.15.0 # app version 2.10.0 + repository: https://opensearch-project.github.io/helm-charts/ + - name: opensearch-dashboards + alias: searchDbDashboard + version: 2.13.0 # app version 2.10.0 + repository: https://opensearch-project.github.io/helm-charts/ + - name: keycloak + alias: authService + version: 17.3.3 + repository: https://charts.bitnami.com/bitnami + - name: mariadb-galera + alias: dataDb + version: 11.0.1 + repository: https://charts.bitnami.com/bitnami + - name: mariadb-galera + alias: metadataDb + version: 11.0.1 + repository: https://charts.bitnami.com/bitnami + - name: postgresql-ha + alias: authDb + version: 12.1.7 + repository: https://charts.bitnami.com/bitnami + - name: rabbitmq + alias: brokerService + version: 12.5.1 + repository: https://charts.bitnami.com/bitnami + - name: fluent-bit + alias: logservice + version: 0.40.0 + repository: https://fluent.github.io/helm-charts + - name: seaweedfs + alias: storageservice + version: 3.59.4 + repository: https://seaweedfs.github.io/seaweedfs/helm diff --git a/helm-charts/dbrepo/Chart.yaml b/helm-charts/dbrepo/Chart.yaml index 9f303fb8fd99e02d7a90445b26293d2340630495..46e734f95f5de7c65d9e4fc966c3f1e07e58588f 100644 --- a/helm-charts/dbrepo/Chart.yaml +++ b/helm-charts/dbrepo/Chart.yaml @@ -1,11 +1,10 @@ apiVersion: v2 name: dbrepo description: Helm Chart for installing DBRepo -category: Database sources: - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services type: application -version: "1.4.2-RC1" +version: "1.4.2" appVersion: "1.4.2" keywords: - dbrepo diff --git a/helm-charts/dbrepo/README.md b/helm-charts/dbrepo/README.md index d7af72f404d5d894ce0965435be4ebbbef6c1138..1c672c2005c3a7e87b59c90b6c63de0fff56f3c8 100644 --- a/helm-charts/dbrepo/README.md +++ b/helm-charts/dbrepo/README.md @@ -17,9 +17,9 @@ helm install my-release "oci://s210.dl.hpc.tuwien.ac.at/dbrepo/helm/dbrepo" --va * Kubernetes 1.24+ * Kubernetes 3.8.0+ -* PV provisioner support in the underlying infrastructure -* Ingress support in the underlying infrastructure -* TLS certificate provisioner support in the underlying infrastructure, e.g. [cert-manager](https://cert-manager.io/) +* Optional PV provisioner support in the underlying infrastructure (for persistence). +* Optional ingress support in the underlying infrastructure: e.g. [NGINX](https://docs.nginx.com/nginx-ingress-controller/) (for the UI). +* Optional certificate provisioner support in the underlying infrastructure: e.g. [cert-manager](https://cert-manager.io/) (for production use). ## Installing the Chart diff --git a/helm-charts/dbrepo/hack/add-hosts.sh b/helm-charts/dbrepo/hack/add-hosts.sh new file mode 100755 index 0000000000000000000000000000000000000000..93d1bbcb52c80ce3d3c173b4d458fd76489fde21 --- /dev/null +++ b/helm-charts/dbrepo/hack/add-hosts.sh @@ -0,0 +1,5 @@ +#!/bin/bash +cat /etc/hosts | grep "dbrepo.local" +if [ "$?" -ne 0 ]; then + echo "$(minikube ip) dbrepo.local" | sudo tee -a /etc/hosts +fi \ No newline at end of file diff --git a/helm-charts/dbrepo/hack/generate-tls-cert.sh b/helm-charts/dbrepo/hack/generate-tls-cert.sh new file mode 100755 index 0000000000000000000000000000000000000000..cfe69dfdb0e59f7c2b0895b63f4bf039e074c9e4 --- /dev/null +++ b/helm-charts/dbrepo/hack/generate-tls-cert.sh @@ -0,0 +1,8 @@ +#!/bin/bash +HOSTNAME="dbrepo.local" + +openssl genrsa -out ./tls/ca.key 2048 +openssl req -new -x509 -days 365 -key ./tls/ca.key -subj "/C=AT/O=Acme, Inc./CN=Acme Root CA" -out ./tls/ca.crt +openssl req -newkey rsa:2048 -nodes -keyout ./tls/tls.key -subj "/C=AT/O=DBRepo/CN=${HOSTNAME}" -out ./tls/tls.csr +openssl x509 -req -extfile <(printf "subjectAltName=DNS:${HOSTNAME},DNS:www.${HOSTNAME}") -days 365 -in ./tls/tls.csr \ + -CA ./tls/ca.crt -CAkey ./tls/ca.key -CAcreateserial -out ./tls/tls.crt \ No newline at end of file diff --git a/helm-charts/dbrepo/hack/install-cert-manager.sh b/helm-charts/dbrepo/hack/install-cert-manager.sh new file mode 100755 index 0000000000000000000000000000000000000000..8b0569b733164132d0932e3e645e1fb025a3d84f --- /dev/null +++ b/helm-charts/dbrepo/hack/install-cert-manager.sh @@ -0,0 +1,15 @@ +#!/bin/bash +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v${CERT_MANAGER_VERSION}/cert-manager.yaml +if [ $? -ne 0 ]; then + echo "ERROR: Failed to install cert-manager" > /dev/stderr +else + echo "SUCCESS: Installed cert-manager" +fi +cat <<EOF | kubectl apply -f - +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: selfsigned-cluster-issuer +spec: + selfSigned: {} +EOF diff --git a/helm-charts/dbrepo/hack/tls/.gitkeep b/helm-charts/dbrepo/hack/tls/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/helm-charts/dbrepo/templates/NOTES.txt b/helm-charts/dbrepo/templates/NOTES.txt index ce7c200186842631afb13f666f421a16677895b3..590f1eba5e3565e92495bb4efe598a2898c5a5ef 100644 --- a/helm-charts/dbrepo/templates/NOTES.txt +++ b/helm-charts/dbrepo/templates/NOTES.txt @@ -1,10 +1,6 @@ -1. Get the application URL by running these commands: {{- if .Values.ingress.enabled }} -{{- range $ingress := .Values.ingress.data }} -{{- range $host := $ingress.hosts }} - {{- range .paths }} - http{{ if $ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- end }} +1. Get the application URL by running these commands: + https://{{ .Values.hostname }} +{{- else }} +Enable ingress to access the UI with `ingress.enabled: true`. {{- end }} diff --git a/helm-charts/dbrepo/templates/analyse-service/deployment.yaml b/helm-charts/dbrepo/templates/analyse-service/deployment.yaml index e2591a9afec2af4d657b787d2d20eecaa533f753..c15d67377f40bea64840a75adece8f4499e9a800 100644 --- a/helm-charts/dbrepo/templates/analyse-service/deployment.yaml +++ b/helm-charts/dbrepo/templates/analyse-service/deployment.yaml @@ -4,14 +4,14 @@ apiVersion: apps/v1 kind: Deployment metadata: name: analyse-service - namespace: {{ $.Values.namespace }} + namespace: {{ .Values.namespace }} labels: app: analyse-service service: analyse-service spec: replicas: {{ .Values.analyseService.replicaCount }} strategy: - type: {{ $.Values.strategyType }} + type: {{ .Values.strategyType }} selector: matchLabels: app: analyse-service @@ -29,7 +29,7 @@ spec: runAsGroup: 1000 containers: - name: analyse-service - image: {{ printf "%s/%s:%s" .Values.analyseService.image.registry .Values.analyseService.image.repository .Values.analyseService.image.tag }} + image: {{ .Values.analyseService.image.name }} imagePullPolicy: {{ .Values.analyseService.image.pullPolicy | default "IfNotPresent" }} ports: - containerPort: 5000 diff --git a/helm-charts/dbrepo/templates/data-db/pvc.yaml b/helm-charts/dbrepo/templates/data-db/pvc.yaml index 0d5c5c49af15f9603f2869a31387f94c174e8203..1eea5fa393717908dc189c1144d89d5a2107f14b 100644 --- a/helm-charts/dbrepo/templates/data-db/pvc.yaml +++ b/helm-charts/dbrepo/templates/data-db/pvc.yaml @@ -3,7 +3,6 @@ kind: PersistentVolumeClaim metadata: name: data-db-shared spec: - storageClassName: {{ .Values.dataDb.persistence.sharedStorageClass }} accessModes: - ReadWriteMany resources: diff --git a/helm-charts/dbrepo/templates/data-service/deployment.yaml b/helm-charts/dbrepo/templates/data-service/deployment.yaml index 429a4ccf93de64908b065812b179a6c1169e3aac..ed2317b5884d2fd1ef0ff1d6faf7283320a4492a 100644 --- a/helm-charts/dbrepo/templates/data-service/deployment.yaml +++ b/helm-charts/dbrepo/templates/data-service/deployment.yaml @@ -4,14 +4,14 @@ apiVersion: apps/v1 kind: Deployment metadata: name: data-service - namespace: {{ $.Values.namespace }} + namespace: {{ .Values.namespace }} labels: app: data-service service: data-service spec: - replicas: {{ .Values.metadataService.replicaCount }} + replicas: {{ .Values.dataService.replicaCount }} strategy: - type: {{ $.Values.strategyType }} + type: {{ .Values.strategyType }} selector: matchLabels: app: data-service @@ -28,7 +28,7 @@ spec: runAsGroup: 1000 containers: - name: data-service - image: {{ printf "%s/%s:%s" .Values.dataService.image.registry .Values.dataService.image.repository .Values.dataService.image.tag }} + image: {{ .Values.dataService.image.name }} imagePullPolicy: {{ .Values.dataService.image.pullPolicy | default "IfNotPresent" }} ports: - containerPort: 9093 diff --git a/helm-charts/dbrepo/templates/data-service/secret.yaml b/helm-charts/dbrepo/templates/data-service/secret.yaml index 8bfa60c1eaa069e517b23670f6e400ded2639b03..2562817d781f835ae4d72e3dd6cc49143e6a3cef 100644 --- a/helm-charts/dbrepo/templates/data-service/secret.yaml +++ b/helm-charts/dbrepo/templates/data-service/secret.yaml @@ -1,4 +1,3 @@ -{{ $pidBase := printf "https://%s/pid/" .Values.hostname }} {{ $jwtIssuer := printf "https://%s/api/auth/realms/dbrepo" .Values.hostname }} --- apiVersion: v1 diff --git a/helm-charts/dbrepo/templates/ingress.yaml b/helm-charts/dbrepo/templates/ingress.yaml index 20eeb071fa6e47a331609c7d4dae9ca6a93039a0..e4c19e8066c9e13ff76f52a469bcf4f3ad7fbdd5 100644 --- a/helm-charts/dbrepo/templates/ingress.yaml +++ b/helm-charts/dbrepo/templates/ingress.yaml @@ -1,39 +1,210 @@ -{{- if .Values.ingress.enabled }} -{{- range .Values.ingress.data }} --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: dbrepo-{{ .name }} - {{- with .annotations }} - annotations: - {{- toYaml . | nindent 4 }} + name: dbrepo-ingress-basic + annotations: {{ toYaml .Values.ingress.annotations.basic | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} + {{- end }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /api/analyse + pathType: Prefix + backend: + service: + name: analyse-service + port: + number: 80 + - path: /api/search + pathType: Prefix + backend: + service: + name: search-service + port: + number: 80 + - path: /api + pathType: Prefix + backend: + service: + name: metadata-service + port: + number: 80 + - path: / + pathType: Prefix + backend: + service: + name: ui + port: + number: 80 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-upload + annotations: {{ toYaml .Values.ingress.annotations.upload | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} {{- end }} - namespace: {{ $.Values.namespace }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /api/upload + pathType: Prefix + backend: + service: + name: upload-service + port: + number: 80 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-dashboard + annotations: {{ toYaml .Values.ingress.annotations.secure | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} + {{- end }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /admin/dashboard + pathType: Prefix + backend: + service: + name: search-db-dashboard + port: + number: 5601 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-rewrite-api + annotations: {{ toYaml .Values.ingress.annotations.rewriteApi | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} + {{- end }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /api/broker/(.*) + pathType: ImplementationSpecific + backend: + service: + name: broker-service + port: + number: 15672 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-rewrite-root + annotations: {{ toYaml .Values.ingress.annotations.rewriteRoot | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} + {{- end }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /admin/broker/(.*) + pathType: ImplementationSpecific + backend: + service: + name: broker-service + port: + number: 15672 + - path: /admin/storage + pathType: ImplementationSpecific + backend: + service: + name: storageservice-s3 + port: + number: 9000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-rewrite-root-secure + annotations: {{ toYaml .Values.ingress.annotations.rewriteRoot | nindent 4 }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} + {{- end }} + rules: + - host: {{ .Values.hostname }} + http: + paths: + - path: /api/auth/(.*) + pathType: ImplementationSpecific + backend: + service: + name: auth-service + port: + number: 443 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: dbrepo-ingress-pid + annotations: {{ toYaml .Values.ingress.annotations.rewritePid | nindent 4 }} + namespace: {{ .Values.namespace }} spec: - ingressClassName: nginx - {{- if .tls }} + ingressClassName: {{ .Values.ingress.className }} + {{- if .Values.ingress.tls.enabled }} tls: - {{- range .tls }} - hosts: - - "{{ $.Values.hostname }}" - secretName: {{ .secretName }} - {{- end }} + - {{ .Values.hostname }} + secretName: {{ .Values.ingress.tls.secretName }} {{- end }} rules: - {{- range .hosts }} - - host: "{{ $.Values.hostname }}" - http: - paths: - {{- range .paths }} - - path: {{ .path }} - pathType: {{ .pathType }} - backend: - service: - name: {{ .serviceName }} - port: - number: {{ .portNumber }} - {{- end}} - {{- end}} -{{- end}} -{{- end}} \ No newline at end of file + - host: {{ .Values.hostname }} + http: + paths: + - path: /pid/(.*) + pathType: ImplementationSpecific + backend: + service: + name: metadata-service + port: + number: 80 \ No newline at end of file diff --git a/helm-charts/dbrepo/templates/metadata-service/deployment.yaml b/helm-charts/dbrepo/templates/metadata-service/deployment.yaml index a98e89cb6e89f17f2112aa93aab394b8aad6b35b..6dfab3ed21a13ac970b7423124f3555a17eb3dca 100644 --- a/helm-charts/dbrepo/templates/metadata-service/deployment.yaml +++ b/helm-charts/dbrepo/templates/metadata-service/deployment.yaml @@ -4,14 +4,14 @@ apiVersion: apps/v1 kind: Deployment metadata: name: metadata-service - namespace: {{ $.Values.namespace }} + namespace: {{ .Values.namespace }} labels: app: metadata-service service: metadata-service spec: replicas: {{ .Values.metadataService.replicaCount }} strategy: - type: {{ $.Values.strategyType }} + type: {{ .Values.strategyType }} selector: matchLabels: app: metadata-service @@ -29,7 +29,7 @@ spec: runAsGroup: 1000 containers: - name: metadata-service - image: {{ printf "%s/%s:%s" .Values.metadataService.image.registry .Values.metadataService.image.repository .Values.metadataService.image.tag }} + image: {{ .Values.metadataService.image.name }} imagePullPolicy: {{ .Values.metadataService.image.pullPolicy | default "IfNotPresent" }} securityContext: runAsUser: 1000 diff --git a/helm-charts/dbrepo/templates/search-db/certificate.yaml b/helm-charts/dbrepo/templates/search-db/certificate.yaml deleted file mode 100644 index 0099f0afddaacddfe7fd45c7555c4a2b1cf22caa..0000000000000000000000000000000000000000 --- a/helm-charts/dbrepo/templates/search-db/certificate.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: search-db - namespace: {{ .Values.namespace }} -spec: - isCA: false - duration: 2160h # 90d - renewBefore: 360h # 15d - commonName: search-db - secretName: search-db-cert - privateKey: - algorithm: RSA - encoding: PKCS8 - size: 2048 - usages: - - server auth - - client auth - issuerRef: - name: selfsigned-cluster-issuer - kind: ClusterIssuer - group: cert-manager.io \ No newline at end of file diff --git a/helm-charts/dbrepo/templates/search-db/secret.yaml b/helm-charts/dbrepo/templates/search-db/secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a7cd1d0d424a38fc491afa465ae0cde7b705cd91 --- /dev/null +++ b/helm-charts/dbrepo/templates/search-db/secret.yaml @@ -0,0 +1,79 @@ +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/tls +metadata: + name: search-db-cert + namespace: {{ .Values.namespace }} +data: + tls.crt: | + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0akNDQWNxZ0F3SUJBZ0lSQVAvcFJoaFQ5 + SFVWaUFzYitybmJjdkV3RFFZSktvWklodmNOQVFFTEJRQXcKRkRFU01CQUdBMVVFQXhNSmMyVmhj + bU5vTFdSaU1CNFhEVEkwTURRd056RTRORFEwT0ZvWERUSTBNRGN3TmpFNApORFEwT0Zvd0ZERVNN + QkFHQTFVRUF4TUpjMlZoY21Ob0xXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DCkFROEFN + SUlCQ2dLQ0FRRUFzb3lTWTduV3J0MTRVQjNST0kwOWRtMVNSU2lDZ2hQYVhwRlJTMjhjalpNSUFz + TUoKR2ZwREZ5VktOQ3pTV0VZN0J2M1JpOHlrRnlZNkpFb2p0S3oxdk9GNnNyQ2JYZnhsY1NiZDk3 + UVYwdU9IYTZKRApsWGN2aUJEKzN2ZTB0K0MzRGFPSFVMY1liVWkzS2xOS3FwTDU1Q2ZNeTYzdU4z + a21zekRwTjVycWhOYnBlVTAxCnd2NFZNaldNZ3RlU1VpWDNqeU1EcUFOa1B3UXFiYnZHN0hBUm54 + Q0QvMHJFeEVvRjNqRCtGV01XbEVjdXR1VGkKbFJ5QnN3L1FLTWd0aVJVSFJXYUJGK2ZES0wxSUoz + YVhmcDR5bmNhL2tCR3pxVGpqb3dJb2R0MEdOZjBFa1QyQgpTWG9hZGtwdVptT2JiVDF2UmN1T1BH + UEZjWVd5Qm1ucS9adEorUUlEQVFBQm95OHdMVEFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFR + WUlLd1lCQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FR + RUFlUU4vaUsvRzhHbGt5R0w1NjlrZnBiWEE2bE8vRHFObGlXRkgrY2ZIZ0NzYWxKMWVSSjliY1RZ + dgo0S3Y0MDlWUWpCbVg0WTRqMUt6R1ZnYkZaZkh1Ry9Nb0dzWVVnQ1VjTm94ZThtM0ZUcjRwYnZT + MXNUV0V4cGFNCkpSMURQQmNMV0o3MndTQzBkRFpISC9hVVNSMUs4UGpnMWtaMVRINTdvZDJoNWpJ + RUFhZkd1ZGhzejVpWlZQcVkKR1lrakZhRklVeXpjWkxUbjFBNXRwSlpTRmhxZHZGQmFndURUYkp4 + NmROVWZVc0sxZXFuaThSQVN6L3dPbHQwcQpSckExbVdCTEI1NW9XRzh4ZXZicmtNNUNuSWVvL2hS + SG83cE1pUFQxWE5uT2cvNjhmZEc4T0lXMFFhNjdMVEZnCnU2dTkxQ1BmVk5KVHQ5bmlZWHJ4N1hl + SEJ2dW1iUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + ca.crt: | + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0akNDQWNxZ0F3SUJBZ0lSQVAvcFJoaFQ5 + SFVWaUFzYitybmJjdkV3RFFZSktvWklodmNOQVFFTEJRQXcKRkRFU01CQUdBMVVFQXhNSmMyVmhj + bU5vTFdSaU1CNFhEVEkwTURRd056RTRORFEwT0ZvWERUSTBNRGN3TmpFNApORFEwT0Zvd0ZERVNN + QkFHQTFVRUF4TUpjMlZoY21Ob0xXUmlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DCkFROEFN + SUlCQ2dLQ0FRRUFzb3lTWTduV3J0MTRVQjNST0kwOWRtMVNSU2lDZ2hQYVhwRlJTMjhjalpNSUFz + TUoKR2ZwREZ5VktOQ3pTV0VZN0J2M1JpOHlrRnlZNkpFb2p0S3oxdk9GNnNyQ2JYZnhsY1NiZDk3 + UVYwdU9IYTZKRApsWGN2aUJEKzN2ZTB0K0MzRGFPSFVMY1liVWkzS2xOS3FwTDU1Q2ZNeTYzdU4z + a21zekRwTjVycWhOYnBlVTAxCnd2NFZNaldNZ3RlU1VpWDNqeU1EcUFOa1B3UXFiYnZHN0hBUm54 + Q0QvMHJFeEVvRjNqRCtGV01XbEVjdXR1VGkKbFJ5QnN3L1FLTWd0aVJVSFJXYUJGK2ZES0wxSUoz + YVhmcDR5bmNhL2tCR3pxVGpqb3dJb2R0MEdOZjBFa1QyQgpTWG9hZGtwdVptT2JiVDF2UmN1T1BH + UEZjWVd5Qm1ucS9adEorUUlEQVFBQm95OHdMVEFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFR + WUlLd1lCQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FR + RUFlUU4vaUsvRzhHbGt5R0w1NjlrZnBiWEE2bE8vRHFObGlXRkgrY2ZIZ0NzYWxKMWVSSjliY1RZ + dgo0S3Y0MDlWUWpCbVg0WTRqMUt6R1ZnYkZaZkh1Ry9Nb0dzWVVnQ1VjTm94ZThtM0ZUcjRwYnZT + MXNUV0V4cGFNCkpSMURQQmNMV0o3MndTQzBkRFpISC9hVVNSMUs4UGpnMWtaMVRINTdvZDJoNWpJ + RUFhZkd1ZGhzejVpWlZQcVkKR1lrakZhRklVeXpjWkxUbjFBNXRwSlpTRmhxZHZGQmFndURUYkp4 + NmROVWZVc0sxZXFuaThSQVN6L3dPbHQwcQpSckExbVdCTEI1NW9XRzh4ZXZicmtNNUNuSWVvL2hS + SG83cE1pUFQxWE5uT2cvNjhmZEc4T0lXMFFhNjdMVEZnCnU2dTkxQ1BmVk5KVHQ5bmlZWHJ4N1hl + SEJ2dW1iUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + tls.key: | + LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZB + QVNDQktjd2dnU2pBZ0VBQW9JQkFRQ3lqSkpqdWRhdTNYaFEKSGRFNGpUMTJiVkpGS0lLQ0U5cGVr + VkZMYnh5Tmt3Z0N3d2taK2tNWEpVbzBMTkpZUmpzRy9kR0x6S1FYSmpvawpTaU8wclBXODRYcXlz + SnRkL0dWeEp0MzN0QlhTNDRkcm9rT1ZkeStJRVA3ZTk3UzM0TGNObzRkUXR4aHRTTGNxClUwcXFr + dm5rSjh6THJlNDNlU2F6TU9rM211cUUxdWw1VFRYQy9oVXlOWXlDMTVKU0pmZVBJd09vQTJRL0JD + cHQKdThic2NCR2ZFSVAvU3NURVNnWGVNUDRWWXhhVVJ5NjI1T0tWSElHekQ5QW95QzJKRlFkRlpv + RVg1OE1vdlVnbgpkcGQrbmpLZHhyK1FFYk9wT09PakFpaDIzUVkxL1FTUlBZRkplaHAyU201bVk1 + dHRQVzlGeTQ0OFk4VnhoYklHCmFlcjltMG41QWdNQkFBRUNnZ0VCQUtPZ3A5ZTB5OFhkT1JGVEFo + WXRlaEk2QlpkVGxLYll3dHEvbWh6amF1dGoKdjRlb2JZTGRFdmIzT1pXdkxlV3dGeEJGTS9CR1Rt + cllvWmY0U2RpZVdXWUx6WUpNejFYR3BNQ1p1Zm56azd4OAp2L0luOW4vWGhqdlFONExteHp0c09O + WEs4NHRKQUozR2NmWGI5eVZ6SklldTRjUVhWYVNJNXFwNVBJRzArdzlZCnk2NTFWZkZJQUd3SmRI + QlpId1lmQUdxbU5oVlo3MDc4TVUxQWU2Y2VkZjJ0RnlWYW5ScXBLUFZ1Z0tGQy9kRG8KVXJIMHRJ + ajFkU3RKRGxucHJ3YVYrMDRkUDBvZnlBc09ablp3VXRzZE8vM1ZMMWR4bCtIT1dGeUpvSjI1dkF2 + eAp5ZW5qc0dzd1pJRW1oUzM0NVRVTlFNbTJzYnJtYklMS1dpWEp5SmlEeWdFQ2dZRUF4QUNEbWxG + ZmsxZDlkSmJTCi90NDRGTzFiUVQ2b1Z2VWJ2NGMwcnRLVVhwTnFlajNmbXl4bUJINm82SkhoYjNO + eXdWa3U0QW9YTXBFTkhISDAKNlN2TzBYM2U1MU8xOXppQ25hMGdoZExSS3JIS3ZqbzRNdmdiV3Ey + Z3NJNmpJQkxTcU0zNXNxTjhGRXRVZko4TQpKRUZIMThJTThTRjEyQ2hWYjVWaThTTDgvY2tDZ1lF + QTZUUmhVQi9nQVM1RmN5V1NHNGR4UWtHWG03R1lSamFrCjJVWUlOUUIyV2d2Qk9vN2tvV21nR1M0 + eE9YanJsZ2NrMmhsTEhZSXAycnRoSWdNMUdBQUdqa2lYeXJPVE9kaGQKeUJ0RjBMS0kvVjlBZUxK + eExkRDBYalB0WThIYXdTcW8weGdxUml2RzlJUFBlSGZ6SmlraXV6enNOT3pjVlk1aApkZktqZy9J + eVFyRUNnWUJ1c0dlaDk4Q0ZBa3pNVWZ6NGlHQ2RtT29ITDY1NzVWSjFXSkx0QStsY2U5NFBDUEJG + CnZzNGlUYkZ3SGlwMCtYcmVMRkpubmVzNTJHYlNJSjBTTFhaUUlzaUdWV1VYSjZmRUNpaXF5c0xy + WEpyRjBUVTUKdTVvZkhKejUrS094RWxBN21vOGdUbWxkUUttRzgzODAzbFVIU1FSc0ROeHpaVnZT + ZDBmNExDMDUyUUtCZ0h0YQpzNmJZVlhzS2FMNFJ2NGxFU1lxTWU0OWxqM0NFY3dwaTJ2QitRQnc5 + WDRhRUV6ZTJVWE5BVmRWYXV2THU4SFZWCkw4QjZHMzJSNUQxRGlSQWE0MXpiMVQ3cFloVVU5L1pq + UnJpdjEzcCtxZkd1SWVQa1JYNlc1UmtCYjU4QjI2OWQKZHU4TE5RQWR3TjZ1UkRXSlNNL1YxL1Bl + M21WN0hONXc3RUZkR1d6aEFvR0FiN29HOWhoTGxTL212bEhHVE11egp6SXhtSTBaTisyZGFqNEYy + MDZHRGJYaUkwYUtFTHlteVJkcEZYcStzaWpaTzFqdXU4WDhMS0FCOUVaeEtXRzRICjNnQWoxWGFF + QXFjNjFkaFkveHRHUDR2OXN3UElmVjR3NGtTUHBWYlFFd3ZIcko4K1V2NjhuOTZTU3dkK1BBNisK + OFFwUEVYSXlscXB4UlFyMnN5amhoOTQ9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K \ No newline at end of file diff --git a/helm-charts/dbrepo/templates/search-service/deployment.yaml b/helm-charts/dbrepo/templates/search-service/deployment.yaml index c4d24647fa79da0d6c8bd7f03460c29bb0305c34..30a0441b1540019c3875431e2d8d42ede696610f 100644 --- a/helm-charts/dbrepo/templates/search-service/deployment.yaml +++ b/helm-charts/dbrepo/templates/search-service/deployment.yaml @@ -4,14 +4,14 @@ apiVersion: apps/v1 kind: Deployment metadata: name: search-service - namespace: {{ $.Values.namespace }} + namespace: {{ .Values.namespace }} labels: app: search-service service: search-service spec: - replicas: {{ .Values.metadataService.replicaCount }} + replicas: {{ .Values.searchService.replicaCount }} strategy: - type: {{ $.Values.strategyType }} + type: {{ .Values.strategyType }} selector: matchLabels: app: search-service @@ -29,7 +29,7 @@ spec: runAsGroup: 1000 containers: - name: search-service - image: {{ printf "%s/%s:%s" .Values.searchService.image.registry .Values.searchService.image.repository .Values.searchService.image.tag }} + image: {{ .Values.searchService.image.name }} imagePullPolicy: {{ .Values.searchService.image.pullPolicy | default "IfNotPresent" }} ports: - containerPort: 4000 diff --git a/helm-charts/dbrepo/templates/secret.yaml b/helm-charts/dbrepo/templates/secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5761aaa774f7d7a702910dd9b7a809c7c694b171 --- /dev/null +++ b/helm-charts/dbrepo/templates/secret.yaml @@ -0,0 +1,80 @@ +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/tls +metadata: + name: ingress-cert + namespace: {{ .Values.namespace }} +stringData: + tls.crt: | + -----BEGIN CERTIFICATE----- + MIIDaTCCAlGgAwIBAgIUYxgRGsKNKfiSV85hfTqO7Fe2EJIwDQYJKoZIhvcNAQEL + BQAwOTELMAkGA1UEBhMCQVQxEzARBgNVBAoMCkFjbWUsIEluYy4xFTATBgNVBAMM + DEFjbWUgUm9vdCBDQTAeFw0yNDA0MDgwODA5MDRaFw0yNTA0MDgwODA5MDRaMDUx + CzAJBgNVBAYTAkFUMQ8wDQYDVQQKDAZEQlJlcG8xFTATBgNVBAMMDGRicmVwby5s + b2NhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJheX3oMZ9VnAj0u + ta4mAQmoEDVu//N5jDZi3F2L1gItBXTZP46d37iaCNgAkKO6ct8KIO7zAm/Hdhtz + 1DB/5UJqJSvikGQKBidjw0lenqE7aqt2qbWk45yXxIEQbmpMkdUrsyJVLLaKLAaA + Nx9m3bdb4Kaxtu6QKtrrifz8+dpUcJPmvzzDB+39kKHchj7HjtSNhIy+nG3EiLRM + nG6qpWMlVEnK2SU1YT1p2s3WaA9sl8djVy3L6MKg+I0lchXjV9udnGs8GzPmHKrz + KpTMpmkkNQZaULXyes9lZ0jPMvVrrGQzsZDjGtdpCBUhdeIoZ+EkdbZPtXtGM6oO + PFWHWvECAwEAAaNtMGswKQYDVR0RBCIwIIIMZGJyZXBvLmxvY2FsghB3d3cuZGJy + ZXBvLmxvY2FsMB0GA1UdDgQWBBR3+I9W+gtANK3PM7ex24aD2fKb9TAfBgNVHSME + GDAWgBR1+iIlDzeK4jVdxyDwzkY02tdXQDANBgkqhkiG9w0BAQsFAAOCAQEAGeI2 + RaUqMuorjl6xeo5iB5jrr0w6ixPYYH7L7rbcJaUfYLo2oeUxU3hxOKxRktxKRtpa + Inv81K7HwtruGYH1w9u0d3Le73WdesrLrq0yJgagkkEyuX+o7NH25rMjZdcrhSOl + Rx3rbAARN4mt4CSPZY2+6HPi7YnTKO14QK/fnJazWJz1Y5ECYEabdhj/HTyZg2ea + ZsZFq2DkBbmm8yGUWPfISABvrkwb9ustY9ei7aCy3edgExyRNmDo0bVQYz+LM0CD + j2+OSsWAzsjPMIhp4cl4kFiPntVOUPo1nQmxhyGm2O24cuddUKQhMo1EWgye2+ag + TyOmunmGfT3NQbF5JQ== + -----END CERTIFICATE----- + ca.crt: | + -----BEGIN CERTIFICATE----- + MIIDUzCCAjugAwIBAgIUU7IwC5g71hQaIaYa7DoE0lMfCqcwDQYJKoZIhvcNAQEL + BQAwOTELMAkGA1UEBhMCQVQxEzARBgNVBAoMCkFjbWUsIEluYy4xFTATBgNVBAMM + DEFjbWUgUm9vdCBDQTAeFw0yNDA0MDgwODA5MDRaFw0yNTA0MDgwODA5MDRaMDkx + CzAJBgNVBAYTAkFUMRMwEQYDVQQKDApBY21lLCBJbmMuMRUwEwYDVQQDDAxBY21l + IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDP39vc/O3l + DS37eTLGqEDROrJPC3ajNc3u/y/4XKsTwbTGC7pctkJ4juwmEMVKLDBIYgeEj+LU + FFAC/sz9SmocPLm+vgIFtimKquqDQQaXbxcU5R86nS+sWsATwU+W8pOGdHLlE1ff + e9yetOFrTX1bJvtAb6cF3wa56uvolTgXX2ivPu4Nen15740SqHy7Nt/ZEE6lKrwD + umAf5i8+aTAYidVjtg14ON1SLCy+WCp8z32q+rij5MCtRft6XFN222x3vZnrSSdL + JZ92l6+a8Lorz+ZHV59Rcbe8rQcjp5U50B8VMZzQwDp+M57TvdxIoeIzBzOE8h2G + LbiDYk8bHch1AgMBAAGjUzBRMB0GA1UdDgQWBBR1+iIlDzeK4jVdxyDwzkY02tdX + QDAfBgNVHSMEGDAWgBR1+iIlDzeK4jVdxyDwzkY02tdXQDAPBgNVHRMBAf8EBTAD + AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBvFMB9MKO8TNJ7zHuCupuYF7hgGXs/P/9x + PlfmDI+4r1GugRgW1lSpMCtoMJwQ7inVOv9qqxSQXwerfJxadkf3tMcZdD3DiYSP + kk+7TNvfmZB8GBGcvYkga8lGOqSAQyeZ+NVOeemjP4cHgnWvo+UqwQoyEZmlR7B5 + M1J7JSftE/JAu9O0ECEDhP/xHqF4GEB81U+Lpsb/uqUscUYsFwU0O8hf3ZTEtoUF + FMf89u+xw2tPOjGZ2MTJmsPzMDfq0RNqLdVOZ/Gua+xZkkmG0B68YcD9XUM4Be+J + OJy2Rz6yROMLh+Lvj4pz3rRbmZdK16fCtvZymr+vDACSrfGnSFLW + -----END CERTIFICATE----- + tls.key: | + -----BEGIN PRIVATE KEY----- + MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYXl96DGfVZwI9 + LrWuJgEJqBA1bv/zeYw2Ytxdi9YCLQV02T+Ond+4mgjYAJCjunLfCiDu8wJvx3Yb + c9Qwf+VCaiUr4pBkCgYnY8NJXp6hO2qrdqm1pOOcl8SBEG5qTJHVK7MiVSy2iiwG + gDcfZt23W+CmsbbukCra64n8/PnaVHCT5r88wwft/ZCh3IY+x47UjYSMvpxtxIi0 + TJxuqqVjJVRJytklNWE9adrN1mgPbJfHY1cty+jCoPiNJXIV41fbnZxrPBsz5hyq + 8yqUzKZpJDUGWlC18nrPZWdIzzL1a6xkM7GQ4xrXaQgVIXXiKGfhJHW2T7V7RjOq + DjxVh1rxAgMBAAECggEAQuMO07OVc1NkYrpaDAhn5TbPYr2HA3lkqU1Nwo0L1emw + nwJtiaxZVR7dagEZfZ5wJeQ639pyw+ISQWvgBqhmWnjhN3oee6QA3pLHXDJ6vXmp + UnrldjVbq9bd7vBpICXb0PH9kcFFPx65w+LOD+1mwELHhDW4gdJs1ayXZyUgg4xn + c6H6tfzba/cFqiJKBqE6Gy+xrVFb/2StMzYKLwxirb5iKs5GsEys1/msASxQ+E6z + Wcvsh+xtpWbfQUh2e1a+/tDTw/NtLeCsoH56162OJE/QjB84R4yrCFqQndOekQXr + aMixrS3Gh4/hl5Ht4mGqsekjPTINM87twPV5PcM2bwKBgQDH0vZEaqHiNPlo7/CX + qJqPuXc/jEIOAf50HaAC3MUWoI6yLE8ornyv17i2OOSUIek+w5qTtH/XFn5UhDGD + 2rd0v+dHPJZ93LyfXNmQvCRQN6YcQxW8oOrR6ygbTkDpwCB7qrbukMAXZolVgTL4 + 4vWpyd5176GJ25H1cQ3UePTg+wKBgQDDNB2D+Rg22V75evB5IAtBpxFwYGobeYv6 + YlB9bHuu+tD4rR/qp1IgErcOVmC0ONTRurRTX83Il5I3HkVyF7EcFWaEw3J/Qcxs + Bwqk9FdT+7hvcRk2oTJUszIN1Xl0uoKuSW4TTfLQWkprCS4VvPMnjrZn3ZdGpRKy + tiLzncyoAwKBgQC0FzyeMqBNl8LEwaLLfEg4ikWf/0+1AjUK/3wruD7kgrW4fNim + 6IM1k61EhYf0vY9SYsXYow+okPwwPafGlwNKdH4DpOZY7u0Mj4kBuZ7csRrDU+6u + PzUDFfXijidQxDhCXHxcDBcjv+S8LCH9T8dqS6Z0EhE7hqlIVKjLOmwwqwKBgQCk + hxqRj7RvFovMb2icTvvt3CkAtOL6QVpQMelxrawZ8eGMmC8ckubPjbao6PkdLgGC + vIEc/NTvy4E739HctkdbSlZcdHfe9tCcBNtd6WxppvLvSz5bI0bOyTLZIiL61fEr + gUy8DKkqH9A1o0kqnVW887aemNDWhG/cHVQcTdafjQKBgFlrd+bDq1e+QVkkq6Lm + IbNQvs4Oab/gFduj4+YNEsh2h6tBOHOuLP5+V0RRci9u2leBMVNXjcx/r7q/HUQJ + DEDLIkO1m9mOf73e2sbWijQPr1yRi2JWwqTBOrsR1wrzXpNieCkhtTxI86WYOln/ + vIZCvz34aOw/2/fApGuBVid1 + -----END PRIVATE KEY----- diff --git a/helm-charts/dbrepo/templates/ui/deployment.yaml b/helm-charts/dbrepo/templates/ui/deployment.yaml index 4269189a18bffe8d9eff1a846f5866d8086bb5fe..47a0217ad501de5c2b6a5d2d511911f7cbece75b 100644 --- a/helm-charts/dbrepo/templates/ui/deployment.yaml +++ b/helm-charts/dbrepo/templates/ui/deployment.yaml @@ -11,7 +11,7 @@ metadata: spec: replicas: {{ .Values.ui.replicaCount }} strategy: - type: {{ $.Values.strategyType }} + type: {{ .Values.strategyType }} selector: matchLabels: app: ui @@ -29,7 +29,7 @@ spec: runAsGroup: 1000 containers: - name: ui - image: {{ printf "%s/%s:%s" .Values.ui.image.registry .Values.ui.image.repository .Values.ui.image.tag }} + image: {{ .Values.ui.image.name }} imagePullPolicy: {{ .Values.ui.image.pullPolicy | default "IfNotPresent" }} ports: - containerPort: 3000 diff --git a/helm-charts/dbrepo/templates/ui/secret.yaml b/helm-charts/dbrepo/templates/ui/secret.yaml index f316a289b65c8fa120b9bff41e60da930f3a5377..2c9713d0cc20b9922f7f96529ef1c816024c7d97 100644 --- a/helm-charts/dbrepo/templates/ui/secret.yaml +++ b/helm-charts/dbrepo/templates/ui/secret.yaml @@ -1,3 +1,4 @@ +{{ $api := printf "https://%s" .Values.hostname }} --- apiVersion: v1 kind: Secret @@ -5,8 +6,8 @@ metadata: name: ui-secret namespace: {{ .Values.namespace }} stringData: - public-api-client: "{{ .Values.ui.public.api.client }}" - public-api-server: "{{ .Values.ui.public.api.server }}" + public-api-client: "{{ .Values.ui.public.api.client | default $api }}" + public-api-server: "{{ .Values.ui.public.api.server | default $api }}" public-title: "{{ .Values.ui.public.title }}" public-logo: "{{ .Values.ui.public.logo }}" public-icon: "{{ .Values.ui.public.icon }}" diff --git a/helm-charts/dbrepo/templates/ui/service.yaml b/helm-charts/dbrepo/templates/ui/service.yaml index 676c28992501fbb21fbdcd560ec2a9be7b47e98e..1abb5c65593b2550f4e739a3710bc8af3f33bbd7 100644 --- a/helm-charts/dbrepo/templates/ui/service.yaml +++ b/helm-charts/dbrepo/templates/ui/service.yaml @@ -10,7 +10,7 @@ metadata: spec: type: ClusterIP ports: - - name: "nuxt" + - name: "" port: 80 targetPort: 3000 protocol: TCP diff --git a/helm-charts/dbrepo/test.sh b/helm-charts/dbrepo/test.sh new file mode 100755 index 0000000000000000000000000000000000000000..6c4c5a61793e5f57612e390cc281614b1d114d7c --- /dev/null +++ b/helm-charts/dbrepo/test.sh @@ -0,0 +1,22 @@ +#!/bin/bash +NAMESPACE=dbrepo + +echo "Waiting for containers to start ..." +SUCCESS=0 +for i in 0 1 2 3 4 5 6 7 8 9; do + RES=$(kubectl -n ${NAMESPACE} get pods | awk 'NR>1 {print $3}' | grep -qF "[^Running|^Completed]") + if [ "$?" -ne 0 ]; then + if [ $SUCCESS -eq 0 ]; then + echo "INFO: all pods started or completed: wait another iteration ..." + sleep 30 + SUCCESS=1 + continue + fi + echo "INFO: all pods started or completed" + exit 0 + fi + echo "Waiting ..." + sleep 30 +done +echo "ERROR: some pods did not successfully complete or are still running" +exit 1 \ No newline at end of file diff --git a/helm-charts/dbrepo/values.yaml b/helm-charts/dbrepo/values.yaml index 0bdc219f286fb6e6d56335077bc6e4a36387ff2f..b1f1d0f68e182765cee53ad5eba50d03c30ce30f 100644 --- a/helm-charts/dbrepo/values.yaml +++ b/helm-charts/dbrepo/values.yaml @@ -1,6 +1,6 @@ -namespace: "" +namespace: dbrepo -hostname: "" +hostname: dbrepo.local strategyType: RollingUpdate @@ -30,10 +30,8 @@ metadataDb: loadBalancerIP: "" loadBalancerSourceRanges: [ ] persistence: - enabled: false - size: 10Gi - storageClass: default - replicaCount: 3 # uneven 3,5,7 + enabled: true + replicaCount: 1 # uneven 3,5,7 authService: fullnameOverride: auth-service @@ -47,7 +45,7 @@ authService: extraStartupArgs: "--import-realm" tls: enabled: true - existingSecret: dbrepo-ingress-tls-cert + existingSecret: ingress-cert usePem: true metrics: enabled: true @@ -69,7 +67,7 @@ authService: extraVolumeMounts: - name: config-map mountPath: /opt/bitnami/keycloak/data/import - replicaCount: 2 + replicaCount: 1 authDb: fullnameOverride: auth-db @@ -81,6 +79,7 @@ authDb: password: metrics # implicit requirement for metrics container repmgrPassword: repmgr # implicit requirement for rolling updates database: keycloak + replicaCount: 1 pgpool: adminUsername: admin adminPassword: admin @@ -92,9 +91,8 @@ authDb: loadBalancerIP: "" loadBalancerSourceRanges: [ ] persistence: - enabled: false + enabled: true size: 10Gi - storageClass: default dataDb: fullnameOverride: data-db @@ -112,8 +110,8 @@ dataDb: password: mariabackup sidecars: - name: sidecar - image: s210.dl.hpc.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.1 - imagePullPolicy: Always + image: dbrepo-data-db-sidecar:latest + imagePullPolicy: Never securityContext: runAsUser: 1001 runAsGroup: 1001 @@ -150,11 +148,9 @@ dataDb: persistentVolumeClaim: claimName: data-db-shared persistence: - enabled: false + enabled: true size: 10Gi - storageClass: default - sharedStorageClass: default - replicaCount: 3 # uneven + replicaCount: 1 # uneven searchdb: fullnameOverride: search-db @@ -165,12 +161,13 @@ searchdb: password: admin clusterName: search-db masterService: search-db + replicas: 1 image: debug: false sysctlInit: enabled: true persistence: - enabled: false + enabled: true size: 10Gi service: type: ClusterIP @@ -237,8 +234,8 @@ searchDbDashboard: opensearchHosts: http://search-db:9200 extraInitContainers: - name: init - image: s210.dl.hpc.tuwien.ac.at/dbrepo/search-db-init:1.4.1 - imagePullPolicy: Always + image: dbrepo-search-db-init:latest + imagePullPolicy: Never env: - name: OPENSEARCH_HOST value: http://search-db:9200 @@ -253,11 +250,11 @@ searchDbDashboard: extraVolumes: - name: tls secret: - secretName: dbrepo-ingress-tls-cert + secretName: ingress-cert - name: config secret: secretName: search-db-dashboard-secret - replicaCount: 2 + replicaCount: 1 uploadService: enabled: true @@ -265,7 +262,7 @@ uploadService: registry: docker.io repository: tusproject/tusd tag: v1.12 - replicaCount: 2 + replicaCount: 1 brokerService: fullnameOverride: broker-service @@ -284,7 +281,7 @@ brokerService: enabled: false sslOptionsVerify: true failIfNoPeerCert: true - existingSecret: dbrepo-ingress-tls-cert + existingSecret: ingress-cert username: broker password: broker extraConfiguration: |- @@ -330,29 +327,24 @@ brokerService: persistence: enabled: false size: 5Gi - storageClass: default service: type: ClusterIP # loadBalancerIP: - replicaCount: 3 + replicaCount: 1 analyseService: enabled: true image: - registry: s210.dl.hpc.tuwien.ac.at - repository: dbrepo/analyse-service - tag: "1.4.1" - pullPolicy: Always + name: dbrepo-analyse-service:latest + pullPolicy: Never debug: false - replicaCount: 2 + replicaCount: 1 metadataService: enabled: true image: - registry: s210.dl.hpc.tuwien.ac.at - repository: dbrepo/metadata-service - tag: "1.4.1" - pullPolicy: Always + name: dbrepo-metadata-service:latest + pullPolicy: Never debug: false adminEmail: noreply@example.com authService: @@ -370,39 +362,35 @@ metadataService: mirror: 60 obtainMetadata: 60 deleteStaleQueries: 60 - replicaCount: 2 + replicaCount: 1 dataService: enabled: true image: - registry: s210.dl.hpc.tuwien.ac.at - repository: dbrepo/data-service - tag: "1.4.1" - pullPolicy: Always + name: dbrepo-data-service:latest + pullPolicy: Never debug: false jwt: pubkey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB" consumerConcurrentMin: 1 consumerConcurrentMax: 5 requeueRejected: false - replicaCount: 2 + replicaCount: 1 searchService: enabled: true image: - registry: s210.dl.hpc.tuwien.ac.at - repository: dbrepo/search-service - tag: "1.4.1" - pullPolicy: Always + name: dbrepo-search-service:latest + pullPolicy: Never debug: false - replicaCount: 2 + replicaCount: 1 storageservice: master: enabled: true filer: enabled: true - replicas: 2 + replicas: 1 enablePVC: false storage: 25Gi s3: @@ -414,7 +402,7 @@ storageservice: existingConfigSecret: seaweedfs-s3-secret volume: enabled: true - replicas: 2 + replicas: 1 s3: enabled: true replicas: 2 @@ -463,14 +451,13 @@ logservice: ui: enabled: true image: - registry: s210.dl.hpc.tuwien.ac.at - repository: dbrepo/ui - tag: "1.4.1" - pullPolicy: Always + name: dbrepo-ui:latest + pullPolicy: Never + debug: false public: api: - client: http://example.com - server: http://example.com + client: {} + server: {} title: "Database Repository" logo: "/logo.svg" icon: "/favicon.ico" @@ -489,7 +476,7 @@ ui: doi: enabled: false endpoint: https://doi.org - replicaCount: 2 + replicaCount: 1 extraVolumes: [ ] # - name: images-map # configMap: @@ -500,115 +487,32 @@ ui: # subPath: logo.svg ingress: - enabled: false - data: - - name: ingress - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - hosts: - - paths: - - path: /api/analyse - pathType: Prefix - serviceName: analyse-service - portNumber: 80 - - path: /api/search - pathType: Prefix - serviceName: search-service - portNumber: 80 - - path: /api - pathType: Prefix - serviceName: metadata-service - portNumber: 80 - - path: / - pathType: Prefix - serviceName: ui - portNumber: 80 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-upload - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/proxy-body-size: 2G - hosts: - - paths: - - path: /api/upload - pathType: Prefix - serviceName: upload-service - portNumber: 80 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-secure - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/force-ssl-redirect: "true" - nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" - hosts: - - paths: - - path: /admin/dashboard - pathType: Prefix - serviceName: search-db-dashboard - portNumber: 5601 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-api - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: /api/$1 - hosts: - - paths: - - path: /api/broker/(.*) - pathType: ImplementationSpecific - serviceName: broker-service - portNumber: 15672 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-root - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: /$1 - hosts: - - paths: - - path: /admin/broker/(.*) - pathType: ImplementationSpecific - serviceName: broker-service - portNumber: 15672 - - path: /admin/storage - pathType: ImplementationSpecific - serviceName: storageservice-s3 - portNumber: 9000 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-root-secure - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/force-ssl-redirect: "true" - nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: /$1 - hosts: - - paths: - - path: /api/auth/(.*) - pathType: ImplementationSpecific - serviceName: auth-service - portNumber: 443 - - path: /retrieve/(.*) - pathType: ImplementationSpecific - serviceName: search-db - portNumber: 9200 - tls: - - secretName: dbrepo-ingress-tls-cert - - name: ingress-pid - annotations: - cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer - nginx.ingress.kubernetes.io/use-regex: "true" - nginx.ingress.kubernetes.io/rewrite-target: /api/pid/$1 - hosts: - - paths: - - path: /pid/(.*) - pathType: ImplementationSpecific - serviceName: metadata-service - portNumber: 80 - tls: - - secretName: dbrepo-ingress-tls-cert + enabled: true + className: nginx + tls: + enabled: true + secretName: ingress-cert + annotations: + basic: {} +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + secure: +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" + upload: +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + nginx.ingress.kubernetes.io/proxy-body-size: 2G + rewriteApi: +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: /api/$1 + rewriteRoot: +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" + nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: /$1 + rewritePid: +# cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/rewrite-target: /api/pid/$1 diff --git a/lib/python/pyproject.toml b/lib/python/pyproject.toml index 6dfae10925cfb7d47f9d0272d5ab59ddb884bcc1..0fa56b601c5987c5669bb7dda35e0fdf75be029e 100644 --- a/lib/python/pyproject.toml +++ b/lib/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dbrepo" -version = "__APPVERSION__" +version = "1.4.2rc5" description = "DBRepo Python Library" keywords = [ "DBRepo", diff --git a/lib/python/setup.py b/lib/python/setup.py index 5f1c4834b46c22caf88fb61ba1169fc7c690d092..3f03bf8a3ae8e9f2a03307dfda64d5e855336648 100644 --- a/lib/python/setup.py +++ b/lib/python/setup.py @@ -2,7 +2,7 @@ from distutils.core import setup setup(name="dbrepo", - version="__APPVERSION__", + version="1.4.2rc5", description="A library for communicating with DBRepo", url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo//", author="Martin Weise", diff --git a/mkdocs.yml b/mkdocs.yml index ae7381505ab5ae8f8d24f5a0baec68f02ff23f3b..d669b11c5447f015fc4bdb9aba369eeb35efe072 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -36,6 +36,10 @@ nav: - Authentication Service: usage-authentication.md - Storage Service: usage-storage.md - Upload Service: usage-upload.md + - Development: + - Overview: dev-overview.md + - Application Guide: dev-guide-app.md + - Infrastructure Guide: dev-guide-infra.md - publications.md - contact.md extra_css: @@ -86,6 +90,8 @@ markdown_extensions: - admonition - pymdownx.details - pymdownx.superfences + - pymdownx.tasklist: + custom_checkbox: true - pymdownx.tabbed: alternate_style: true - toc: diff --git a/mweise.pub b/mweise.pub new file mode 100644 index 0000000000000000000000000000000000000000..2f5df75ff68baccd821674c4e5b0f58b0f2007b8 --- /dev/null +++ b/mweise.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/X32mLb7EfwTKbpJmW2BN6ouGLYUZnzL+PY/9RpDZn60UMZ3awRzHQOIQj92KvH0vegkgfZvxCcDQN1vOQP4NbfN0hQFTHOBElGQMrl/Lwicw896js+OUOqPjKUMP35jlZSKvheLd6MPbmXyJpW4gXrEC7NOtswLTBjDDPV6ypyFngjA78vlVE4ZPjKN09eoBbhuvQunJSPaTBxnBexFF5LRfvPC8cITMzjjO/tBHsRUFJ7vy+TCPBTM5YsF257aZTMaG3RvDplmYKwJ8WLWr3eVbyO/LUelXaUjDfJ3z7B06m0dVbEXX/oHq3hZNXmJdovKefeOygZX8Rf62M9h2oCE2LxfyvA+R9rDu5oLqrzTLolWVGTM6AmEj5HtSbqO0WDhpy8a67z6qPR0HoCXVsIYtKrzNAqB/u7OWAsy285wfDpquouLGbEETUFUJmMOba9cTSYMbEmWksa/KckbCPnx4qRstL2lDENylT3WHuhbIx0zv4TVo4/gHJGuOYuE= mweise@medusa