diff --git a/metabase/Jenkinsfile b/metabase/Jenkinsfile new file mode 100644 index 0000000000000000000000000000000000000000..393eeb73d8a146b0c2f65bdbb21bcc9d4f2b7746 --- /dev/null +++ b/metabase/Jenkinsfile @@ -0,0 +1,252 @@ +pipeline { + agent { + node { + label 'ozgcloud-jenkins-build-agent' + } + } + + environment { + BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/ozgcloud-app-metabase/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" + RELEASE_REGEX = /\d+.\d+.\d/ + SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/ + FAILED_STAGE = "" + SH_SUCCESS_STATUS_CODE = 0 + } + + options { + timeout(time: 1, unit: 'HOURS') + disableConcurrentBuilds() + buildDiscarder(logRotator(numToKeepStr: '5')) + } + + stages { + stage('Check Version') { + steps { + script { + FAILED_STAGE = env.STAGE_NAME + def helmChartVersion = getHelmChartVersion() + + if(isReleaseBranch()){ + if ( !(helmChartVersion ==~ RELEASE_REGEX) ) { + error("Keine Release Version für Branch ${env.BRANCH_NAME}.") + } + } else { + if ( !(helmChartVersion ==~ SNAPSHOT_REGEX) ) { + error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") + } + } + } + } + } + stage('Test HelmChart') { + steps { + script { + FAILED_STAGE=env.STAGE_NAME + dir('metabase') { + sh "./run_helm_test.sh" + } + } + } + } + + stage('Build HelmChart') { + steps { + script { + FAILED_STAGE=env.STAGE_NAME + HELM_CHART_VERSION = generateHelmChartBuildVersion() + + dir('metabase/src/main/helm') { + sh "helm package --version=${HELM_CHART_VERSION} ." + } + } + } + } + + stage('Deploy HelmChart') { + steps { + script { + FAILED_STAGE=env.STAGE_NAME + + dir('metabase/src/main/helm') { + deployHelmChart("metabase", HELM_CHART_VERSION) + } + } + } + } + + stage('Trigger Dev rollout') { + when { + branch 'master' + } + steps { + script { + FAILED_STAGE = env.STAGE_NAME + + cloneGitopsRepo() + + setNewDevVersion() + + pushDevGitopsRepo() + } + } + } + stage('Trigger Test rollout') { + when { + branch 'release' + } + + steps { + script { + FAILED_STAGE = env.STAGE_NAME + + cloneGitopsRepo() + + setNewTestVersion() + + pushTestGitopsRepo() + } + } + } + } + + post { + failure { + script { + if (isMasterBranch() || isReleaseBranch()) { + sendFailureMessage() + } + } + } + } +} + + +Boolean isReleaseBranch() { + return env.BRANCH_NAME == 'release' +} + +Boolean isMasterBranch() { + return env.BRANCH_NAME == 'master' +} + +void deployHelmChart(String helmChartName, String helmChartVersion) { + withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){ + if (isReleaseBranch()) { + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@'''+helmChartName+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true + } + else { + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@'''+helmChartName+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true + } + + if (result != '') { + error(result) + } + } +} + +String generateHelmChartBuildVersion() { + def chartVersion = getHelmChartVersion() + + if (isMasterBranch()) { + chartVersion += "-${env.GIT_COMMIT.take(7)}" + } + else if (!isReleaseBranch()) { + chartVersion += "-${env.BRANCH_NAME}" + } + + return chartVersion.replaceAll("_", "-") +} + + +Void configureGit() { + final email = "jenkins@ozg-sh.de" + final name = "jenkins" + + dir("gitops") { + sh "git config user.email '${email}'" + sh "git config user.name '${name}'" + } +} + +Void cloneGitopsRepo() { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git' + } + + configureGit() +} + +Void setNewDevVersion() { + setNewMatabaseGitopsVersion("dev") +} + +Void setNewTestVersion() { + setNewMatabaseGitopsVersion("test") +} + +Void setNewMatabaseGitopsVersion(String environment) { + dir("gitops") { + def envFile = "${environment}/application/values/metabase-values.yaml" + def envVersions = readYaml file: envFile + + envVersions.metabase.helm.version = HELM_CHART_VERSION + + writeYaml file: envFile, data: envVersions, overwrite: true + } +} + +Void pushDevGitopsRepo() { + pushNewGitopsVersion('dev') +} + +Void pushTestGitopsRepo() { + pushNewGitopsVersion('test') +} + +Void pushNewGitopsVersion(String environment) { + dir('gitops') { + if (!hasGitopsValuesFileChanged(environment)) { + return + } + + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + sh "git add ${environment}/application/values/metabase-values.yaml" + + sh "git commit -m 'jenkins rollout ${environment} metabase version ${HELM_CHART_VERSION}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git' + } + } +} + +Boolean hasGitopsValuesFileChanged(String environment) { + return sh (script: "git status | grep '${environment}/application/values/metabase-values.yaml'", returnStatus: true) == env.SH_SUCCESS_STATUS_CODE as Integer +} + +Void sendFailureMessage() { + def room = '' + def data = """{"msgtype":"m.text", \ + "body":"metabase: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \ + "format": "org.matrix.custom.html", \ + "formatted_body":"metabase: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}""" + + if (isMasterBranch()) { + room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de" + } + else if (isReleaseBranch()) { + room = "!oWZpUGTFsxkJIYNfYg:matrix.ozg-sh.de" + } + + sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${data}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/$room/send/m.room.message" +} + +String getElementAccessToken() { + withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) { + return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token + } +} + +String getHelmChartVersion() { + def chartEnv = readYaml file: "metabase/src/main/helm/Chart.yaml" + + return chartEnv.version +} \ No newline at end of file diff --git a/metabase/run_helm_test.sh b/metabase/run_helm_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..aafe0e7dd324a8e4764fad72362bc2d2039ae197 --- /dev/null +++ b/metabase/run_helm_test.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -e + +helm template ./src/main/helm/ -f src/test/helm-linter-values.yaml +helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/ +cd src/main/helm && helm unittest -f '../../test/helm/**/*test.yaml' . + diff --git a/metabase/src/main/helm/.helmignore b/metabase/src/main/helm/.helmignore new file mode 100644 index 0000000000000000000000000000000000000000..0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778 --- /dev/null +++ b/metabase/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/metabase/src/main/helm/Chart.yaml b/metabase/src/main/helm/Chart.yaml new file mode 100644 index 0000000000000000000000000000000000000000..269a3b3cb22a29a7beefee656d0f3c716c7105f0 --- /dev/null +++ b/metabase/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 metabase +name: metabase +version: 1.0.0-SNAPSHOT +icon: https://simpleicons.org/icons/helm.svg diff --git a/metabase/src/main/helm/templates/_helpers.tpl b/metabase/src/main/helm/templates/_helpers.tpl new file mode 100644 index 0000000000000000000000000000000000000000..56652d6f588ea68b3203e56437b7c069c816b359 --- /dev/null +++ b/metabase/src/main/helm/templates/_helpers.tpl @@ -0,0 +1,80 @@ + +{{/* 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: metabase +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.baseDomain" -}} +{{- printf "%s.%s" (include "app.ozgcloudBezeichner" .) (include "app.baseUrl" .) }} +{{- end -}} + +{{- define "app.ozgcloudBezeichner" -}} +{{- required "ozgcloud.bezeichner muss angegeben sein" (.Values.ozgcloud).bezeichner -}} +{{- if lt 46 (len (.Values.ozgcloud).bezeichner) -}} +{{ fail (printf "ozgcloud.bezeichner %s ist zu lang (max. 46 Zeichen)" (.Values.ozgcloud).bezeichner) }} +{{- end -}} +{{- end -}} + +{{- define "app.baseUrl" -}} +{{- required "baseUrl muss angegeben sein" .Values.baseUrl }} +{{- end -}} + +{{- define "app.serviceAccountName" -}} +{{ printf "%s" ( (.Values.serviceAccount).name | default "metabase-service-account" ) }} +{{- 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 -}} \ No newline at end of file diff --git a/metabase/src/main/helm/templates/deployment.yaml b/metabase/src/main/helm/templates/deployment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b15497c3a9eee0d491e8d998c27673975ed12141 --- /dev/null +++ b/metabase/src/main/helm/templates/deployment.yaml @@ -0,0 +1,160 @@ +# +# 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: 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: metabase + spec: + {{- if (.Values.serviceAccount).create }} + serviceAccountName: {{ include "app.serviceAccountName" . }} + {{- end }} + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: kubernetes.io/hostname + whenUnsatisfiable: ScheduleAnyway + labelSelector: + matchLabels: + {{- include "app.matchLabels" . | indent 12 }} + containers: + - env: + - name: MB_SETUP_TOKEN + valueFrom: + secretKeyRef: + name: setup-token-secret + key: MB_SETUP_TOKEN + optional: false + - name: MB_DB_FILE + value: {{ (.Values.dbFile).path }} + - name: MB_PROMETHEUS_SERVER_PORT + value: "8081" + {{- with include "app.getCustomList" . }} +{{ . | indent 10 }} + {{- end }} + image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" + imagePullPolicy: Always + name: metabase + ports: + - containerPort: 3000 + name: http + protocol: TCP + - containerPort: 8081 + name: metrics + protocol: TCP + + readinessProbe: + failureThreshold: 3 + httpGet: + path: /api/health + port: 3000 + scheme: HTTP + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + startupProbe: + httpGet: + path: /api/health + port: 3000 + scheme: HTTP + failureThreshold: 10 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + {{- if .Values.enableLivenessProbe }} + livenessProbe: + failureThreshold: 3 + httpGet: + path: /actuator/health/liveness + port: 8081 + scheme: HTTP + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + {{- end }} + resources: + {{- with .Values.resources }} +{{ toYaml . | indent 10 }} + {{- end }} + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + {{- with (.Values.securityContext).runAsUser }} + runAsUser: {{ . }} + {{- end }} + {{- with (.Values.securityContext).runAsGroup }} + runAsGroup: {{ . }} + {{- end }} + {{- with (.Values.securityContext).capabilities }} + capabilities: +{{ toYaml . | indent 12 }} + {{- end }} + volumeMounts: + - mountPath: /metabase-data + name: metabase-data + stdin: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + tty: true + volumes: + - name: metabase-data + persistentVolumeClaim: + claimName: {{ .Release.Name }}-pvc + dnsConfig: {} + dnsPolicy: ClusterFirst + {{- with .Values.hostAliases }} + hostAliases: +{{ toYaml . | indent 8 }} + {{- end }} + imagePullSecrets: + - name: {{ required "image-pull-secret must be set" .Values.imagePullSecret }} + restartPolicy: Always + schedulerName: default-scheduler + {{- with .Values.podSecurityContext }} + securityContext: +{{ toYaml . | indent 8 }} + {{- end }} + terminationGracePeriodSeconds: 30 diff --git a/metabase/src/main/helm/templates/ingress.yaml b/metabase/src/main/helm/templates/ingress.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4b2577683a9583a877bb34e32572b2ab007a7d44 --- /dev/null +++ b/metabase/src/main/helm/templates/ingress.yaml @@ -0,0 +1,64 @@ +# +# 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: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + annotations: + {{- with (.Values.ingress).annotations }} +{{ toYaml . | indent 4 }} + {{- end }} + {{- if not (.Values.ingress).disableDefaultCertManager }} + {{- if (.Values.ingress).use_staging_cert }} + cert-manager.io/cluster-issuer: letsencrypt-staging + {{- else }} + cert-manager.io/cluster-issuer: letsencrypt-prod + {{- end }} + {{- end }} +spec: + {{- if (.Values.ingress).className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Release.Name }} + port: + number: 3000 + + host: {{ include "app.baseDomain" . }} + tls: + - hosts: + - {{ include "app.baseDomain" . }} + {{- if (.Values.ingress).tlsSecretName }} + secretName: {{ (.Values.ingress).tlsSecretName }} + {{- else }} + secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls + {{- end }} \ No newline at end of file diff --git a/metabase/src/main/helm/templates/metabase_pvc.yaml b/metabase/src/main/helm/templates/metabase_pvc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..db07c01c2d972a1a3ea3316f0e1f79797631cdf6 --- /dev/null +++ b/metabase/src/main/helm/templates/metabase_pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }}-pvc + namespace: {{ .Release.Namespace }} +spec: + storageClassName: {{ (.Values.storage).className | default "ssd-retain" }} + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ (.Values.storage).size | default "10Gi" }} \ No newline at end of file diff --git a/metabase/src/main/helm/templates/network_policy.yaml b/metabase/src/main/helm/templates/network_policy.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d14c0d10efcf0c709cc5d99fb66d0f09c7312b2b --- /dev/null +++ b/metabase/src/main/helm/templates/network_policy.yaml @@ -0,0 +1,58 @@ +{{- if not (.Values.networkPolicy).disabled }} +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: network-policy-metabase + namespace: {{ include "app.namespace" . }} +spec: + podSelector: + matchLabels: + component: metabase + policyTypes: + - Ingress + - Egress + ingress: + - ports: + - port: 3000 + - 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: + - podSelector: + matchLabels: + component: ozgcloud-mongodb + ports: + - port: 27017 + protocol: TCP + - 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/metabase/src/main/helm/templates/service.yaml b/metabase/src/main/helm/templates/service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a3668f9d5ba070e1f79d8f767fb75fabe33b1b49 --- /dev/null +++ b/metabase/src/main/helm/templates/service.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: v1 +kind: Service +metadata: + name: {{ .Release.Name }} + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} + component: metabase-service +spec: + type: ClusterIP + ports: + - name: http + port: 3000 + protocol: TCP + - name: metrics + port: 8081 + protocol: TCP + selector: + {{- include "app.matchLabels" . | indent 4 }} + component: metabase diff --git a/metabase/src/main/helm/templates/service_account.yaml b/metabase/src/main/helm/templates/service_account.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3bac8e223d1fd108b386d1f06ed4e9fb2284a67c --- /dev/null +++ b/metabase/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: {{ include "app.serviceAccountName" . }} + namespace: {{ include "app.namespace" . }} +{{- end }} \ No newline at end of file diff --git a/metabase/src/main/helm/templates/service_monitor.yaml b/metabase/src/main/helm/templates/service_monitor.yaml new file mode 100644 index 0000000000000000000000000000000000000000..333e8e6bbe46b30552c98de01cdc223df1180d83 --- /dev/null +++ b/metabase/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: metabase-service-monitor +spec: + endpoints: + - port: metrics + path: /metrics + namespaceSelector: + matchNames: + - {{ include "app.namespace" . }} + selector: + matchLabels: + {{- include "app.matchLabels" . | indent 6 }} + component: metabase-service \ No newline at end of file diff --git a/metabase/src/main/helm/values.yaml b/metabase/src/main/helm/values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1c4508b2f163e8bd248417ce656d2396bafff29a --- /dev/null +++ b/metabase/src/main/helm/values.yaml @@ -0,0 +1,34 @@ +# +# 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. +# + +replicaCount: 1 + +image: + repo: dockerproxy.ozg-sh.de + name: metabase/metabase + tag: "v0.50.27.3" + + +dbFile: + path: "/metabase-data/metabase.db" \ No newline at end of file diff --git a/metabase/src/test/helm-linter-values.yaml b/metabase/src/test/helm-linter-values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7accba8aca81ac697e89ae763523a8fc69b7b79f --- /dev/null +++ b/metabase/src/test/helm-linter-values.yaml @@ -0,0 +1,33 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das +# Ministerium für Energiewende, Klimaschutz, Umwelt und Natur +# Zentrales IT-Management +# +# 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: + bezeichner: helm + +networkPolicy: + dnsServerNamespace: dummy-dns + + +imagePullSecret: image-pull-secret + +baseUrl: dev.statistik.de \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_defaults_labels_test.yaml b/metabase/src/test/helm/deployment_defaults_labels_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f2c5afb5d54370141c886be17f0eb09eca06684b --- /dev/null +++ b/metabase/src/test/helm/deployment_defaults_labels_test.yaml @@ -0,0 +1,70 @@ +# +# 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 default labels +release: + name: metabase + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: image-pull-secret +tests: + - it: check metadata.labels + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: metabase + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metabase + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 1.0.0-SNAPSHOT + helm.sh/chart: metabase-1.0.0-SNAPSHOT + ozgcloud-mongodb-client: "true" + + - it: should set spec.selector.matchLabels + asserts: + - equal: + path: spec.selector.matchLabels + value: + app.kubernetes.io/name: metabase + app.kubernetes.io/namespace: sh-helm-test + + + - it: should have correct deyploment spec.template.metadata.labels + asserts: + - equal: + path: spec.template.metadata.labels + value: + app.kubernetes.io/instance: metabase + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metabase + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 1.0.0-SNAPSHOT + component: metabase + helm.sh/chart: metabase-1.0.0-SNAPSHOT + ozgcloud-mongodb-client: "true" \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_env_test.yaml b/metabase/src/test/helm/deployment_env_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..faac30d740e8be05ace91aee0a2abf6cdf510b04 --- /dev/null +++ b/metabase/src/test/helm/deployment_env_test.yaml @@ -0,0 +1,95 @@ +# +# 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 container environments +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: dev + imagePullSecret: image-pull-secret +tests: + - it: check customList as list + set: + env.customList: + - name: my_test_environment_name + value: "A test value" + - name: test_environment + value: "B test value" + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" + - it: check customList as dict + set: + env.customList: + my_test_environment_name: "A test value" + test_environment: "B test value" + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" + + - it: check customList test value is not set by default + asserts: + - notContains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - it: check envs + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: MB_SETUP_TOKEN + valueFrom: + secretKeyRef: + name: setup-token-secret + key: MB_SETUP_TOKEN + optional: false + - contains: + path: spec.template.spec.containers[0].env + content: + name: MB_PROMETHEUS_SERVER_PORT + value: "8081" + - contains: + path: spec.template.spec.containers[0].env + content: + name: MB_DB_FILE + value: "/metabase-data/metabase.db" \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_image_pull_secret_test.yaml b/metabase/src/test/helm/deployment_image_pull_secret_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7db271604026bfa921751ef481f047791b624b2f --- /dev/null +++ b/metabase/src/test/helm/deployment_image_pull_secret_test.yaml @@ -0,0 +1,42 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das +# Ministerium für Energiewende, Klimaschutz, Umwelt und Natur +# Zentrales IT-Management +# +# 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 image pull secret + +templates: + - templates/deployment.yaml +release: + name: metabase + namespace: helm-test +tests: + - it: should set image pull secret + set: + imagePullSecret: image-pull-secret + asserts: + - contains: + path: spec.template.spec.imagePullSecrets + content: + name: image-pull-secret + - it: should fail template when image pull secret not set + asserts: + - failedTemplate: + errormessage: image-pull-secret must be set diff --git a/metabase/src/test/helm/deployment_resources_test.yaml b/metabase/src/test/helm/deployment_resources_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ecfc4eda7e1fa9bc9e45f5f24aeed6bb5a688f75 --- /dev/null +++ b/metabase/src/test/helm/deployment_resources_test.yaml @@ -0,0 +1,43 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das +# Ministerium für Energiewende, Klimaschutz, Umwelt und Natur +# Zentrales IT-Management +# +# 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 + +templates: + - templates/deployment.yaml +release: + name: metabase + namespace: helm-test +set: + imagePullSecret: image-pull-secret +tests: + - it: should have customizable resources + set: + resources: { "test": 1 } + asserts: + - equal: + path: spec.template.spec.containers[0].resources + value: { "test": 1 } + - it: should not generate resources when values not set + asserts: + - isEmpty: + path: spec.template.spec.containers[0].resources \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_service_account_test.yaml b/metabase/src/test/helm/deployment_service_account_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3d2a99f8114ec0b68c541336faff933e68a34484 --- /dev/null +++ b/metabase/src/test/helm/deployment_service_account_test.yaml @@ -0,0 +1,56 @@ +# +# 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: deployment service account +release: + name: metabase + namespace: by-helm-test +templates: + - templates/deployment.yaml +set: + imagePullSecret: test-image-pull-secret + ozgcloud: + environment: dev +tests: + - it: should use service account with default name + set: + serviceAccount: + create: true + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: metabase-service-account + - it: should use service account with name + set: + serviceAccount: + create: true + name: helm-service-account + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: helm-service-account + - it: should use default service account + asserts: + - isNull: + path: spec.template.spec.serviceAccountName \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_test.yaml b/metabase/src/test/helm/deployment_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3e192a3029dbc94c8b6b40870136ffda89269c10 --- /dev/null +++ b/metabase/src/test/helm/deployment_test.yaml @@ -0,0 +1,242 @@ +# +# 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: deployment +release: + name: metabase +templates: + - templates/deployment.yaml +set: + imagePullSecret: image-pull-secret +tests: + - it: should have metadata values + asserts: + - isKind: + of: Deployment + - isAPIVersion: + of: apps/v1 + - equal: + path: metadata.name + value: "metabase" + - equal: + path: metadata.namespace + value: "NAMESPACE" + - exists: + path: metadata.labels + - it: should have correct general settings + asserts: + - equal: + path: spec.progressDeadlineSeconds + value: 600 + - equal: + path: spec.replicas + value: 1 + - equal: + path: spec.revisionHistoryLimit + value: 10 + - exists: + path: spec.selector + - equal: + path: spec.selector.matchLabels["app.kubernetes.io/name"] + value: "metabase" + - equal: + path: spec.selector.matchLabels["app.kubernetes.io/namespace"] + value: "NAMESPACE" + - equal: + path: spec.strategy.rollingUpdate.maxSurge + value: 1 + - equal: + path: spec.strategy.rollingUpdate.maxUnavailable + value: 0 + - equal: + path: spec.strategy.type + value: "RollingUpdate" + - it: should have correct template configuration + asserts: + - equal: + path: spec.template.metadata.labels["app.kubernetes.io/instance"] + value: "metabase" + - equal: + path: spec.template.metadata.labels.component + value: "metabase" + - 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: "metabase" + - equal: + path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/namespace"] + value: "NAMESPACE" + - isEmpty: + path: spec.template.spec.dnsConfig + - 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" + - notExists: + path: spec.template.spec.securityContext + - equal: + path: spec.template.spec.terminationGracePeriodSeconds + value: 30 + - it: should have correct container configuration + asserts: + - equal: + path: spec.template.spec.containers[0].name + value: "metabase" + - equal: + path: spec.template.spec.containers[0].image + value: "dockerproxy.ozg-sh.de/metabase/metabase:v0.50.27.3" + - equal: + path: spec.template.spec.containers[0].imagePullPolicy + value: "Always" + - equal: + path: spec.template.spec.containers[0].ports[0].containerPort + value: 3000 + - equal: + path: spec.template.spec.containers[0].ports[0].name + value: "http" + - equal: + path: spec.template.spec.containers[0].ports[0].protocol + value: "TCP" + - equal: + path: spec.template.spec.containers[0].readinessProbe.failureThreshold + value: 3 + - equal: + path: spec.template.spec.containers[0].readinessProbe.httpGet.path + value: "/api/health" + - equal: + path: spec.template.spec.containers[0].readinessProbe.httpGet.port + value: 3000 + - 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 + - equal: + path: spec.template.spec.containers[0].startupProbe.httpGet.path + value: "/api/health" + - equal: + path: spec.template.spec.containers[0].startupProbe.httpGet.port + value: 3000 + - 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 + - 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: true + - 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 + - isNull: + path: spec.template.spec.containers[0].securityContext.capabilities + + - it: livenessProbe should be disabled by default + asserts: + - notExists: + path: spec.template.spec.containers[0].livenessProbe + + - it: enable livenessProbe + set: + enableLivenessProbe: true + asserts: + - isSubset: + path: spec.template.spec.containers[0].livenessProbe + content: + failureThreshold: 3 + httpGet: + path: /actuator/health/liveness + port: 8081 + scheme: HTTP + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 3 + + - it: should set securityContext fsGroup + set: + podSecurityContext.fsGroup: 1000 + asserts: + - equal: + path: spec.template.spec.securityContext.fsGroup + value: 1000 + - it: check capabilities + set: + securityContext: + capabilities: + drop: + - ALL + asserts: + - equal: + path: spec.template.spec.containers[0].securityContext.capabilities + value: + drop: + - ALL \ No newline at end of file diff --git a/metabase/src/test/helm/deployment_volume_test.yaml b/metabase/src/test/helm/deployment_volume_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ad40b22f3b25240dc829d2480d4c88175a07d7f7 --- /dev/null +++ b/metabase/src/test/helm/deployment_volume_test.yaml @@ -0,0 +1,56 @@ +# +# 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: deployment volumes tests +release: + name: metabase +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: "default" + imagePullSecret: image-pull-secret +tests: + - it: should have volumeMounts on it's container + asserts: + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].name + value: "metabase-data" + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].mountPath + value: "/metabase-data" + + - it: should have volumes on it's spec + asserts: + - equal: + path: spec.template.spec.volumes[0].name + value: metabase-data + - equal: + path: spec.template.spec.volumes[0].persistentVolumeClaim + value: + claimName: metabase-pvc + + + + diff --git a/metabase/src/test/helm/ingress_test.yaml b/metabase/src/test/helm/ingress_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f6d5de8d253e10fd7b87b3339bfe21e5bb61425d --- /dev/null +++ b/metabase/src/test/helm/ingress_test.yaml @@ -0,0 +1,132 @@ +# +# 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 ingress.yaml +release: + name: matabase + namespace: sh-helm-test +templates: + - templates/ingress.yaml +set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + +tests: + - it: check ingress kind and APIVersion + asserts: + - isKind: + of: Ingress + - isAPIVersion: + of: networking.k8s.io/v1 + - it: should create default ingress tls + asserts: + - equal: + path: spec.tls[0].secretName + value: helm-matabase-tls + - it: should set ingress tls + set: + ingress: + tlsSecretName: client-tls + asserts: + - equal: + path: spec.tls[0].secretName + value: client-tls + + - it: should not create ingress tls/ingressClass by default + asserts: + - isNull: + path: spec.ingressClassName + - it: should set ingress tls/ingressClass + set: + ingress: + className: ingress + asserts: + - equal: + path: spec.ingressClassName + value: ingress + + - it: should use default letsencrypt-prod cluster-issuer + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-prod + + - it: should use letsencrypt-staging cluster-issuer + set: + ingress.use_staging_cert: true + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-staging + + - it: should use letsencrypt-prod cluster-issuer + set: + ingress.use_staging_cert: false + asserts: + - equal: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + value: letsencrypt-prod + + - it: should disable default cert-manager + set: + ingress.disableDefaultCertManager: true + asserts: + - notExists: + path: metadata.annotations["cert-manager.io/cluster-issuer"] + + - it: should set ingress annotation proxy body size to 42m + set: + ingress: + annotations: + nginx.ingress.kubernetes.io/proxy-body-size: 42m + asserts: + - equal: + path: metadata.annotations["nginx.ingress.kubernetes.io/proxy-body-size"] + value: 42m + + - it: should create tls hosts name correctly + asserts: + - equal: + path: spec.tls[0].hosts[0] + value: helm.test.by.ozg-cloud.de + + - it: should create rules correctly + asserts: + - equal: + path: spec.rules[0].http.paths[0] + value: + path: / + pathType: Prefix + backend: + service: + name: matabase + port: + number: 3000 + + - it: should set hostname + asserts: + - equal: + path: spec.rules[0].host + value: helm.test.by.ozg-cloud.de diff --git a/metabase/src/test/helm/metabase_pvc_test.yaml b/metabase/src/test/helm/metabase_pvc_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9b148478b90bda3a567c607ae44564ad05c9f07a --- /dev/null +++ b/metabase/src/test/helm/metabase_pvc_test.yaml @@ -0,0 +1,57 @@ +suite: test pvc +release: + name: metabase + namespace: by-helm-test +templates: + - templates/metabase_pvc.yaml +tests: + - it: should have correct apiVersion + asserts: + - isAPIVersion: + of: v1 + - isKind: + of: PersistentVolumeClaim + + - it: should have metadata + asserts: + - equal: + path: metadata.name + value: metabase-pvc + - equal: + path: metadata.namespace + value: by-helm-test + + - it: should default storageClassName + asserts: + - equal: + path: spec.storageClassName + value: ssd-retain + + - it: should set storageClassName + set: + storage.className: ssd-delete + asserts: + - equal: + path: spec.storageClassName + value: ssd-delete + + - it: should have accessMode + asserts: + - equal: + path: spec.accessModes + value: + - ReadWriteOnce + + - it: should have default storage size + asserts: + - equal: + path: spec.resources.requests.storage + value: 10Gi + + - it: should set storage size + set: + storage.size: 10Gi + asserts: + - equal: + path: spec.resources.requests.storage + value: 10Gi diff --git a/metabase/src/test/helm/network_policy_test.yaml b/metabase/src/test/helm/network_policy_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..064ccae8869ab75f8357e8d9f4845229304bbb29 --- /dev/null +++ b/metabase/src/test/helm/network_policy_test.yaml @@ -0,0 +1,224 @@ +# +# 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 metabase test +release: + name: metabase + 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-metabase + namespace: by-helm-test + - it: validate spec + set: + networkPolicy: + dnsServerNamespace: kube-system + asserts: + - equal: + path: spec + value: + egress: + - ports: + - port: 27017 + protocol: TCP + to: + - podSelector: + matchLabels: + component: ozgcloud-mongodb + - 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: + - ports: + - port: 3000 + - from: + - namespaceSelector: + matchLabels: + name: openshift-user-workload-monitoring + ports: + - port: 8081 + protocol: TCP + podSelector: + matchLabels: + component: metabase + 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: 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 \ No newline at end of file diff --git a/metabase/src/test/helm/service_account_test.yaml b/metabase/src/test/helm/service_account_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..757a86e2f612796f293d5c5919b7dfd759aa1e0c --- /dev/null +++ b/metabase/src/test/helm/service_account_test.yaml @@ -0,0 +1,64 @@ +# +# 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: metabase + namespace: sh-helm-test +templates: + - templates/service_account.yaml +tests: + - it: should create service account with default name + set: + serviceAccount: + create: true + asserts: + - isKind: + of: ServiceAccount + - isAPIVersion: + of: v1 + - equal: + path: metadata.name + value: metabase-service-account + - equal: + path: metadata.namespace + value: sh-helm-test + - it: should create service account with name + set: + serviceAccount: + create: true + 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 + asserts: + - hasDocuments: + count: 0 \ No newline at end of file diff --git a/metabase/src/test/helm/service_monitor_test.yaml b/metabase/src/test/helm/service_monitor_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..062cd5ca90b576e1ecde3fd869accc56022f5b7d --- /dev/null +++ b/metabase/src/test/helm/service_monitor_test.yaml @@ -0,0 +1,83 @@ +# +# 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: metabase + namespace: sh-helm-test +templates: + - templates/service_monitor.yaml +tests: + - it: should have basic info and the label component with value metabase-service-monitor attached + asserts: + - isKind: + of: ServiceMonitor + - isAPIVersion: + of: monitoring.coreos.com/v1 + - equal: + path: metadata.name + value: metabase + - equal: + path: metadata.namespace + value: sh-helm-test + - equal: + path: metadata.labels["component"] + value: metabase-service-monitor + + - it: should contain default lables and component lables + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: metabase + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metabase + app.kubernetes.io/namespace: sh-helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 1.0.0-SNAPSHOT + component: metabase-service-monitor + helm.sh/chart: metabase-1.0.0-SNAPSHOT + ozgcloud-mongodb-client: "true" + + - it: should be able to enable the endpoint + asserts: + - contains: + path: spec.endpoints + content: + port: metrics + path: /metrics + - 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: metabase + app.kubernetes.io/namespace: sh-helm-test + component: metabase-service \ No newline at end of file diff --git a/metabase/src/test/helm/service_test.yaml b/metabase/src/test/helm/service_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3cc31ee3350f0c7c205846a6b7cb5e2b4d8646d1 --- /dev/null +++ b/metabase/src/test/helm/service_test.yaml @@ -0,0 +1,84 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das +# Ministerium für Energiewende, Klimaschutz, Umwelt und Natur +# Zentrales IT-Management +# +# 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: metabase + namespace: helm-test + +tests: + - it: has expected document values + asserts: + - containsDocument: + kind: Service + apiVersion: v1 + name: metabase + namespace: helm-test + - it: should be of type ClusterIP + asserts: + - equal: + path: spec.type + value: ClusterIP + - it: has http port + asserts: + - contains: + path: spec.ports + content: + name: http + port: 3000 + protocol: TCP + - 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: metabase + - equal: + path: spec.selector["app.kubernetes.io/namespace"] + value: helm-test + - it: has selector component + asserts: + - equal: + path: spec.selector.component + value: metabase + - it: should contain default lables and component lables + asserts: + - equal: + path: metadata.labels + value: + app.kubernetes.io/instance: metabase + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: metabase + app.kubernetes.io/namespace: helm-test + app.kubernetes.io/part-of: ozgcloud + app.kubernetes.io/version: 1.0.0-SNAPSHOT + component: metabase-service + helm.sh/chart: metabase-1.0.0-SNAPSHOT + ozgcloud-mongodb-client: "true" \ No newline at end of file