Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions e2e-tests/functions
Original file line number Diff line number Diff line change
Expand Up @@ -1084,3 +1084,51 @@ wait_for_generation() {
fi
done
}

check_env_in_pod() {
local check_type=$1 # add | delete
local component=$2 # instance | pgbouncer | repohost
local var_name=$3 # e.g. MY_ENV
local expected_value=$4 # used only for 'add'

case "$component" in
instance)
POD=$(kubectl get -n "${NAMESPACE}" pod -l postgres-operator.crunchydata.com/instance-set=instance1 -o 'jsonpath={.items[0].metadata.name}')
CONTAINER=""
;;
pgbouncer)
POD=$(kubectl get -n "${NAMESPACE}" pod -l postgres-operator.crunchydata.com/role=pgbouncer -o 'jsonpath={.items[0].metadata.name}')
CONTAINER="-c pgbouncer"
;;
repohost)
POD=$(kubectl get -n "${NAMESPACE}" pod -l postgres-operator.crunchydata.com/data=pgbackrest -o 'jsonpath={.items[0].metadata.name}')
CONTAINER="-c pgbackrest"
;;
*)
echo "ERROR: unknown component '$component'"
exit 1
;;
esac

VALUE=$(kubectl exec -n "${NAMESPACE}" $POD $CONTAINER -- printenv "$var_name" || true)

if [[ "$check_type" == "add" ]]; then
if [ "$VALUE" != "$expected_value" ]; then
echo "ERROR: $var_name is missing or incorrect in pod $POD (expected '$expected_value', got '$VALUE')"
exit 1
else
echo "$var_name exists and is set to: $VALUE in pod $POD"
fi
elif [[ "$check_type" == "delete" ]]; then
if [ -n "$VALUE" ]; then
echo "ERROR: $var_name exists in pod $POD (should not exist)"
exit 1
else
echo "$var_name is missing as expected in pod $POD"
fi
else
echo "ERROR: unknown check type '$check_type'"
exit 1
fi
}

1 change: 1 addition & 0 deletions e2e-tests/run-pr.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
backup-enable-disable
custom-envs
custom-extensions
custom-tls
database-init-sql
Expand Down
1 change: 1 addition & 0 deletions e2e-tests/run-release.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
backup-enable-disable
custom-envs
custom-extensions
custom-tls
database-init-sql
Expand Down
24 changes: 24 additions & 0 deletions e2e-tests/tests/custom-envs/00-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
names:
kind: PerconaPGCluster
listKind: PerconaPGClusterList
plural: perconapgclusters
singular: perconapgcluster
scope: Namespaced
---
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
metadata:
name: check-operator-deploy-status
timeout: 120
commands:
- script: kubectl assert exist-enhanced deployment percona-postgresql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1
14 changes: 14 additions & 0 deletions e2e-tests/tests/custom-envs/00-deploy-operator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
init_temp_dir # do this only in the first TestStep

deploy_operator
deploy_client
deploy_s3_secrets
106 changes: 106 additions & 0 deletions e2e-tests/tests/custom-envs/01-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: custom-envs
postgres-operator.crunchydata.com/data: postgres
postgres-operator.crunchydata.com/instance-set: instance1
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: custom-envs
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
currentReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: custom-envs-pgbouncer
labels:
postgres-operator.crunchydata.com/cluster: custom-envs
postgres-operator.crunchydata.com/role: pgbouncer
annotations:
deployment.kubernetes.io/revision: '1'
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: custom-envs
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
updatedReplicas: 1
readyReplicas: 1
---
kind: Job
apiVersion: batch/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: custom-envs
postgres-operator.crunchydata.com/pgbackrest: ''
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGBackup
controller: true
blockOwnerDeletion: true
status:
succeeded: 1
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: custom-envs
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: custom-envs
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
observedGeneration: 1
pgbackrest:
repos:
- name: repo1
stanzaCreated: true
proxy:
pgBouncer:
readyReplicas: 1
replicas: 1
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: custom-envs
status:
pgbouncer:
ready: 1
size: 1
postgres:
instances:
- name: instance1
ready: 1
size: 1
ready: 1
size: 1
state: ready
15 changes: 15 additions & 0 deletions e2e-tests/tests/custom-envs/01-create-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 20
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

get_cr \
| yq eval '
.spec.proxy.pgBouncer.replicas=1 |
.spec.instances[].replicas=1' - \
| kubectl -n "${NAMESPACE}" apply -f -
21 changes: 21 additions & 0 deletions e2e-tests/tests/custom-envs/02-add-env-to-instance.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
get_cr | yq eval '
.spec.proxy.pgBouncer.replicas = 1 |
.spec.instances[].replicas = 1 |
.spec.instances[].env = ((.spec.instances[].env // []) + [{"name": "MY_ENV", "value": "1000"}] | unique_by(.name))
' - | kubectl -n "${NAMESPACE}" apply -f -


sleep 10
wait_cluster_consistency custom-envs

check_env_in_pod add instance MY_ENV 1000

48 changes: 48 additions & 0 deletions e2e-tests/tests/custom-envs/02-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: custom-envs
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: custom-envs
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
observedGeneration: 2
pgbackrest:
repos:
- name: repo1
stanzaCreated: true
proxy:
pgBouncer:
readyReplicas: 1
replicas: 1
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: custom-envs
status:
pgbouncer:
ready: 1
size: 1
postgres:
instances:
- name: instance1
ready: 1
size: 1
ready: 1
size: 1
state: ready
48 changes: 48 additions & 0 deletions e2e-tests/tests/custom-envs/03-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: custom-envs
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: custom-envs
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
status:
instances:
- name: instance1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
observedGeneration: 3
pgbackrest:
repos:
- name: repo1
stanzaCreated: true
proxy:
pgBouncer:
readyReplicas: 1
replicas: 1
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: custom-envs
status:
pgbouncer:
ready: 1
size: 1
postgres:
instances:
- name: instance1
ready: 1
size: 1
ready: 1
size: 1
state: ready
19 changes: 19 additions & 0 deletions e2e-tests/tests/custom-envs/03-update-env-for-instance.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
kubectl -n ${NAMESPACE} get pg custom-envs -o yaml | \
yq eval '
.spec.instances[].env[] |=
(select(.name == "MY_ENV").value = "2000")' - | \
kubectl apply -f -

sleep 10
wait_cluster_consistency custom-envs

check_env_in_pod add instance MY_ENV 2000
24 changes: 24 additions & 0 deletions e2e-tests/tests/custom-envs/04-add-env-secret-to-instance.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 20
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

# Create a secret
kubectl create secret generic instance-env-secret \
--from-literal=DB_USER_TEST_ENV=myuser \
--from-literal=DB_PASSWORD_TEST_ENV='MyS3cretP@ss' \
-n "${NAMESPACE}" || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it is better to fail a test if secret is not created? Without secret - the next step will fail anyway?


kubectl get pg custom-envs -n ${NAMESPACE} -o yaml | \
yq eval '.spec.instances[].envFrom += [{"secretRef": {"name": "instance-env-secret"}}]' - | \
kubectl apply -f -

sleep 10
wait_cluster_consistency custom-envs
check_env_in_pod add instance DB_USER_TEST_ENV myuser
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We add 2 env vars, why do we check only 1 of them?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Add 2 vars for env and check both


Loading
Loading