Skip to content
Snippets Groups Projects
Commit eade2da0 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'ozg-3938-enable-grpc-tls' (#113) from ozg-3938-enable-grpc-tls into master

parents 5455e3c9 3bfd8299
Branches
Tags
No related merge requests found
Showing
with 1021 additions and 67 deletions
......@@ -139,6 +139,14 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }}
{{ printf "%s" ( (.Values.serviceAccount).name | default "user-manager-service-account" ) }}
{{- end -}}
{{- define "app.truststoreSecretName" -}}
{{- if .Values.optionalTrustStoreSecretName -}}
{{ .Values.optionalTrustStoreSecretName }}
{{- else -}}
{{ printf "user-manager-truststore" }}
{{- end -}}
{{- end -}}
{{- define "app.getCustomList" -}}
{{- with (.Values.env).customList -}}
{{- if kindIs "map" . -}}
......
......@@ -33,8 +33,8 @@ spec:
issuerRef:
name: user-manager-issuer
kind: Issuer
duration: 8760h0m0s
renewBefore: 720h0m0s
duration: 8760h0m0s # 1 Jahr
renewBefore: 5840h0m0s # 8 Monate
commonName: {{ .Release.Name }}
dnsNames:
- "*.{{ .Release.Name }}.{{ include "app.namespace" . }}.svc.cluster.local"
......
......@@ -116,16 +116,16 @@ spec:
{{- with include "app.getCustomList" . }}
{{ . | indent 8 }}
{{- end }}
{{- if .Values.optionalTrustStoreSecretName }}
- name: TRUST_STORE_PASSWORD
{{- if not .Values.disableNamespaceTruststore }}
- name: TRUSTSTORE_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.optionalTrustStoreSecretName }}
name: {{ include "app.truststoreSecretName" . }}
key: password
optional: false
args:
- '-Djavax.net.ssl.trustStore=/optional-trust-store/truststore.jks'
- '-Djavax.net.ssl.trustStorePassword=$(TRUST_STORE_PASSWORD)'
- '-Djavax.net.ssl.trustStore=/namespace-truststore/truststore.jks'
- '-Djavax.net.ssl.trustStorePassword=$(TRUSTSTORE_PASSWORD)'
{{- end }}
image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
imagePullPolicy: Always
......@@ -191,37 +191,27 @@ spec:
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
{{- if or (not .Values.disableGrpcServerTls) .Values.optionalTrustStoreSecretName }}
volumeMounts:
{{- if not .Values.disableGrpcServerTls }}
- name: user-manager-tls-certificate
mountPath: "/user-manager-tls-certificate/tls.crt"
subPath: tls.crt
readOnly: true
- name: user-manager-tls-certificate
mountPath: "/user-manager-tls-certificate/tls.key"
subPath: tls.key
mountPath: "/user-manager-tls-certificate"
readOnly: true
{{- end }}
{{- if .Values.optionalTrustStoreSecretName }}
- name: optional-trust-store
mountPath: "/optional-trust-store/truststore.jks"
subPath: truststore.jks
{{- if not .Values.disableNamespaceTruststore }}
- name: namespace-truststore
mountPath: "/namespace-truststore"
readOnly: true
{{- end }}
{{- end }}
{{- if or (not .Values.disableGrpcServerTls) .Values.optionalTrustStoreSecretName }}
volumes:
{{- if not .Values.disableGrpcServerTls }}
- name: user-manager-tls-certificate
secret:
secretName: user-manager-tls-cert
{{- end }}
{{- if .Values.optionalTrustStoreSecretName }}
- name: optional-trust-store
{{- if not .Values.disableNamespaceTruststore }}
- name: namespace-truststore
secret:
secretName: {{ .Values.optionalTrustStoreSecretName }}
{{- end }}
secretName: {{ include "app.truststoreSecretName" . }}
{{- end }}
dnsConfig: {}
dnsPolicy: ClusterFirst
......
#
# Copyright (C) 2022 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 and (not .Values.disableNamespaceTruststore) (not .Values.disableCreateTruststore) }}
apiVersion: batch/v1
kind: Job
metadata:
name: init-user-manager-truststore-job
namespace: {{ include "app.namespace" . }}
labels:
{{- include "app.defaultLabels" . | indent 4 }}
annotations:
argocd.argoproj.io/hook: Sync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
template:
metadata:
name: init-user-manager-truststore-job
labels:
{{- include "app.defaultLabels" . | indent 8 }}
spec:
serviceAccountName: truststore-init-service-account
initContainers:
- name: wait-for-cronjob
image: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
command: ["/bin/sh", "-c"]
args: ["kubectl wait --for=jsonpath='{.metadata.name}'=renew-user-manager-truststore-cronjob cronjob/renew-user-manager-truststore-cronjob -n {{ include "app.namespace" . }}"]
containers:
- name: run-renew-user-manager-truststore-cronjob
image: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
command: ["/bin/sh", "-c"]
args: ["kubectl create job create-user-manager-truststore --from=cronjob/renew-user-manager-truststore-cronjob -n {{ include "app.namespace" . }} --dry-run=client -o yaml | kubectl patch --dry-run=client -o yaml --type json --patch '[{ \"op\": \"replace\", \"path\": \"/metadata/ownerReferences/0/blockOwnerDeletion\", \"value\": false }]' -f - | kubectl apply -f -"]
restartPolicy: OnFailure
{{- end }}
\ No newline at end of file
#
# Copyright (C) 2022 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 and (not .Values.disableNamespaceTruststore) (not .Values.disableCreateTruststore) }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: truststore-init-service-account
namespace: {{ include "app.namespace" . }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: truststore-init-role
namespace: {{ include "app.namespace" . }}
rules:
- apiGroups:
- "batch"
resources:
- cronjobs
resourceNames:
- renew-user-manager-truststore-cronjob
verbs:
- get
- list
- apiGroups:
- "batch"
resources:
- jobs
verbs:
- create
- apiGroups:
- "batch"
resources:
- jobs
resourceNames:
- create-user-manager-truststore
verbs:
- patch
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: truststore-init-role-binding
namespace: {{ include "app.namespace" . }}
subjects:
- kind: ServiceAccount
name: truststore-init-service-account
namespace: {{ include "app.namespace" . }}
roleRef:
kind: Role
name: truststore-init-role
apiGroup: rbac.authorization.k8s.io
{{- end }}
\ No newline at end of file
#
# Copyright (C) 2022 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 and (not .Values.disableNamespaceTruststore) (not .Values.disableCreateTruststore) }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: renew-user-manager-truststore-cronjob
namespace: {{ include "app.namespace" . }}
labels:
{{- include "app.defaultLabels" . | indent 4 }}
spec:
schedule: "1 1 * * 1"
jobTemplate:
spec:
template:
metadata:
name: renew-user-manager-truststore-cronjob
labels:
{{- include "app.defaultLabels" . | indent 12 }}
spec:
serviceAccountName: truststore-secret-service-account
initContainers:
- name: create-truststore
image: dockerproxy.ozg-sh.de/openjdk:latest
command: ["/bin/sh", "-c"]
args:
- |
[[ -z "${TRUSTSTORE_PASSWORD}" ]] && TRUSTSTORE_PASSWORD=$(tr -dc '[:alnum:]' < /dev/urandom | head -c 12; echo)
echo $TRUSTSTORE_PASSWORD >> /tmp/password.txt
keytool -importkeystore -srckeystore /usr/java/latest/lib/security/cacerts -destkeystore /tmp/truststore.jks -srcstoretype PKCS12 -deststoretype PKCS12 -deststorepass $TRUSTSTORE_PASSWORD -srcstorepass changeit -noprompt
keytool -importcert -alias {{ include "app.namespace" . }}-ca -file /namespace-ca-cert/ca.crt -keystore /tmp/truststore.jks -storepass $TRUSTSTORE_PASSWORD -noprompt
env:
- name: TRUSTSTORE_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "app.truststoreSecretName" . }}
key: password
optional: true
volumeMounts:
- name: namespace-ca-cert
mountPath: /namespace-ca-cert
readOnly: true
- name: temp-dir
mountPath: "/tmp"
containers:
- name: create-truststore-secret
image: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
command: ["/bin/sh", "-c"]
args: ["kubectl create secret generic {{ include "app.truststoreSecretName" . }} --from-file=/tmp/truststore.jks --from-literal=password=$(cat /tmp/password.txt) --save-config --dry-run=client -o yaml | kubectl apply -n {{ include "app.namespace" . }} -f -"]
volumeMounts:
- name: temp-dir
mountPath: "/tmp"
volumes:
- name: namespace-ca-cert
secret:
secretName: {{ include "app.namespace" . }}-ca-cert
- name: temp-dir
emptyDir: {}
restartPolicy: Never
{{- end }}
\ No newline at end of file
#
# Copyright (C) 2022 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 and (not .Values.disableNamespaceTruststore) (not .Values.disableCreateTruststore) }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: truststore-secret-service-account
namespace: {{ include "app.namespace" . }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: truststore-secret-role
namespace: {{ include "app.namespace" . }}
rules:
- apiGroups:
- ""
resources:
- secrets
resourceNames:
- {{ include "app.truststoreSecretName" . }}
verbs:
- patch
- update
- get
- apiGroups:
- ""
resources:
- secrets
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: truststore-secret-role-binding
namespace: {{ include "app.namespace" . }}
subjects:
- kind: ServiceAccount
name: truststore-secret-service-account
namespace: {{ include "app.namespace" . }}
roleRef:
kind: Role
name: truststore-secret-role
apiGroup: rbac.authorization.k8s.io
{{- end }}
\ No newline at end of file
......@@ -65,7 +65,7 @@ tests:
asserts:
- equal:
path: spec.renewBefore
value: 720h0m0s
value: 5840h0m0s
- it: should have commonName
asserts:
- equal:
......
......@@ -22,67 +22,99 @@
# unter der Lizenz sind dem Lizenztext zu entnehmen.
#
suite: test environments trust store
suite: test namespace truststore
templates:
- templates/deployment.yaml
release:
name: user-manager
namespace: by-helm-test
set:
ozgcloud:
bundesland: by
bezeichner: helm
environment: dev
environment: test
sso:
serverUrl: sso.test.sh.ozg-cloud.de
baseUrl: test.sh.ozg-cloud.de
imagePullSecret: image-pull-secret
tests:
- it: check without truststore
set:
disableNamespaceTruststore: true
asserts:
- notExists:
path: spec.template.spec.containers[0].args
- notContains:
path: spec.template.spec.containers[0].env
content:
name: TRUST_STORE_PASSWORD
name: TRUSTSTORE_PASSWORD
- notContains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: optional-trust-store
mountPath: "/optional-trust-store/truststore.jks"
subPath: truststore.jks
readOnly: true
name: namespace-truststore
any: true
- notContains:
path: spec.template.spec.volumes
content:
name: optional-trust-store
name: namespace-truststore
any: true
- it: check with default namespace truststore
asserts:
- equal:
path: spec.template.spec.containers[0].args
value:
- '-Djavax.net.ssl.trustStore=/namespace-truststore/truststore.jks'
- '-Djavax.net.ssl.trustStorePassword=$(TRUSTSTORE_PASSWORD)'
- contains:
path: spec.template.spec.containers[0].env
content:
name: TRUSTSTORE_PASSWORD
valueFrom:
secretKeyRef:
name: user-manager-truststore
key: password
optional: false
- contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: namespace-truststore
mountPath: "/namespace-truststore"
readOnly: true
- contains:
path: spec.template.spec.volumes
content:
name: namespace-truststore
secret:
secretName: user-manager-truststore
- it: check with truststore
- it: check with optional truststore
set:
optionalTrustStoreSecretName: optional-trust-store-secret
optionalTrustStoreSecretName: optional-truststore-secret
asserts:
- equal:
path: spec.template.spec.containers[0].args
value:
- '-Djavax.net.ssl.trustStore=/optional-trust-store/truststore.jks'
- '-Djavax.net.ssl.trustStorePassword=$(TRUST_STORE_PASSWORD)'
- '-Djavax.net.ssl.trustStore=/namespace-truststore/truststore.jks'
- '-Djavax.net.ssl.trustStorePassword=$(TRUSTSTORE_PASSWORD)'
- contains:
path: spec.template.spec.containers[0].env
content:
name: TRUST_STORE_PASSWORD
name: TRUSTSTORE_PASSWORD
valueFrom:
secretKeyRef:
name: optional-trust-store-secret
name: optional-truststore-secret
key: password
optional: false
- contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: optional-trust-store
mountPath: "/optional-trust-store/truststore.jks"
subPath: truststore.jks
name: namespace-truststore
mountPath: "/namespace-truststore"
readOnly: true
- contains:
path: spec.template.spec.volumes
content:
name: optional-trust-store
name: namespace-truststore
secret:
secretName: optional-trust-store-secret
\ No newline at end of file
secretName: optional-truststore-secret
\ No newline at end of file
......@@ -44,15 +44,7 @@ tests:
path: spec.template.spec.containers[0].volumeMounts
content:
name: user-manager-tls-certificate
mountPath: "/user-manager-tls-certificate/tls.crt"
subPath: tls.crt
readOnly: true
- contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: user-manager-tls-certificate
mountPath: "/user-manager-tls-certificate/tls.key"
subPath: tls.key
mountPath: "/user-manager-tls-certificate"
readOnly: true
- it: should have volumes for user-manager root certificate
......@@ -82,13 +74,6 @@ tests:
name: user-manager-tls-certificate
any: true
- it: should not have volume mounts
set:
disableGrpcServerTls: true
asserts:
- notExists:
path: spec.template.spec.containers[0].volumeMounts
- it: should not have volume for user-manager root certificate
set:
disableGrpcServerTls: true
......@@ -97,10 +82,3 @@ tests:
- notContains:
path: spec.template.spec.volumes
any: true
- it: should not have volume
set:
disableGrpcServerTls: true
asserts:
- notExists:
path: spec.template.spec.volumes
#
# Copyright (C) 2022 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 init truststore job
release:
name: user-manager
namespace: by-helm-test
templates:
- templates/truststore/init_truststore_job.yaml
tests:
- it: Job should not exist if disableCreateTruststore is true
set:
disableCreateTruststore: true
asserts:
- hasDocuments:
count: 0
- it: Job should not exist if disableNamespaceTruststore is true
set:
disableNamespaceTruststore: true
asserts:
- hasDocuments:
count: 0
- it: check header data
asserts:
- isAPIVersion:
of: batch/v1
- isKind:
of: Job
- it: check default metadata
asserts:
- equal:
path: metadata.name
value: init-user-manager-truststore-job
- equal:
path: metadata.namespace
value: by-helm-test
- equal:
path: metadata.labels["app.kubernetes.io/instance"]
value: user-manager
- equal:
path: metadata.labels["app.kubernetes.io/managed-by"]
value: Helm
- equal:
path: metadata.labels["app.kubernetes.io/name"]
value: user-manager
- equal:
path: metadata.labels["app.kubernetes.io/namespace"]
value: by-helm-test
- 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: user-manager-0.0.0-MANAGED-BY-JENKINS
- equal:
path: metadata.labels["ozgcloud-mongodb-client"]
value: "true"
- equal:
path: metadata.annotations["argocd.argoproj.io/hook"]
value: Sync
- equal:
path: metadata.annotations["argocd.argoproj.io/hook-delete-policy"]
value: HookSucceeded
- it: check default template metadata
asserts:
- equal:
path: spec.template.metadata.name
value: init-user-manager-truststore-job
- equal:
path: spec.template.metadata.labels["app.kubernetes.io/instance"]
value: user-manager
- equal:
path: spec.template.metadata.labels["app.kubernetes.io/managed-by"]
value: Helm
- equal:
path: spec.template.metadata.labels["app.kubernetes.io/name"]
value: user-manager
- equal:
path: spec.template.metadata.labels["app.kubernetes.io/namespace"]
value: by-helm-test
- 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: user-manager-0.0.0-MANAGED-BY-JENKINS
- equal:
path: spec.template.metadata.labels["ozgcloud-mongodb-client"]
value: "true"
- it: check job serviceaccountname
asserts:
- equal:
path: spec.template.spec.serviceAccountName
value: truststore-init-service-account
- it: check initContainer
asserts:
- equal:
path: spec.template.spec.initContainers[0].name
value: wait-for-cronjob
- equal:
path: spec.template.spec.initContainers[0].image
value: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
- equal:
path: spec.template.spec.initContainers[0].command
value: ["/bin/sh", "-c"]
- equal:
path: spec.template.spec.initContainers[0].args
value: ["kubectl wait --for=jsonpath='{.metadata.name}'=renew-user-manager-truststore-cronjob cronjob/renew-user-manager-truststore-cronjob -n by-helm-test"]
- it: check container
asserts:
- equal:
path: spec.template.spec.containers[0].name
value: run-renew-user-manager-truststore-cronjob
- equal:
path: spec.template.spec.containers[0].image
value: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
- equal:
path: spec.template.spec.containers[0].command
value: ["/bin/sh", "-c"]
- equal:
path: spec.template.spec.containers[0].args
value: ["kubectl create job create-user-manager-truststore --from=cronjob/renew-user-manager-truststore-cronjob -n by-helm-test --dry-run=client -o yaml | kubectl patch --dry-run=client -o yaml --type json --patch '[{ \"op\": \"replace\", \"path\": \"/metadata/ownerReferences/0/blockOwnerDeletion\", \"value\": false }]' -f - | kubectl apply -f -"]
- it: check restartPolicy
asserts:
- equal:
path: spec.template.spec.restartPolicy
value: OnFailure
\ No newline at end of file
#
# Copyright (C) 2022 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 init truststore rbac
release:
name: user-manager
namespace: by-helm-test
templates:
- templates/truststore/init_truststore_rbac.yaml
tests:
- it: RBAC should not exist if disableCreateTruststore is true
set:
disableCreateTruststore: true
asserts:
- hasDocuments:
count: 0
- it: RBAC should not exist if disableNamespaceTruststore is true
set:
disableNamespaceTruststore: true
asserts:
- hasDocuments:
count: 0
# ServiceAccount
- it: check ServiceAccount header data
documentIndex: 0
asserts:
- isAPIVersion:
of: v1
- isKind:
of: ServiceAccount
- it: check ServiceAccount default metadata
documentIndex: 0
asserts:
- equal:
path: metadata.name
value: truststore-init-service-account
- equal:
path: metadata.namespace
value: by-helm-test
# Role
- it: check Role header data
documentIndex: 1
asserts:
- isAPIVersion:
of: rbac.authorization.k8s.io/v1
- isKind:
of: Role
- it: check Role default metadata
documentIndex: 1
asserts:
- equal:
path: metadata.name
value: truststore-init-role
- equal:
path: metadata.namespace
value: by-helm-test
- it: check Role rules
documentIndex: 1
asserts:
- contains:
path: rules
content:
apiGroups:
- "batch"
resources:
- cronjobs
resourceNames:
- renew-user-manager-truststore-cronjob
verbs:
- get
- list
- contains:
path: rules
content:
apiGroups:
- "batch"
resources:
- jobs
verbs:
- create
- contains:
path: rules
content:
apiGroups:
- "batch"
resources:
- jobs
resourceNames:
- create-user-manager-truststore
verbs:
- patch
- get
# RoleBinding
- it: check RoleBinding header data
documentIndex: 2
asserts:
- isAPIVersion:
of: rbac.authorization.k8s.io/v1
- isKind:
of: RoleBinding
- it: check RoleBinding default metadata
documentIndex: 2
asserts:
- equal:
path: metadata.name
value: truststore-init-role-binding
- equal:
path: metadata.namespace
value: by-helm-test
- it: check RoleBinding subjects
documentIndex: 2
asserts:
- contains:
path: subjects
content:
kind: ServiceAccount
name: truststore-init-service-account
namespace: by-helm-test
- it: check RoleBinding roleRef
documentIndex: 2
asserts:
- equal:
path: roleRef
value:
kind: Role
name: truststore-init-role
apiGroup: rbac.authorization.k8s.io
\ No newline at end of file
#
# Copyright (C) 2022 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 truststore cronjob
release:
name: user-manager
namespace: by-helm-test
templates:
- templates/truststore/truststore_cronjob.yaml
tests:
- it: CronJob should not exist if disableCreateTruststore is true
set:
disableCreateTruststore: true
asserts:
- hasDocuments:
count: 0
- it: CronJob should not exist if disableNamespaceTruststore is true
set:
disableNamespaceTruststore: true
asserts:
- hasDocuments:
count: 0
- it: check header data
asserts:
- isAPIVersion:
of: batch/v1
- isKind:
of: CronJob
- it: check default metadata
asserts:
- equal:
path: metadata.name
value: renew-user-manager-truststore-cronjob
- equal:
path: metadata.namespace
value: by-helm-test
- equal:
path: metadata.labels["app.kubernetes.io/instance"]
value: user-manager
- equal:
path: metadata.labels["app.kubernetes.io/managed-by"]
value: Helm
- equal:
path: metadata.labels["app.kubernetes.io/name"]
value: user-manager
- equal:
path: metadata.labels["app.kubernetes.io/namespace"]
value: by-helm-test
- 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: user-manager-0.0.0-MANAGED-BY-JENKINS
- equal:
path: metadata.labels["ozgcloud-mongodb-client"]
value: "true"
- it: check default schedule
asserts:
- equal:
path: spec.schedule
value: "1 1 * * 1"
- it: check default jobTemplate template metadata
asserts:
- equal:
path: spec.jobTemplate.spec.template.metadata.name
value: renew-user-manager-truststore-cronjob
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/instance"]
value: user-manager
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/managed-by"]
value: Helm
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/name"]
value: user-manager
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/namespace"]
value: by-helm-test
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/part-of"]
value: ozgcloud
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["app.kubernetes.io/version"]
value: 0.0.0-MANAGED-BY-JENKINS
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["helm.sh/chart"]
value: user-manager-0.0.0-MANAGED-BY-JENKINS
- equal:
path: spec.jobTemplate.spec.template.metadata.labels["ozgcloud-mongodb-client"]
value: "true"
- it: check cronJob serviceaccountname
asserts:
- equal:
path: spec.jobTemplate.spec.template.spec.serviceAccountName
value: truststore-secret-service-account
- it: check initContainer
asserts:
- equal:
path: spec.jobTemplate.spec.template.spec.initContainers[0].name
value: create-truststore
- equal:
path: spec.jobTemplate.spec.template.spec.initContainers[0].image
value: dockerproxy.ozg-sh.de/openjdk:latest
- equal:
path: spec.jobTemplate.spec.template.spec.initContainers[0].command
value: ["/bin/sh", "-c"]
- equal:
path: spec.jobTemplate.spec.template.spec.initContainers[0].args
value:
- |
[[ -z "${TRUSTSTORE_PASSWORD}" ]] && TRUSTSTORE_PASSWORD=$(tr -dc '[:alnum:]' < /dev/urandom | head -c 12; echo)
echo $TRUSTSTORE_PASSWORD >> /tmp/password.txt
keytool -importkeystore -srckeystore /usr/java/latest/lib/security/cacerts -destkeystore /tmp/truststore.jks -srcstoretype PKCS12 -deststoretype PKCS12 -deststorepass $TRUSTSTORE_PASSWORD -srcstorepass changeit -noprompt
keytool -importcert -alias by-helm-test-ca -file /namespace-ca-cert/ca.crt -keystore /tmp/truststore.jks -storepass $TRUSTSTORE_PASSWORD -noprompt
- contains:
path: spec.jobTemplate.spec.template.spec.initContainers[0].env
content:
name: TRUSTSTORE_PASSWORD
valueFrom:
secretKeyRef:
name: user-manager-truststore
key: password
optional: true
- contains:
path: spec.jobTemplate.spec.template.spec.initContainers[0].volumeMounts
content:
name: namespace-ca-cert
mountPath: /namespace-ca-cert
readOnly: true
- contains:
path: spec.jobTemplate.spec.template.spec.initContainers[0].volumeMounts
content:
name: temp-dir
mountPath: "/tmp"
- it: check container
asserts:
- equal:
path: spec.jobTemplate.spec.template.spec.containers[0].name
value: create-truststore-secret
- equal:
path: spec.jobTemplate.spec.template.spec.containers[0].image
value: dockerproxy.ozg-sh.de/bitnami/kubectl:latest
- equal:
path: spec.jobTemplate.spec.template.spec.containers[0].command
value: ["/bin/sh", "-c"]
- equal:
path: spec.jobTemplate.spec.template.spec.containers[0].args
value: ["kubectl create secret generic user-manager-truststore --from-file=/tmp/truststore.jks --from-literal=password=$(cat /tmp/password.txt) --save-config --dry-run=client -o yaml | kubectl apply -n by-helm-test -f -"]
- contains:
path: spec.jobTemplate.spec.template.spec.initContainers[0].volumeMounts
content:
name: temp-dir
mountPath: "/tmp"
- it: check volumes
asserts:
- contains:
path: spec.jobTemplate.spec.template.spec.volumes
content:
name: namespace-ca-cert
secret:
secretName: by-helm-test-ca-cert
- contains:
path: spec.jobTemplate.spec.template.spec.volumes
content:
name: temp-dir
emptyDir: {}
- it: check restartPolicy
asserts:
- equal:
path: spec.jobTemplate.spec.template.spec.restartPolicy
value: Never
\ No newline at end of file
#
# Copyright (C) 2022 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 truststore rbac
release:
name: user-manager
namespace: by-helm-test
templates:
- templates/truststore/truststore_rbac.yaml
tests:
- it: RBAC should not exist if disableCreateTruststore is true
set:
disableCreateTruststore: true
asserts:
- hasDocuments:
count: 0
- it: RBAC should not exist if disableNamespaceTruststore is true
set:
disableNamespaceTruststore: true
asserts:
- hasDocuments:
count: 0
# ServiceAccount
- it: check ServiceAccount header data
documentIndex: 0
asserts:
- isAPIVersion:
of: v1
- isKind:
of: ServiceAccount
- it: check ServiceAccount default metadata
documentIndex: 0
asserts:
- equal:
path: metadata.name
value: truststore-secret-service-account
- equal:
path: metadata.namespace
value: by-helm-test
# Role
- it: check Role header data
documentIndex: 1
asserts:
- isAPIVersion:
of: rbac.authorization.k8s.io/v1
- isKind:
of: Role
- it: check Role default metadata
documentIndex: 1
asserts:
- equal:
path: metadata.name
value: truststore-secret-role
- equal:
path: metadata.namespace
value: by-helm-test
- it: check Role rules
documentIndex: 1
asserts:
- contains:
path: rules
content:
apiGroups:
- ""
resources:
- secrets
resourceNames:
- user-manager-truststore
verbs:
- patch
- update
- get
- contains:
path: rules
content:
apiGroups:
- ""
resources:
- secrets
verbs:
- create
# RoleBinding
- it: check RoleBinding header data
documentIndex: 2
asserts:
- isAPIVersion:
of: rbac.authorization.k8s.io/v1
- isKind:
of: RoleBinding
- it: check RoleBinding default metadata
documentIndex: 2
asserts:
- equal:
path: metadata.name
value: truststore-secret-role-binding
- equal:
path: metadata.namespace
value: by-helm-test
- it: check RoleBinding subjects
documentIndex: 2
asserts:
- contains:
path: subjects
content:
kind: ServiceAccount
name: truststore-secret-service-account
namespace: by-helm-test
- it: check RoleBinding roleRef
documentIndex: 2
asserts:
- equal:
path: roleRef
value:
kind: Role
name: truststore-secret-role
apiGroup: rbac.authorization.k8s.io
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment