Skip to content

Commit d40d567

Browse files
jvpasinattohors
andauthored
K8SPG-552 Add more cert-manager-tls validations and more platforms for snapshot test (#1505)
* Add EKS snapshot test and more backup-enable-disable checks * fix eks snapshot test * add correct storage class in test * add more checks to cert-manager-tls * solve comments * fix openshift storage class in snapshot test --------- Co-authored-by: Viacheslav Sarzhan <slava.sarzhan@percona.com>
1 parent 309b396 commit d40d567

20 files changed

+464
-17
lines changed

e2e-tests/conf/cmctl.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: cmctl
5+
---
6+
apiVersion: rbac.authorization.k8s.io/v1
7+
kind: ClusterRole
8+
metadata:
9+
name: cmctl
10+
rules:
11+
- apiGroups: ["cert-manager.io"]
12+
resources: ["certificates", "certificates/status", "certificaterequests"]
13+
verbs: ["get", "list", "watch", "create", "update", "patch"]
14+
---
15+
apiVersion: rbac.authorization.k8s.io/v1
16+
kind: ClusterRoleBinding
17+
metadata:
18+
name: cmctl
19+
roleRef:
20+
apiGroup: rbac.authorization.k8s.io
21+
kind: ClusterRole
22+
name: cmctl
23+
subjects:
24+
- kind: ServiceAccount
25+
name: cmctl
26+
namespace: ${NAMESPACE}
27+
---
28+
apiVersion: apps/v1
29+
kind: Deployment
30+
metadata:
31+
name: cmctl
32+
spec:
33+
replicas: 1
34+
selector:
35+
matchLabels:
36+
name: cmctl
37+
template:
38+
metadata:
39+
labels:
40+
name: cmctl
41+
spec:
42+
serviceAccountName: cmctl
43+
containers:
44+
- name: cmctl
45+
image: curlimages/curl
46+
imagePullPolicy: Always
47+
command:
48+
- /bin/sh
49+
- -c
50+
- |
51+
curl -fsSL -o /tmp/cmctl https://github.com/cert-manager/cmctl/releases/download/v2.4.1/cmctl_linux_amd64 \
52+
&& chmod +x /tmp/cmctl \
53+
&& sleep 100500
54+
restartPolicy: Always

e2e-tests/functions

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,11 @@ deploy_client() {
322322
kubectl -n "${NAMESPACE}" apply -f "${TESTS_CONFIG_DIR}/client.yaml"
323323
}
324324

325+
deploy_cmctl() {
326+
envsubst < "${TESTS_CONFIG_DIR}/cmctl.yml" | kubectl -n "${NAMESPACE}" apply -f -
327+
kubectl -n "${NAMESPACE}" wait deployment cmctl --for=condition=available --timeout=60s
328+
}
329+
325330
get_client_pod() {
326331
kubectl -n ${NAMESPACE} get pods --selector=name=pg-client -o 'jsonpath={.items[].metadata.name}'
327332
}
@@ -1322,6 +1327,26 @@ detect_k8s_platform() {
13221327
echo "${platform}"
13231328
}
13241329

1330+
ensure_ebs_gp3_storage_class() {
1331+
local platform=${1:-$(detect_k8s_platform)}
1332+
1333+
if [[ "$platform" != "eks" && "$platform" != "openshift" ]]; then
1334+
return 0
1335+
fi
1336+
1337+
cat <<EOF | kubectl apply -f -
1338+
apiVersion: storage.k8s.io/v1
1339+
kind: StorageClass
1340+
metadata:
1341+
name: ebs-csi-gp3
1342+
provisioner: ebs.csi.aws.com
1343+
volumeBindingMode: WaitForFirstConsumer
1344+
allowVolumeExpansion: true
1345+
parameters:
1346+
type: gp3
1347+
EOF
1348+
}
1349+
13251350
enable_hugepages() {
13261351
local platform=$1
13271352
local hugepage_count=${2:-1024}

e2e-tests/tests/backup-enable-disable/06-check-backups-with-datasource.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ commands:
1616
echo "expected pgBackRest backup job to not exist"
1717
exit 1
1818
fi
19+
20+
if kubectl -n "${NAMESPACE}" get pvc some-name-datasource-repo1 >/dev/null 2>&1; then
21+
echo "expected pgBackRest repo PVC to not exist"
22+
exit 1
23+
fi

e2e-tests/tests/backup-enable-disable/08-check-backups.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ commands:
1616
echo "backups are not disabled properly"
1717
exit 1
1818
fi
19+
20+
if kubectl -n "${NAMESPACE}" get pvc some-name-repo1 >/dev/null 2>&1; then
21+
echo "expected pgBackRest repo PVC to not exist"
22+
exit 1
23+
fi
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 300
4+
---
5+
kind: StatefulSet
6+
apiVersion: apps/v1
7+
metadata:
8+
name: some-name-repo-host
9+
labels:
10+
postgres-operator.crunchydata.com/cluster: some-name
11+
postgres-operator.crunchydata.com/data: pgbackrest
12+
postgres-operator.crunchydata.com/pgbackrest: ''
13+
postgres-operator.crunchydata.com/pgbackrest-dedicated: ''
14+
status:
15+
replicas: 1
16+
readyReplicas: 1
17+
updatedReplicas: 1
18+
---
19+
apiVersion: v1
20+
kind: PersistentVolumeClaim
21+
metadata:
22+
name: some-name-repo1
23+
labels:
24+
postgres-operator.crunchydata.com/cluster: some-name
25+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
26+
postgres-operator.crunchydata.com/pgbackrest-volume: ''
27+
---
28+
kind: Job
29+
apiVersion: batch/v1
30+
metadata:
31+
labels:
32+
postgres-operator.crunchydata.com/cluster: some-name
33+
postgres-operator.crunchydata.com/pgbackrest: ''
34+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
35+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
36+
status:
37+
succeeded: 1
38+
---
39+
apiVersion: postgres-operator.crunchydata.com/v1beta1
40+
kind: PostgresCluster
41+
metadata:
42+
name: some-name
43+
status:
44+
pgbackrest:
45+
repos:
46+
- name: repo1
47+
stanzaCreated: true
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
get_cr "some-name" ${RANDOM} \
11+
| yq 'del(.metadata.annotations."pgv2.percona.com/authorizeBackupRemoval")' \
12+
| yq 'del(.spec.backups.enabled)' \
13+
| kubectl -n "${NAMESPACE}" apply -f -
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 300
4+
---
5+
kind: StatefulSet
6+
apiVersion: apps/v1
7+
metadata:
8+
name: some-name-repo-host
9+
labels:
10+
postgres-operator.crunchydata.com/cluster: some-name
11+
postgres-operator.crunchydata.com/data: pgbackrest
12+
postgres-operator.crunchydata.com/pgbackrest: ''
13+
postgres-operator.crunchydata.com/pgbackrest-dedicated: ''
14+
status:
15+
replicas: 1
16+
readyReplicas: 1
17+
updatedReplicas: 1
18+
---
19+
apiVersion: v1
20+
kind: PersistentVolumeClaim
21+
metadata:
22+
name: some-name-repo1
23+
labels:
24+
postgres-operator.crunchydata.com/cluster: some-name
25+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
26+
postgres-operator.crunchydata.com/pgbackrest-volume: ''
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
get_cr "some-name" ${RANDOM} \
11+
| yq 'del(.metadata.annotations."pgv2.percona.com/authorizeBackupRemoval")' \
12+
| yq '.spec.backups.enabled=false' \
13+
| kubectl -n "${NAMESPACE}" apply -f -
14+
15+
retry 60 5 bash -c '
16+
kubectl -n "${NAMESPACE}" get postgrescluster some-name -o json \
17+
| jq -e '"'"'.status.conditions[] | select(.type == "Progressing" and .reason == "Paused" and .status == "False" and (.message | contains("authorize backup removal")))'"'"' >/dev/null
18+
'

e2e-tests/tests/cert-manager-tls/00-deploy-operator.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ commands:
1111
1212
deploy_cert_manager
1313
deploy_operator
14-
deploy_client
14+
deploy_client
15+
deploy_cmctl
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 60
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
pg_certificate_data=$(run_comand_on_pod "openssl s_client -connect cert-manager-tls-primary:5432 -starttls postgres <<< '' 2>/dev/null | openssl x509 -noout -issuer")
12+
if [[ "$pg_certificate_data" != *"issuer=CN=cert-manager-tls-ca"* ]]; then
13+
echo "Unexpected PostgreSQL certificate issuer after recovery"
14+
echo "Got: $pg_certificate_data"
15+
exit 1
16+
fi
17+
18+
ssl_info=$(run_psql_local "SHOW ssl;" "postgres:$(get_psql_user_pass cert-manager-tls-pguser-postgres)@$(get_psql_user_host cert-manager-tls-pguser-postgres)")
19+
if [[ "$ssl_info" != *"on"* ]]; then
20+
echo "SSL is not enabled on PostgreSQL after recovery"
21+
exit 1
22+
fi
23+
24+
pgb_certificate_data=$(run_comand_on_pod "openssl s_client -connect cert-manager-tls-pgbouncer:5432 -starttls postgres <<< '' 2>/dev/null | openssl x509 -noout -issuer")
25+
if [[ "$pgb_certificate_data" != *"issuer=CN=cert-manager-tls-ca"* ]]; then
26+
echo "Unexpected PgBouncer certificate issuer after recovery"
27+
echo "Got: $pgb_certificate_data"
28+
exit 1
29+
fi
30+
31+
instance=$(kubectl -n "$NAMESPACE" get pod \
32+
-l postgres-operator.crunchydata.com/cluster=cert-manager-tls,postgres-operator.crunchydata.com/role=primary \
33+
-o jsonpath='{.items[0].metadata.name}')
34+
35+
pgbr_certificate_data=$(run_comand_on_pod "openssl s_client -connect ${instance}.cert-manager-tls-pods:8432 <<< '' 2>/dev/null | openssl x509 -noout -issuer")
36+
if [[ "$pgbr_certificate_data" != *"issuer=CN=cert-manager-tls-ca"* ]]; then
37+
echo "Unexpected pgBackRest certificate issuer after recovery"
38+
echo "Got: $pgbr_certificate_data"
39+
exit 1
40+
fi
41+
42+
kubectl -n "$NAMESPACE" exec "$instance" -c pgbackrest -- pgbackrest info

0 commit comments

Comments
 (0)