From 807a0bfd1fbb43b9b5e143ce6ad3a1c04b747528 Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Fri, 28 Mar 2025 16:08:43 +0100 Subject: [PATCH] OZG-7906 set up server --- aggregation-manager-server/pom.xml | 80 +++++ .../src/main/helm/.helmignore | 23 ++ .../src/main/helm/Chart.yaml | 30 ++ .../src/main/helm/templates/_helpers.tpl | 114 +++++++ .../templates/configmap_bindings_type.yaml | 32 ++ .../src/main/helm/templates/deployment.yaml | 116 +++++++ .../main/helm/templates/network_policy.yaml | 73 +++++ .../src/main/helm/templates/service.yaml | 41 +++ .../main/helm/templates/service_account.yaml | 31 ++ .../main/helm/templates/service_monitor.yaml | 43 +++ .../src/main/helm/values.yaml | 47 +++ .../AggregationManagerApplication.java | 40 +++ .../src/main/resources/application-local.yml | 13 + .../src/main/resources/application.yml | 28 ++ .../src/test/helm-linter-values.yaml | 29 ++ .../test/helm/deployment_63_char_test.yaml | 55 ++++ .../test/helm/deployment_resources_test.yaml | 61 ++++ .../src/test/helm/deployment_test.yaml | 291 ++++++++++++++++++ .../src/test/helm/network_policy_test.yaml | 230 ++++++++++++++ .../src/test/helm/service_account_test.yaml | 63 ++++ .../src/test/helm/service_monitor_test.yaml | 84 +++++ .../src/test/helm/service_test.yaml | 81 +++++ pom.xml | 1 + run_helm_test_aggregation_server.sh | 32 ++ 24 files changed, 1638 insertions(+) create mode 100644 aggregation-manager-server/pom.xml create mode 100644 aggregation-manager-server/src/main/helm/.helmignore create mode 100644 aggregation-manager-server/src/main/helm/Chart.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/_helpers.tpl create mode 100644 aggregation-manager-server/src/main/helm/templates/configmap_bindings_type.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/deployment.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/network_policy.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/service.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/service_account.yaml create mode 100644 aggregation-manager-server/src/main/helm/templates/service_monitor.yaml create mode 100644 aggregation-manager-server/src/main/helm/values.yaml create mode 100644 aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/AggregationManagerApplication.java create mode 100644 aggregation-manager-server/src/main/resources/application-local.yml create mode 100644 aggregation-manager-server/src/main/resources/application.yml create mode 100644 aggregation-manager-server/src/test/helm-linter-values.yaml create mode 100644 aggregation-manager-server/src/test/helm/deployment_63_char_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/deployment_resources_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/deployment_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/network_policy_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/service_account_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/service_monitor_test.yaml create mode 100644 aggregation-manager-server/src/test/helm/service_test.yaml create mode 100755 run_helm_test_aggregation_server.sh diff --git a/aggregation-manager-server/pom.xml b/aggregation-manager-server/pom.xml new file mode 100644 index 0000000..51420dc --- /dev/null +++ b/aggregation-manager-server/pom.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + Ministerpräsidenten des Landes Schleswig-Holstein + Staatskanzlei + Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + + Lizenziert unter der EUPL, Version 1.2 oder - sobald + diese von der Europäischen Kommission genehmigt wurden - + Folgeversionen der EUPL ("Lizenz"); + Sie dürfen dieses Werk ausschließlich gemäß + dieser Lizenz nutzen. + Eine Kopie der Lizenz finden Sie hier: + + https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + + Sofern nicht durch anwendbare Rechtsvorschriften + gefordert oder in schriftlicher Form vereinbart, wird + die unter der Lizenz verbreitete Software "so wie sie + ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + ausdrücklich oder stillschweigend - verbreitet. + Die sprachspezifischen Genehmigungen und Beschränkungen + unter der Lizenz sind dem Lizenztext zu entnehmen. + +--> +<project xmlns="https://maven.apache.org/POM/4.0.0" + xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>de.ozgcloud.aggregation</groupId> + <artifactId>aggregation-manager-parent</artifactId> + <version>1.3.0-SNAPSHOT</version> + <relativePath>../</relativePath> + </parent> + <artifactId>aggregation-manager-server</artifactId> + <name>OZG-Cloud Aggregation Manager Job</name> + + <properties> + <spring-boot.build-image.imageName>docker.ozg-sh.de/aggregation-manager-server:build-latest</spring-boot.build-image.imageName> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <mainClass>de.ozgcloud.aggregation.AggregationManagerApplication</mainClass> + <image> + <env> + <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS> + <BPE_APPEND_JAVA_TOOL_OPTIONS>-Dfile.encoding=UTF-8</BPE_APPEND_JAVA_TOOL_OPTIONS> + </env> + </image> + </configuration> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + </plugin> + <plugin> + <groupId>com.mycila</groupId> + <artifactId>license-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/.helmignore b/aggregation-manager-server/src/main/helm/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/aggregation-manager-server/src/main/helm/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/aggregation-manager-server/src/main/helm/Chart.yaml b/aggregation-manager-server/src/main/helm/Chart.yaml new file mode 100644 index 0000000..a4ac9f3 --- /dev/null +++ b/aggregation-manager-server/src/main/helm/Chart.yaml @@ -0,0 +1,30 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +apiVersion: v1 +appVersion: "1.0" +description: OZG-Cloud Helm chart for aggregation-manager-server +name: aggregation-manager-server +version: 0.0.0-MANAGED-BY-JENKINS +icon: https://simpleicons.org/icons/helm.svg diff --git a/aggregation-manager-server/src/main/helm/templates/_helpers.tpl b/aggregation-manager-server/src/main/helm/templates/_helpers.tpl new file mode 100644 index 0000000..9f2c1fc --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/_helpers.tpl @@ -0,0 +1,114 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + + +{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} +{{/* Namespace */}} +{{- define "app.namespace" -}} +{{- if gt (len (.Release.Namespace)) 63 -}} +{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} +{{- end -}} +{{ printf "%s" .Release.Namespace }} +{{- end -}} + +{{/* Chart: Name + Version */}} +{{- define "app.chart" -}} +{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} +{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} +{{- end -}} +{{ printf "%s-%s" .Chart.Name .Chart.Version }} +{{- end -}} + +{{/* Managed-by -> On Helm, this value is always Helm */}} +{{- define "app.managedBy" -}} +{{- if gt (len (.Release.Service)) 63 -}} +{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} +{{- end -}} +{{ printf "%s" .Release.Service }} +{{- end -}} + + +{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} +{{- define "app.defaultLabels" }} +app.kubernetes.io/instance: aggregation-manager-server +app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} +app.kubernetes.io/name: {{ .Release.Name }} +app.kubernetes.io/namespace: {{ include "app.namespace" . }} +app.kubernetes.io/part-of: ozgcloud +app.kubernetes.io/version: {{ .Chart.Version }} +helm.sh/chart: {{ include "app.chart" . }} +ozgcloud-mongodb-client: "true" +{{- end -}} + +{{- define "app.matchLabels" }} +app.kubernetes.io/name: {{ .Release.Name }} +app.kubernetes.io/namespace: {{ include "app.namespace" . }} +{{- end -}} + + +{{- define "app.envSpringProfiles" }} +{{- if (.Values.env).overrideSpringProfiles -}} +{{ printf "%s" (.Values.env).overrideSpringProfiles }} +{{- else -}} +{{ printf "oc, %s" (include "app.ozgcloudEnvironment" . ) }} +{{- end -}} +{{- end -}} + +{{- define "app.ozgcloudEnvironment" -}} +{{- required "Environment muss angegeben sein" (.Values.ozgcloud).environment -}} +{{- end -}} + +{{- define "app.grpcClientVorgangManagerAddress" -}} +{{- if (.Values.env).grpcClientVorgangManagerAddress -}} +{{ printf "%s" (.Values.env).grpcClientVorgangManagerAddress }} +{{- else -}} +{{ printf "dns:///%s.%s:9090" ( coalesce .Values.vorgangManagerName "vorgang-manager" ) (include "app.namespace" . ) }} +{{- end -}} +{{- end -}} + +{{- define "app.getCustomList" -}} +{{- with (.Values.env).customList -}} +{{- if kindIs "map" . -}} +{{ include "app.dictToList" . }} +{{- else if kindIs "slice" . -}} +{{ . | toYaml }} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "app.dictToList" -}} +{{- $customList := list -}} +{{- range $key, $value := . -}} +{{- $customList = append $customList (dict "name" $key "value" $value) }} +{{- end -}} +{{- $customList | toYaml -}} +{{- end -}} + +{{- define "app.getOzgcloudAdministrationAddress" -}} +{{- if .Values.administrationAddress -}} +{{ printf "%s" .Values.administrationAddress }} +{{- else -}} +{{ printf "http://%s.%s:8080" .Values.administrationName .Release.Namespace }} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/templates/configmap_bindings_type.yaml b/aggregation-manager-server/src/main/helm/templates/configmap_bindings_type.yaml new file mode 100644 index 0000000..6acf2ce --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/configmap_bindings_type.yaml @@ -0,0 +1,32 @@ +# +# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +apiVersion: v1 +kind: ConfigMap +metadata: + name: bindings-type + namespace: {{ include "app.namespace" . }} +data: + type: | + ca-certificates \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/templates/deployment.yaml b/aggregation-manager-server/src/main/helm/templates/deployment.yaml new file mode 100644 index 0000000..f8e7c6b --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/deployment.yaml @@ -0,0 +1,116 @@ +# +# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} +spec: + progressDeadlineSeconds: 600 + replicas: {{ .Values.replicaCount }} + revisionHistoryLimit: 10 + selector: + matchLabels: + {{- include "app.matchLabels" . | indent 6 }} + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + {{- include "app.defaultLabels" . | indent 8 }} + component: aggregation-manager-server + spec: + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: kubernetes.io/hostname + whenUnsatisfiable: ScheduleAnyway + labelSelector: + matchLabels: + app.kubernetes.io/name: {{ .Release.Name }} + containers: + - name: aggregation-manager-server + image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" + imagePullPolicy: Always + env: + - name: SERVICE_BINDING_ROOT + value: "/bindings" + - name: spring_profiles_active + value: {{ include "app.envSpringProfiles" . }} + ports: + - containerPort: 8081 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /actuator/health/readiness + port: 8081 + scheme: HTTP + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + startupProbe: + httpGet: + path: /actuator/health/readiness + port: 8081 + scheme: HTTP + failureThreshold: 10 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + {{- with .Values.resources }} +{{ toYaml . | indent 10 }} + {{- end }} + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: false + stdin: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + tty: true + volumeMounts: + - name: bindings + mountPath: "/bindings/ca-certificates/type" + subPath: type + readOnly: true + volumes: + - name: bindings + configMap: + name: bindings-type + dnsConfig: { } + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: { } + terminationGracePeriodSeconds: 30 diff --git a/aggregation-manager-server/src/main/helm/templates/network_policy.yaml b/aggregation-manager-server/src/main/helm/templates/network_policy.yaml new file mode 100644 index 0000000..66f7b05 --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/network_policy.yaml @@ -0,0 +1,73 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +{{- if not (.Values.networkPolicy).disabled }} +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: network-policy-aggregation-manager-server + namespace: {{ include "app.namespace" . }} +spec: + podSelector: + matchLabels: + component: aggregation-manager-server + policyTypes: + - Ingress + - Egress + ingress: + - from: + - namespaceSelector: + matchLabels: + name: {{ (.Values.networkPolicy).monitoringNamespace | default "openshift-user-workload-monitoring" }} + ports: + - protocol: TCP + port: 8081 +{{- with (.Values.networkPolicy).additionalIngressConfigLocal }} +{{ toYaml . | indent 2 }} +{{- end }} +{{- with (.Values.networkPolicy).additionalIngressConfigGlobal }} +{{ toYaml . | indent 2 }} +{{- end }} + egress: + - to: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: {{ required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace }} + ports: + - port: 53 + protocol: UDP + - port: 53 + protocol: TCP + - port: 5353 + protocol: UDP + - port: 5353 + protocol: TCP +{{- with (.Values.networkPolicy).additionalEgressConfigLocal }} +{{ toYaml . | indent 2 }} +{{- end }} +{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }} +{{ toYaml . | indent 2 }} +{{- end }} + +{{- end }} \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/templates/service.yaml b/aggregation-manager-server/src/main/helm/templates/service.yaml new file mode 100644 index 0000000..55d72c4 --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/service.yaml @@ -0,0 +1,41 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} + component: aggregation-manager-server-service +spec: + type: ClusterIP + ports: + - name: metrics + port: 8081 + protocol: TCP + selector: + {{- include "app.matchLabels" . | indent 4 }} + component: aggregation-manager-server diff --git a/aggregation-manager-server/src/main/helm/templates/service_account.yaml b/aggregation-manager-server/src/main/helm/templates/service_account.yaml new file mode 100644 index 0000000..02ff46e --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/service_account.yaml @@ -0,0 +1,31 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +{{- if (.Values.serviceAccount).create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Values.serviceAccount.name }} + namespace: {{ include "app.namespace" . }} +{{- end }} \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/templates/service_monitor.yaml b/aggregation-manager-server/src/main/helm/templates/service_monitor.yaml new file mode 100644 index 0000000..102cf41 --- /dev/null +++ b/aggregation-manager-server/src/main/helm/templates/service_monitor.yaml @@ -0,0 +1,43 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} + component: aggregation-manager-server-service-monitor +spec: + endpoints: + - port: metrics + path: /actuator/prometheus + namespaceSelector: + matchNames: + - {{ include "app.namespace" . }} + selector: + matchLabels: + {{- include "app.matchLabels" . | indent 6 }} + component: aggregation-manager-server-service \ No newline at end of file diff --git a/aggregation-manager-server/src/main/helm/values.yaml b/aggregation-manager-server/src/main/helm/values.yaml new file mode 100644 index 0000000..f4eb0eb --- /dev/null +++ b/aggregation-manager-server/src/main/helm/values.yaml @@ -0,0 +1,47 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +image: + repo: docker.ozg-sh.de + name: aggregation-manager-server + tag: latest + +ozgcloud: + environment: + +database: + useExternal: false + databaseName: aggregation-manager-database + secretName: ozg-mongodb-admin-aggregation-manager-user + tls: + enabled: false + secretName: ozg-mongodb-tls-cert + +serviceAccount: + create: true + name: aggregation-manager-server-service-account + +imagePullSecret: "" + +replicaCount: 1 diff --git a/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/AggregationManagerApplication.java b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/AggregationManagerApplication.java new file mode 100644 index 0000000..882c75f --- /dev/null +++ b/aggregation-manager-server/src/main/java/de/ozgcloud/aggregation/AggregationManagerApplication.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.aggregation; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan({ "de.ozgcloud.*" }) +@ConfigurationPropertiesScan("de.ozgcloud.*") +public class AggregationManagerApplication { + + public static void main(String[] args) { + SpringApplication.run(AggregationManagerApplication.class, args); + } + +} \ No newline at end of file diff --git a/aggregation-manager-server/src/main/resources/application-local.yml b/aggregation-manager-server/src/main/resources/application-local.yml new file mode 100644 index 0000000..fe32e63 --- /dev/null +++ b/aggregation-manager-server/src/main/resources/application-local.yml @@ -0,0 +1,13 @@ +logging: + level: + ROOT: WARN + '[de.ozgcloud]': DEBUG + config: classpath:log4j2-local.xml + +spring: + data: + mongodb: + host: localhost + port: 27017 + database: aggregation-manager-land + diff --git a/aggregation-manager-server/src/main/resources/application.yml b/aggregation-manager-server/src/main/resources/application.yml new file mode 100644 index 0000000..b62baf8 --- /dev/null +++ b/aggregation-manager-server/src/main/resources/application.yml @@ -0,0 +1,28 @@ +logging: + level: + ROOT: WARN + '[de.ozgcloud]': INFO, + '[org.springframework.security]': WARN + +management: + server: + port: 8081 + health: + livenessState: + enabled: true + readinessState: + enabled: true + endpoint: + health: + group: + exploratory: + include: livenessState,readinessState,ping + show-details: always + probes: + enabled: true + prometheus: + enabled: true + endpoints: + web: + exposure: + include: health,prometheus diff --git a/aggregation-manager-server/src/test/helm-linter-values.yaml b/aggregation-manager-server/src/test/helm-linter-values.yaml new file mode 100644 index 0000000..5024cc9 --- /dev/null +++ b/aggregation-manager-server/src/test/helm-linter-values.yaml @@ -0,0 +1,29 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +ozgcloud: + environment: dev + +networkPolicy: + dnsServerNamespace: dummy-dns diff --git a/aggregation-manager-server/src/test/helm/deployment_63_char_test.yaml b/aggregation-manager-server/src/test/helm/deployment_63_char_test.yaml new file mode 100644 index 0000000..39f12c1 --- /dev/null +++ b/aggregation-manager-server/src/test/helm/deployment_63_char_test.yaml @@ -0,0 +1,55 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test deployment less than 63 chars +release: + name: aggregation-manager-server + namespace: aggregation-manager-server + +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: dev + imagePullSecret: image-pull-secret + +tests: + - it: should fail on .Release.Namespace length longer than 63 characters + release: + namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Release.Namespace length less than 63 characters + asserts: + - notFailedTemplate: {} + - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters + chart: + version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Chart.Name-.Chart.Version aggregation-manager-server-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Chart.Name-.Chart.Version length less than 63 characters + asserts: + - notFailedTemplate: {} diff --git a/aggregation-manager-server/src/test/helm/deployment_resources_test.yaml b/aggregation-manager-server/src/test/helm/deployment_resources_test.yaml new file mode 100644 index 0000000..90f47f1 --- /dev/null +++ b/aggregation-manager-server/src/test/helm/deployment_resources_test.yaml @@ -0,0 +1,61 @@ +# +# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: deployment_resources_test +release: + name: aggregation-manager-server + namespace: aggregation-manager-server +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: test + imagePullSecret: image-pull-secret +tests: + - it: validate container resources + set: + resources: + limits: + cpu: "11m" + memory: "22Mi" + requests: + cpu: "33m" + memory: "44Mi" + asserts: + - equal: + path: spec.template.spec.containers[0].resources.limits.cpu + value: "11m" + - equal: + path: spec.template.spec.containers[0].resources.limits.memory + value: "22Mi" + - equal: + path: spec.template.spec.containers[0].resources.requests.cpu + value: "33m" + - equal: + path: spec.template.spec.containers[0].resources.requests.memory + value: "44Mi" + - it: test empty resources + asserts: + - isEmpty: + path: spec.template.spec.containers[0].resources diff --git a/aggregation-manager-server/src/test/helm/deployment_test.yaml b/aggregation-manager-server/src/test/helm/deployment_test.yaml new file mode 100644 index 0000000..6b70a10 --- /dev/null +++ b/aggregation-manager-server/src/test/helm/deployment_test.yaml @@ -0,0 +1,291 @@ +# +# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: deployment_test +release: + name: aggregation-manager-server + namespace: aggregation-manager-server +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: dev + imagePullSecret: image-pull-secret +tests: + - it: validate deployment root configuration + asserts: + - isAPIVersion: + of: apps/v1 + - isKind: + of: Deployment + - it: validate metadata + asserts: + - equal: + path: metadata.name + value: aggregation-manager-server + - equal: + path: metadata.namespace + value: aggregation-manager-server + - equal: + path: metadata.labels["app.kubernetes.io/instance"] + value: aggregation-manager-server + - equal: + path: metadata.labels["app.kubernetes.io/name"] + value: aggregation-manager-server + - equal: + path: metadata.labels["app.kubernetes.io/namespace"] + value: aggregation-manager-server + - equal: + path: metadata.labels["app.kubernetes.io/part-of"] + value: ozgcloud + - equal: + path: metadata.labels["app.kubernetes.io/version"] + value: 0.0.0-MANAGED-BY-JENKINS + - equal: + path: metadata.labels["helm.sh/chart"] + value: aggregation-manager-server-0.0.0-MANAGED-BY-JENKINS + - it: validate spec root configuration + asserts: + - equal: + path: spec.progressDeadlineSeconds + value: 600 + - equal: + path: spec.replicas + value: 1 + - equal: + path: spec.revisionHistoryLimit + value: 10 + - it: validate spec selector + asserts: + - equal: + path: spec.selector.matchLabels["app.kubernetes.io/name"] + value: aggregation-manager-server + - equal: + path: spec.selector.matchLabels["app.kubernetes.io/namespace"] + value: aggregation-manager-server + - it: validate rolling updates + asserts: + - equal: + path: spec.strategy.rollingUpdate.maxSurge + value: 1 + - equal: + path: spec.strategy.rollingUpdate.maxUnavailable + value: 0 + - equal: + path: spec.strategy.type + value: RollingUpdate + - it: validate spec template metadata + asserts: + - equal: + path: spec.template.metadata.labels.component + value: aggregation-manager-server + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/instance"] + value: aggregation-manager-server + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/name"] + value: aggregation-manager-server + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/namespace"] + value: aggregation-manager-server + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/part-of"] + value: ozgcloud + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/version"] + value: 0.0.0-MANAGED-BY-JENKINS + - equal: + path: spec.template.metadata.labels["helm.sh/chart"] + value: aggregation-manager-server-0.0.0-MANAGED-BY-JENKINS + - it: validate spec template spec topology spread constraints + asserts: + - equal: + path: spec.template.spec.topologySpreadConstraints[0].maxSkew + value: 1 + - equal: + path: spec.template.spec.topologySpreadConstraints[0].topologyKey + value: kubernetes.io/hostname + - equal: + path: spec.template.spec.topologySpreadConstraints[0].whenUnsatisfiable + value: ScheduleAnyway + - equal: + path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"] + value: aggregation-manager-server + - it: validate containers environment + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: SERVICE_BINDING_ROOT + value: "/bindings" + - it: validate image name + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: "docker.ozg-sh.de/aggregation-manager-server:latest" + - isAPIVersion: + of: apps/v1 + - it: validate image pull policy + asserts: + - equal: + path: spec.template.spec.containers[0].imagePullPolicy + value: Always + - it: validate container name + asserts: + - equal: + path: spec.template.spec.containers[0].name + value: aggregation-manager-server + - it: validate container ports + asserts: + - equal: + path: spec.template.spec.containers[0].ports[0].containerPort + value: 8081 + - equal: + path: spec.template.spec.containers[0].ports[0].name + value: "metrics" + - equal: + path: spec.template.spec.containers[0].ports[0].protocol + value: "TCP" + - it: validate readiness probe + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 3 + - equal: + path: spec.template.spec.containers[0].readinessProbe.httpGet.path + value: /actuator/health/readiness + - equal: + path: spec.template.spec.containers[0].readinessProbe.httpGet.port + value: 8081 + - equal: + path: spec.template.spec.containers[0].readinessProbe.httpGet.scheme + value: HTTP + - equal: + path: spec.template.spec.containers[0].readinessProbe.periodSeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].readinessProbe.successThreshold + value: 1 + - equal: + path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds + value: 3 + - it: validate startup probe + asserts: + - equal: + path: spec.template.spec.containers[0].startupProbe.failureThreshold + value: 10 + - equal: + path: spec.template.spec.containers[0].startupProbe.httpGet.path + value: /actuator/health/readiness + - equal: + path: spec.template.spec.containers[0].startupProbe.httpGet.port + value: 8081 + - equal: + path: spec.template.spec.containers[0].startupProbe.httpGet.scheme + value: HTTP + - equal: + path: spec.template.spec.containers[0].startupProbe.failureThreshold + value: 10 + - equal: + path: spec.template.spec.containers[0].startupProbe.initialDelaySeconds + value: 30 + - equal: + path: spec.template.spec.containers[0].startupProbe.periodSeconds + value: 10 + - equal: + path: spec.template.spec.containers[0].startupProbe.successThreshold + value: 1 + - equal: + path: spec.template.spec.containers[0].startupProbe.timeoutSeconds + value: 5 + - it: validate container security context + asserts: + - equal: + path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.privileged + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem + value: false + - equal: + path: spec.template.spec.containers[0].securityContext.runAsNonRoot + value: false + - it: validate container volume mounts + asserts: + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].name + value: bindings + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].mountPath + value: "/bindings/ca-certificates/type" + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].subPath + value: type + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].readOnly + value: true + - it: validate volumes + asserts: + - equal: + path: spec.template.spec.volumes[0].name + value: bindings + - equal: + path: spec.template.spec.volumes[0].configMap.name + value: bindings-type + - it: validate container root config + asserts: + - equal: + path: spec.template.spec.containers[0].stdin + value: true + - equal: + path: spec.template.spec.containers[0].terminationMessagePath + value: /dev/termination-log + - equal: + path: spec.template.spec.containers[0].terminationMessagePolicy + value: File + - equal: + path: spec.template.spec.containers[0].tty + value: true + - it: validate spec template spec root config + asserts: + - equal: + path: spec.template.spec.dnsConfig + value: {} + - equal: + path: spec.template.spec.dnsPolicy + value: ClusterFirst + - equal: + path: spec.template.spec.restartPolicy + value: Always + - equal: + path: spec.template.spec.schedulerName + value: default-scheduler + - equal: + path: spec.template.spec.securityContext + value: {} + - equal: + path: spec.template.spec.terminationGracePeriodSeconds + value: 30 diff --git a/aggregation-manager-server/src/test/helm/network_policy_test.yaml b/aggregation-manager-server/src/test/helm/network_policy_test.yaml new file mode 100644 index 0000000..ac8acb0 --- /dev/null +++ b/aggregation-manager-server/src/test/helm/network_policy_test.yaml @@ -0,0 +1,230 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: network policy aggregation-manager-server test +release: + name: aggregation-manager-server + namespace: by-helm-test +templates: + - templates/network_policy.yaml + +tests: + - it: should match apiVersion + set: + networkPolicy: + dnsServerNamespace: kube-system + asserts: + - isAPIVersion: + of: networking.k8s.io/v1 + - it: should match kind + set: + networkPolicy: + dnsServerNamespace: kube-system + asserts: + - isKind: + of: NetworkPolicy + - it: validate metadata + set: + networkPolicy: + dnsServerNamespace: kube-system + asserts: + - equal: + path: metadata + value: + name: network-policy-aggregation-manager-server + namespace: by-helm-test + - it: validate spec + set: + networkPolicy: + dnsServerNamespace: kube-system + asserts: + - equal: + path: spec + value: + egress: + - ports: + - port: 53 + protocol: UDP + - port: 53 + protocol: TCP + - port: 5353 + protocol: UDP + - port: 5353 + protocol: TCP + to: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: kube-system + ingress: + - from: + - namespaceSelector: + matchLabels: + name: openshift-user-workload-monitoring + ports: + - port: 8081 + protocol: TCP + podSelector: + matchLabels: + component: aggregation-manager-server + policyTypes: + - Ingress + - Egress + + - it: add ingress rule by values local + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + additionalIngressConfigLocal: + - from: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + from: + - podSelector: + matchLabels: + component: client2 + + - it: set ingress monitoring namespace rule + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + monitoringNamespace: monitoring + asserts: + - contains: + path: spec.ingress + content: + from: + - namespaceSelector: + matchLabels: + name: "monitoring" + ports: + - protocol: TCP + port: 8081 + - it: add ingress rule by values global + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + additionalIngressConfigGlobal: + - from: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + from: + - podSelector: + matchLabels: + component: client2 + + - it: add ingress rule by values global + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + additionalIngressConfigGlobal: + - from: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + from: + - podSelector: + matchLabels: + component: client2 + + - it: add egress rule by values local + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + additionalIngressConfigLocal: + - to: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + to: + - podSelector: + matchLabels: + component: client2 + + - it: add egress rule by values global + set: + networkPolicy: + dnsServerNamespace: test-namespace-dns + additionalIngressConfigGlobal: + - to: + - podSelector: + matchLabels: + component: client2 + asserts: + - contains: + path: spec.ingress + content: + to: + - podSelector: + matchLabels: + component: client2 + + - it: test network policy disabled + set: + networkPolicy: + disabled: true + asserts: + - hasDocuments: + count: 0 + + - it: test network policy unset should be disabled + set: + networkPolicy: + disabled: false + dnsServerNamespace: test-dns-server-namespace + asserts: + - hasDocuments: + count: 1 + - it: test network policy dnsServerNamespace must be set message + set: + networkPolicy: + disabled: false + asserts: + - failedTemplate: + errorMessage: networkPolicy.dnsServerNamespace must be set + + - it: test network policy should be enabled by default + set: + networkPolicy: + dnsServerNamespace: test-dns-server-namespace + asserts: + - hasDocuments: + count: 1 diff --git a/aggregation-manager-server/src/test/helm/service_account_test.yaml b/aggregation-manager-server/src/test/helm/service_account_test.yaml new file mode 100644 index 0000000..865a883 --- /dev/null +++ b/aggregation-manager-server/src/test/helm/service_account_test.yaml @@ -0,0 +1,63 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test service account +release: + name: aggregation-manager-server + namespace: sh-helm-test +templates: + - templates/service_account.yaml +tests: + - it: should create service account with default name + asserts: + - isKind: + of: ServiceAccount + - isAPIVersion: + of: v1 + - equal: + path: metadata.name + value: aggregation-manager-server-service-account + - equal: + path: metadata.namespace + value: sh-helm-test + - it: should set service account with name + set: + serviceAccount: + name: helm-service-account + asserts: + - isKind: + of: ServiceAccount + - equal: + path: metadata.name + value: helm-service-account + - equal: + path: metadata.namespace + value: sh-helm-test + - it: should not create service account + set: + serviceAccount: + create: false + asserts: + - hasDocuments: + count: 0 diff --git a/aggregation-manager-server/src/test/helm/service_monitor_test.yaml b/aggregation-manager-server/src/test/helm/service_monitor_test.yaml new file mode 100644 index 0000000..cc66c4a --- /dev/null +++ b/aggregation-manager-server/src/test/helm/service_monitor_test.yaml @@ -0,0 +1,84 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test service_monitor +release: + name: aggregation-manager-server + namespace: sh-helm-test +templates: + - templates/service_monitor.yaml +tests: + - it: should have basic info and the label component with value aggregation-manager-server-service-monitor attached + asserts: + - isKind: + of: ServiceMonitor + - isAPIVersion: + of: monitoring.coreos.com/v1 + - equal: + path: metadata.name + value: aggregation-manager-server + - equal: + path: metadata.namespace + value: sh-helm-test + - equal: + path: metadata.labels["component"] + value: aggregation-manager-server-service-monitor + + - it: should contain default lables and component lables + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: aggregation-manager-server + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: aggregation-manager-server + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS + component: aggregation-manager-server-service-monitor + helm.sh/chart: aggregation-manager-server-0.0.0-MANAGED-BY-JENKINS + ozgcloud-mongodb-client: "true" + + - it: should have the metrics endpoint configured by default + asserts: + - contains: + path: spec.endpoints + content: + port: metrics + path: /actuator/prometheus + + - it: namespace selector should contain the namespace + asserts: + - contains: + path: spec.namespaceSelector.matchNames + content: sh-helm-test + + - it: selector should contain helm recommended labels name and namespace + asserts: + - equal: + path: spec.selector.matchLabels + value: + app.kubernetes.io/name: aggregation-manager-server + app.kubernetes.io/namespace: sh-helm-test + component: aggregation-manager-server-service diff --git a/aggregation-manager-server/src/test/helm/service_test.yaml b/aggregation-manager-server/src/test/helm/service_test.yaml new file mode 100644 index 0000000..95cc6af --- /dev/null +++ b/aggregation-manager-server/src/test/helm/service_test.yaml @@ -0,0 +1,81 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: service + +templates: + - templates/service.yaml +release: + name: aggregation-manager-server + namespace: helm-test + +tests: + - it: has expected document values + asserts: + - containsDocument: + kind: Service + apiVersion: v1 + name: aggregation-manager-server + namespace: helm-test + - it: should be of type ClusterIP + asserts: + - equal: + path: spec.type + value: ClusterIP + + - it: has metrics port + asserts: + - contains: + path: spec.ports + content: + name: metrics + port: 8081 + protocol: TCP + - it: should contain helm recommended labels name and namespace + asserts: + - equal: + path: spec.selector["app.kubernetes.io/name"] + value: aggregation-manager-server + - equal: + path: spec.selector["app.kubernetes.io/namespace"] + value: helm-test + - it: has selector component + asserts: + - equal: + path: spec.selector.component + value: aggregation-manager-server + - it: should contain default lables and component lables + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: aggregation-manager-server + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: aggregation-manager-server + app.kubernetes.io/namespace: helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS + component: aggregation-manager-server-service + helm.sh/chart: aggregation-manager-server-0.0.0-MANAGED-BY-JENKINS + ozgcloud-mongodb-client: "true" diff --git a/pom.xml b/pom.xml index ed5c50d..3478192 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,7 @@ <modules> <module>aggregation-manager-job</module> + <module>aggregation-manager-server</module> </modules> <properties> <ozgcloud.api-lib.version>0.18.0</ozgcloud.api-lib.version> diff --git a/run_helm_test_aggregation_server.sh b/run_helm_test_aggregation_server.sh new file mode 100755 index 0000000..e0130ad --- /dev/null +++ b/run_helm_test_aggregation_server.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + + +set -e + +helm template ./aggregation-manager-server/src/main/helm/ -f aggregation-manager-server/src/test/helm-linter-values.yaml +helm lint -f aggregation-manager-server/src/test/helm-linter-values.yaml ./aggregation-manager-server/src/main/helm/ +cd aggregation-manager-server/src/main/helm && helm unittest -f '../../test/helm/**/*test.yaml' . + -- GitLab