From 8d42d0f9baece940005474612a704ec9006d64de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ege=20G=C3=BCne=C5=9F?= Date: Thu, 29 May 2025 16:33:54 +0300 Subject: [PATCH 1/6] K8SPS-335: Add gr-upgrade and async-upgrade tests --- e2e-tests/functions | 111 ++++++++++++++++-- e2e-tests/run-distro.csv | 2 + e2e-tests/run-pr.csv | 2 + e2e-tests/run-release.csv | 2 + e2e-tests/tests/async-upgrade/00-assert.yaml | 26 ++++ .../async-upgrade/00-deploy-operator.yaml | 15 +++ e2e-tests/tests/async-upgrade/01-assert.yaml | 58 +++++++++ .../async-upgrade/01-create-cluster.yaml | 22 ++++ e2e-tests/tests/async-upgrade/02-assert.yaml | 26 ++++ .../async-upgrade/02-upgrade-operator.yaml | 10 ++ e2e-tests/tests/async-upgrade/03-assert.yaml | 58 +++++++++ .../async-upgrade/03-ensure-no-rollout.yaml | 5 + e2e-tests/tests/async-upgrade/04-assert.yaml | 58 +++++++++ .../async-upgrade/04-upgrade-cluster.yaml | 14 +++ .../async-upgrade/98-drop-finalizer.yaml | 5 + .../99-remove-cluster-gracefully.yaml | 16 +++ e2e-tests/tests/gr-upgrade/00-assert.yaml | 26 ++++ .../tests/gr-upgrade/00-deploy-operator.yaml | 15 +++ e2e-tests/tests/gr-upgrade/01-assert.yaml | 58 +++++++++ .../tests/gr-upgrade/01-create-cluster.yaml | 24 ++++ e2e-tests/tests/gr-upgrade/02-assert.yaml | 26 ++++ .../tests/gr-upgrade/02-upgrade-operator.yaml | 10 ++ e2e-tests/tests/gr-upgrade/03-assert.yaml | 58 +++++++++ .../gr-upgrade/03-ensure-no-rollout.yaml | 5 + e2e-tests/tests/gr-upgrade/04-assert.yaml | 42 +++++++ .../tests/gr-upgrade/04-upgrade-cluster.yaml | 16 +++ .../tests/gr-upgrade/98-drop-finalizer.yaml | 5 + .../99-remove-cluster-gracefully.yaml | 16 +++ e2e-tests/vars.sh | 1 + 29 files changed, 725 insertions(+), 7 deletions(-) create mode 100644 e2e-tests/tests/async-upgrade/00-assert.yaml create mode 100644 e2e-tests/tests/async-upgrade/00-deploy-operator.yaml create mode 100644 e2e-tests/tests/async-upgrade/01-assert.yaml create mode 100644 e2e-tests/tests/async-upgrade/01-create-cluster.yaml create mode 100644 e2e-tests/tests/async-upgrade/02-assert.yaml create mode 100644 e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml create mode 100644 e2e-tests/tests/async-upgrade/03-assert.yaml create mode 100644 e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml create mode 100644 e2e-tests/tests/async-upgrade/04-assert.yaml create mode 100644 e2e-tests/tests/async-upgrade/04-upgrade-cluster.yaml create mode 100644 e2e-tests/tests/async-upgrade/98-drop-finalizer.yaml create mode 100644 e2e-tests/tests/async-upgrade/99-remove-cluster-gracefully.yaml create mode 100644 e2e-tests/tests/gr-upgrade/00-assert.yaml create mode 100644 e2e-tests/tests/gr-upgrade/00-deploy-operator.yaml create mode 100644 e2e-tests/tests/gr-upgrade/01-assert.yaml create mode 100644 e2e-tests/tests/gr-upgrade/01-create-cluster.yaml create mode 100644 e2e-tests/tests/gr-upgrade/02-assert.yaml create mode 100644 e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml create mode 100644 e2e-tests/tests/gr-upgrade/03-assert.yaml create mode 100644 e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml create mode 100644 e2e-tests/tests/gr-upgrade/04-assert.yaml create mode 100644 e2e-tests/tests/gr-upgrade/04-upgrade-cluster.yaml create mode 100644 e2e-tests/tests/gr-upgrade/98-drop-finalizer.yaml create mode 100644 e2e-tests/tests/gr-upgrade/99-remove-cluster-gracefully.yaml diff --git a/e2e-tests/functions b/e2e-tests/functions index 99be1f722..1e8a81b16 100755 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -66,6 +66,40 @@ deploy_operator() { fi } +upgrade_operator_image() { + local image=$1 + + kubectl -n ${OPERATOR_NS:-$NAMESPACE} set image deployment/percona-server-mysql-operator manager=${image} +} + +deploy_operator_gh() { + local git_tag=$1 + + echo "applying ${git_tag}/deploy/crd.yaml" + kubectl apply \ + --server-side \ + --force-conflicts \ + -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/crd.yaml" + + local rbac="rbac" + local operator="operator" + if [ -n "${OPERATOR_NS}" ]; then + rbac="cw-rbac" + operator="cw-operator" + fi + + echo "applying ${git_tag}/deploy/${rbac}.yaml" + kubectl apply \ + -n "${OPERATOR_NS:-$NAMESPACE}" \ + -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${rbac}.yaml" + + echo "applying ${git_tag}/deploy/${operator}.yaml" + curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${operator}.yaml" \ + | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="DISABLE_TELEMETRY").value) = "true"' \ + | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="LOG_LEVEL").value) = "DEBUG"' \ + | kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply -f - +} + destroy_operator() { kubectl -n "${OPERATOR_NS:-$NAMESPACE}" delete deployment percona-server-mysql-operator --force --grace-period=0 || true if [[ $OPERATOR_NS ]]; then @@ -313,8 +347,21 @@ get_operator_pod() { -o 'jsonpath={.items[].metadata.name}' } +get_operator_image() { + kubectl get pods -n "${OPERATOR_NS:-$NAMESPACE}" \ + --selector=app.kubernetes.io/name=percona-server-mysql-operator \ + -o 'jsonpath={.items[].spec.containers[].image}' +} + get_cr() { local name_suffix=$1 + local image_mysql=${2:-${IMAGE_MYSQL}} + local image_backup=${3:-${IMAGE_BACKUP}} + local image_orchestrator=${4:-${IMAGE_ORCHESTRATOR}} + local image_router=${5:-${IMAGE_ROUTER}} + local image_toolkit=${6:-${IMAGE_TOOLKIT}} + local image_haproxy=${7:-${IMAGE_HAPROXY}} + local image_pmm_client=${8:-${IMAGE_PMM_CLIENT}} yq eval "$(printf '.metadata.name="%s"' "${test_name}${name_suffix:+-$name_suffix}")" "${DEPLOY_DIR}/cr.yaml" \ | yq eval "$(printf '.spec.initImage="%s"' "${IMAGE}")" - \ @@ -323,13 +370,13 @@ get_cr() { | yq eval '.spec.upgradeOptions.apply="disabled"' - \ | yq eval '.spec.mysql.clusterType="async"' - \ | yq eval '.spec.orchestrator.enabled=true' - \ - | yq eval "$(printf '.spec.mysql.image="%s"' "${IMAGE_MYSQL}")" - \ - | yq eval "$(printf '.spec.backup.image="%s"' "${IMAGE_BACKUP}")" - \ - | yq eval "$(printf '.spec.orchestrator.image="%s"' "${IMAGE_ORCHESTRATOR}")" - \ - | yq eval "$(printf '.spec.proxy.router.image="%s"' "${IMAGE_ROUTER}")" - \ - | yq eval "$(printf '.spec.toolkit.image="%s"' "${IMAGE_TOOLKIT}")" - \ - | yq eval "$(printf '.spec.proxy.haproxy.image="%s"' "${IMAGE_HAPROXY}")" - \ - | yq eval "$(printf '.spec.pmm.image="%s"' "${IMAGE_PMM_CLIENT}")" - \ + | yq eval "$(printf '.spec.mysql.image="%s"' "${image_mysql}")" - \ + | yq eval "$(printf '.spec.backup.image="%s"' "${image_backup}")" - \ + | yq eval "$(printf '.spec.orchestrator.image="%s"' "${image_orchestrator}")" - \ + | yq eval "$(printf '.spec.proxy.router.image="%s"' "${image_router}")" - \ + | yq eval "$(printf '.spec.toolkit.image="%s"' "${image_toolkit}")" - \ + | yq eval "$(printf '.spec.proxy.haproxy.image="%s"' "${image_haproxy}")" - \ + | yq eval "$(printf '.spec.pmm.image="%s"' "${image_pmm_client}")" - \ | if [ -n "${MINIKUBE}" ]; then yq eval '(.. | select(has("antiAffinityTopologyKey")).antiAffinityTopologyKey) |= "none"' - \ | yq eval '.spec.proxy.haproxy.resources.requests.cpu="300m"' - @@ -338,6 +385,16 @@ get_cr() { fi } +get_cr_gh() { + local name_suffix=$1 + + curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/cr.yaml" \ + | yq eval "$(printf '.metadata.name="%s"' "${test_name}${name_suffix:+-$name_suffix}")" - \ + | yq eval '.spec.secretsName="test-secrets"' - \ + | yq eval '.spec.sslSecretName="test-ssl"' - \ + | yq eval '.spec.upgradeOptions.apply="disabled"' - +} + get_client_pod() { kubectl -n "${NAMESPACE}" get pods \ --selector=name=mysql-client \ @@ -876,3 +933,43 @@ deploy_cmctl() { | kubectl apply -n "${NAMESPACE}" -f - kubectl apply -n "${NAMESPACE}" -f "${TESTS_CONFIG_DIR}/cmctl.yml" } + +latest_operator_version_in_vs() { + local latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n1) + + # if testing on release branch and version service is already updated with new operator images + # use the older version of operator as initial point for test + if [[ ${latest} == "${OPERATOR_VERSION}" ]]; then + latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n2 | head -n1) + fi + + echo ${latest} +} + +latest_operator_image_in_vs() { + local version=$(latest_operator_version_in_vs) + + curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest | jq -r '.versions[].matrix.operator[].imagePath' +} + +get_cr_with_latest_versions_in_vs() { + local version=$(latest_operator_version_in_vs) + local latest_versions=$(curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest) + + local image_mysql=$(echo ${latest_versions} | jq -r '.versions[].matrix.mysql[].imagePath') + local image_backup=$(echo ${latest_versions} | jq -r '.versions[].matrix.backup[].imagePath') + local image_orchestrator=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') + local image_router=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') + local image_toolkit=$(echo ${latest_versions} | jq -r '.versions[].matrix.toolkit[].imagePath') + local image_haproxy=$(echo ${latest_versions} | jq -r '.versions[].matrix.haproxy[].imagePath') + local image_pmm_client=$(echo ${latest_versions} | jq -r '.versions[].matrix.pmm[].imagePath') + + get_cr "" \ + ${image_mysql} \ + ${image_backup} \ + ${image_orchestrator} \ + ${image_router} \ + ${image_toolkit} \ + ${image_haproxy} \ + ${image_pmm_client} +} diff --git a/e2e-tests/run-distro.csv b/e2e-tests/run-distro.csv index a4183279a..76376f6a8 100644 --- a/e2e-tests/run-distro.csv +++ b/e2e-tests/run-distro.csv @@ -15,6 +15,8 @@ gr-security-context gr-self-healing gr-tls-cert-manager gr-users +gr-upgrade +async-upgrade haproxy init-deploy one-pod diff --git a/e2e-tests/run-pr.csv b/e2e-tests/run-pr.csv index c3fa9ff00..816bf9700 100644 --- a/e2e-tests/run-pr.csv +++ b/e2e-tests/run-pr.csv @@ -18,6 +18,8 @@ gr-security-context gr-self-healing gr-tls-cert-manager gr-users +gr-upgrade +async-upgrade haproxy init-deploy limits diff --git a/e2e-tests/run-release.csv b/e2e-tests/run-release.csv index c3fa9ff00..816bf9700 100644 --- a/e2e-tests/run-release.csv +++ b/e2e-tests/run-release.csv @@ -18,6 +18,8 @@ gr-security-context gr-self-healing gr-tls-cert-manager gr-users +gr-upgrade +async-upgrade haproxy init-deploy limits diff --git a/e2e-tests/tests/async-upgrade/00-assert.yaml b/e2e-tests/tests/async-upgrade/00-assert.yaml new file mode 100644 index 000000000..d9146fe1b --- /dev/null +++ b/e2e-tests/tests/async-upgrade/00-assert.yaml @@ -0,0 +1,26 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 120 +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: perconaservermysqls.ps.percona.com +spec: + group: ps.percona.com + names: + kind: PerconaServerMySQL + listKind: PerconaServerMySQLList + plural: perconaservermysqls + shortNames: + - ps + singular: perconaservermysql + scope: Namespaced +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: check-operator-deploy-status +timeout: 120 +commands: + - script: kubectl assert exist-enhanced deployment percona-server-mysql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1 diff --git a/e2e-tests/tests/async-upgrade/00-deploy-operator.yaml b/e2e-tests/tests/async-upgrade/00-deploy-operator.yaml new file mode 100644 index 000000000..db7ba6ad8 --- /dev/null +++ b/e2e-tests/tests/async-upgrade/00-deploy-operator.yaml @@ -0,0 +1,15 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + init_temp_dir # do this only in the first TestStep + + git_tag="v$(latest_operator_version_in_vs)" + deploy_operator_gh ${git_tag} + deploy_non_tls_cluster_secrets + deploy_tls_cluster_secrets + deploy_client diff --git a/e2e-tests/tests/async-upgrade/01-assert.yaml b/e2e-tests/tests/async-upgrade/01-assert.yaml new file mode 100644 index 000000000..8fb121ebe --- /dev/null +++ b/e2e-tests/tests/async-upgrade/01-assert.yaml @@ -0,0 +1,58 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 420 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-mysql +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-haproxy +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-orc +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: async-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + orchestrator: + ready: 3 + size: 3 + state: ready + state: ready diff --git a/e2e-tests/tests/async-upgrade/01-create-cluster.yaml b/e2e-tests/tests/async-upgrade/01-create-cluster.yaml new file mode 100644 index 000000000..38cd37d43 --- /dev/null +++ b/e2e-tests/tests/async-upgrade/01-create-cluster.yaml @@ -0,0 +1,22 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + version=$(latest_operator_version_in_vs) + init_image=$(get_operator_image) + + if [[ -z ${init_image} ]]; then + echo "failed to get operator image" + exit 1 + fi + + get_cr_with_latest_versions_in_vs \ + | yq eval "$(printf '.spec.initImage="%s"' "${init_image}")" - \ + | yq eval "$(printf '.spec.crVersion="%s"' "${version}")" - \ + | yq eval '.spec.mysql.clusterType="async"' - \ + | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/async-upgrade/02-assert.yaml b/e2e-tests/tests/async-upgrade/02-assert.yaml new file mode 100644 index 000000000..cdaf0a6b0 --- /dev/null +++ b/e2e-tests/tests/async-upgrade/02-assert.yaml @@ -0,0 +1,26 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 90 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + deployment.kubernetes.io/revision: "2" + generation: 2 + name: percona-server-mysql-operator +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: percona-server-mysql-operator + template: + metadata: + labels: + app.kubernetes.io/name: percona-server-mysql-operator +status: + availableReplicas: 1 + observedGeneration: 2 + readyReplicas: 1 + replicas: 1 + updatedReplicas: 1 diff --git a/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml b/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml new file mode 100644 index 000000000..4c919247f --- /dev/null +++ b/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml @@ -0,0 +1,10 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + upgrade_operator_image ${IMAGE} diff --git a/e2e-tests/tests/async-upgrade/03-assert.yaml b/e2e-tests/tests/async-upgrade/03-assert.yaml new file mode 100644 index 000000000..3686d85ba --- /dev/null +++ b/e2e-tests/tests/async-upgrade/03-assert.yaml @@ -0,0 +1,58 @@ +#apiVersion: kuttl.dev/v1beta1 +#kind: TestAssert +#timeout: 60 +#--- +#kind: StatefulSet +#apiVersion: apps/v1 +#metadata: +# name: async-upgrade-mysql +#status: +# observedGeneration: 1 +# replicas: 3 +# readyReplicas: 3 +# currentReplicas: 3 +# updatedReplicas: 3 +# collisionCount: 0 +#--- +#kind: StatefulSet +#apiVersion: apps/v1 +#metadata: +# name: async-upgrade-haproxy +#status: +# observedGeneration: 1 +# replicas: 3 +# readyReplicas: 3 +# updatedReplicas: 3 +#--- +#apiVersion: ps.percona.com/v1alpha1 +#kind: PerconaServerMySQL +#metadata: +# name: async-upgrade +# finalizers: +# - percona.com/delete-mysql-pods-in-order +#status: +# mysql: +# ready: 3 +# size: 3 +# state: ready +# haproxy: +# ready: 3 +# size: 3 +# state: ready +# state: ready +#--- +#apiVersion: v1 +#kind: Service +#metadata: +# name: async-upgrade-mysql +#spec: +# sessionAffinity: None +# type: ClusterIP +#--- +#apiVersion: v1 +#kind: Service +#metadata: +# name: async-upgrade-haproxy +#spec: +# sessionAffinity: None +# type: ClusterIP diff --git a/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml b/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml new file mode 100644 index 000000000..f3e0bea6d --- /dev/null +++ b/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml @@ -0,0 +1,5 @@ +#apiVersion: kuttl.dev/v1beta1 +#kind: TestStep +#commands: +# - script: |- +# sleep 25 diff --git a/e2e-tests/tests/async-upgrade/04-assert.yaml b/e2e-tests/tests/async-upgrade/04-assert.yaml new file mode 100644 index 000000000..d513057db --- /dev/null +++ b/e2e-tests/tests/async-upgrade/04-assert.yaml @@ -0,0 +1,58 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 420 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-mysql +status: + observedGeneration: 2 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-haproxy +status: + observedGeneration: 2 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-orc +status: + observedGeneration: 2 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: async-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + orchestrator: + ready: 3 + size: 3 + state: ready + state: ready diff --git a/e2e-tests/tests/async-upgrade/04-upgrade-cluster.yaml b/e2e-tests/tests/async-upgrade/04-upgrade-cluster.yaml new file mode 100644 index 000000000..61617f08e --- /dev/null +++ b/e2e-tests/tests/async-upgrade/04-upgrade-cluster.yaml @@ -0,0 +1,14 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + get_cr \ + | yq eval "$(printf '.spec.initImage="%s"' "${IMAGE}")" - \ + | yq eval "$(printf '.spec.crVersion="%s"' "${OPERATOR_VERSION}")" - \ + | yq eval '.spec.mysql.clusterType="async"' - \ + | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/async-upgrade/98-drop-finalizer.yaml b/e2e-tests/tests/async-upgrade/98-drop-finalizer.yaml new file mode 100644 index 000000000..00986f111 --- /dev/null +++ b/e2e-tests/tests/async-upgrade/98-drop-finalizer.yaml @@ -0,0 +1,5 @@ +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: async-upgrade + finalizers: [] diff --git a/e2e-tests/tests/async-upgrade/99-remove-cluster-gracefully.yaml b/e2e-tests/tests/async-upgrade/99-remove-cluster-gracefully.yaml new file mode 100644 index 000000000..909ca8012 --- /dev/null +++ b/e2e-tests/tests/async-upgrade/99-remove-cluster-gracefully.yaml @@ -0,0 +1,16 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +delete: + - apiVersion: ps.percona.com/v1alpha1 + kind: PerconaServerMySQL + metadata: + name: async-upgrade +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + destroy_operator + timeout: 60 diff --git a/e2e-tests/tests/gr-upgrade/00-assert.yaml b/e2e-tests/tests/gr-upgrade/00-assert.yaml new file mode 100644 index 000000000..d9146fe1b --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/00-assert.yaml @@ -0,0 +1,26 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 120 +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: perconaservermysqls.ps.percona.com +spec: + group: ps.percona.com + names: + kind: PerconaServerMySQL + listKind: PerconaServerMySQLList + plural: perconaservermysqls + shortNames: + - ps + singular: perconaservermysql + scope: Namespaced +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: check-operator-deploy-status +timeout: 120 +commands: + - script: kubectl assert exist-enhanced deployment percona-server-mysql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1 diff --git a/e2e-tests/tests/gr-upgrade/00-deploy-operator.yaml b/e2e-tests/tests/gr-upgrade/00-deploy-operator.yaml new file mode 100644 index 000000000..db7ba6ad8 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/00-deploy-operator.yaml @@ -0,0 +1,15 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + init_temp_dir # do this only in the first TestStep + + git_tag="v$(latest_operator_version_in_vs)" + deploy_operator_gh ${git_tag} + deploy_non_tls_cluster_secrets + deploy_tls_cluster_secrets + deploy_client diff --git a/e2e-tests/tests/gr-upgrade/01-assert.yaml b/e2e-tests/tests/gr-upgrade/01-assert.yaml new file mode 100644 index 000000000..b25cc3ce9 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/01-assert.yaml @@ -0,0 +1,58 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 420 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-mysql +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-haproxy +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: gr-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + state: ready +--- +apiVersion: v1 +kind: Service +metadata: + name: gr-upgrade-mysql +spec: + sessionAffinity: None + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: gr-upgrade-haproxy +spec: + sessionAffinity: None + type: ClusterIP diff --git a/e2e-tests/tests/gr-upgrade/01-create-cluster.yaml b/e2e-tests/tests/gr-upgrade/01-create-cluster.yaml new file mode 100644 index 000000000..8b7f4fc5c --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/01-create-cluster.yaml @@ -0,0 +1,24 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + version=$(latest_operator_version_in_vs) + init_image=$(get_operator_image) + + if [[ -z ${init_image} ]]; then + echo "failed to get operator image" + exit 1 + fi + + get_cr_with_latest_versions_in_vs \ + | yq eval "$(printf '.spec.initImage="%s"' "${init_image}")" - \ + | yq eval "$(printf '.spec.crVersion="%s"' "${version}")" - \ + | yq eval '.spec.mysql.clusterType="group-replication"' - \ + | yq eval '.spec.proxy.router.enabled=false' - \ + | yq eval '.spec.proxy.haproxy.enabled=true' - \ + | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/gr-upgrade/02-assert.yaml b/e2e-tests/tests/gr-upgrade/02-assert.yaml new file mode 100644 index 000000000..cdaf0a6b0 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/02-assert.yaml @@ -0,0 +1,26 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 90 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + deployment.kubernetes.io/revision: "2" + generation: 2 + name: percona-server-mysql-operator +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: percona-server-mysql-operator + template: + metadata: + labels: + app.kubernetes.io/name: percona-server-mysql-operator +status: + availableReplicas: 1 + observedGeneration: 2 + readyReplicas: 1 + replicas: 1 + updatedReplicas: 1 diff --git a/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml b/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml new file mode 100644 index 000000000..4c919247f --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml @@ -0,0 +1,10 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + upgrade_operator_image ${IMAGE} diff --git a/e2e-tests/tests/gr-upgrade/03-assert.yaml b/e2e-tests/tests/gr-upgrade/03-assert.yaml new file mode 100644 index 000000000..30f37d735 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/03-assert.yaml @@ -0,0 +1,58 @@ +#apiVersion: kuttl.dev/v1beta1 +#kind: TestAssert +#timeout: 60 +#--- +#kind: StatefulSet +#apiVersion: apps/v1 +#metadata: +# name: gr-upgrade-mysql +#status: +# observedGeneration: 1 +# replicas: 3 +# readyReplicas: 3 +# currentReplicas: 3 +# updatedReplicas: 3 +# collisionCount: 0 +#--- +#kind: StatefulSet +#apiVersion: apps/v1 +#metadata: +# name: gr-upgrade-haproxy +#status: +# observedGeneration: 1 +# replicas: 3 +# readyReplicas: 3 +# updatedReplicas: 3 +#--- +#apiVersion: ps.percona.com/v1alpha1 +#kind: PerconaServerMySQL +#metadata: +# name: gr-upgrade +# finalizers: +# - percona.com/delete-mysql-pods-in-order +#status: +# mysql: +# ready: 3 +# size: 3 +# state: ready +# haproxy: +# ready: 3 +# size: 3 +# state: ready +# state: ready +#--- +#apiVersion: v1 +#kind: Service +#metadata: +# name: gr-upgrade-mysql +#spec: +# sessionAffinity: None +# type: ClusterIP +#--- +#apiVersion: v1 +#kind: Service +#metadata: +# name: gr-upgrade-haproxy +#spec: +# sessionAffinity: None +# type: ClusterIP diff --git a/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml b/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml new file mode 100644 index 000000000..f3e0bea6d --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml @@ -0,0 +1,5 @@ +#apiVersion: kuttl.dev/v1beta1 +#kind: TestStep +#commands: +# - script: |- +# sleep 25 diff --git a/e2e-tests/tests/gr-upgrade/04-assert.yaml b/e2e-tests/tests/gr-upgrade/04-assert.yaml new file mode 100644 index 000000000..80fd9c81d --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/04-assert.yaml @@ -0,0 +1,42 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 420 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-mysql +status: + observedGeneration: 2 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-haproxy +status: + observedGeneration: 2 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: gr-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + state: ready diff --git a/e2e-tests/tests/gr-upgrade/04-upgrade-cluster.yaml b/e2e-tests/tests/gr-upgrade/04-upgrade-cluster.yaml new file mode 100644 index 000000000..e11b9e288 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/04-upgrade-cluster.yaml @@ -0,0 +1,16 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + get_cr \ + | yq eval "$(printf '.spec.initImage="%s"' "${IMAGE}")" - \ + | yq eval "$(printf '.spec.crVersion="%s"' "${OPERATOR_VERSION}")" - \ + | yq eval '.spec.mysql.clusterType="group-replication"' - \ + | yq eval '.spec.proxy.router.enabled=false' - \ + | yq eval '.spec.proxy.haproxy.enabled=true' - \ + | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/gr-upgrade/98-drop-finalizer.yaml b/e2e-tests/tests/gr-upgrade/98-drop-finalizer.yaml new file mode 100644 index 000000000..eda52d169 --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/98-drop-finalizer.yaml @@ -0,0 +1,5 @@ +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: gr-upgrade + finalizers: [] diff --git a/e2e-tests/tests/gr-upgrade/99-remove-cluster-gracefully.yaml b/e2e-tests/tests/gr-upgrade/99-remove-cluster-gracefully.yaml new file mode 100644 index 000000000..eadd4699d --- /dev/null +++ b/e2e-tests/tests/gr-upgrade/99-remove-cluster-gracefully.yaml @@ -0,0 +1,16 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +delete: + - apiVersion: ps.percona.com/v1alpha1 + kind: PerconaServerMySQL + metadata: + name: gr-upgrade +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + destroy_operator + timeout: 60 diff --git a/e2e-tests/vars.sh b/e2e-tests/vars.sh index 32919371a..12fae763c 100644 --- a/e2e-tests/vars.sh +++ b/e2e-tests/vars.sh @@ -9,6 +9,7 @@ export TEMP_DIR="/tmp/kuttl/ps/${test_name}" export GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) export VERSION=${VERSION:-$(echo "${GIT_BRANCH}" | sed -e 's^/^-^g; s^[.]^-^g;' | tr '[:upper:]' '[:lower:]')} +export OPERATOR_VERSION="$( Date: Mon, 2 Jun 2025 11:12:57 +0300 Subject: [PATCH 2/6] fix cluster-wide --- e2e-tests/functions | 2 ++ 1 file changed, 2 insertions(+) diff --git a/e2e-tests/functions b/e2e-tests/functions index a6af575eb..3052a90d4 100755 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -104,6 +104,8 @@ deploy_operator_gh() { if [ -n "${OPERATOR_NS}" ]; then rbac="cw-rbac" operator="cw-operator" + + create_namespace "${OPERATOR_NS}" fi echo "applying ${git_tag}/deploy/${rbac}.yaml" From 858ab89b0a479d923da2bd0e54dc1647140c6ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ege=20G=C3=BCne=C5=9F?= Date: Thu, 12 Jun 2025 10:34:37 +0300 Subject: [PATCH 3/6] run shfmt --- e2e-tests/functions | 134 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/e2e-tests/functions b/e2e-tests/functions index 3052a90d4..2a22e7f04 100755 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -85,39 +85,39 @@ deploy_operator() { } upgrade_operator_image() { - local image=$1 + local image=$1 - kubectl -n ${OPERATOR_NS:-$NAMESPACE} set image deployment/percona-server-mysql-operator manager=${image} + kubectl -n ${OPERATOR_NS:-$NAMESPACE} set image deployment/percona-server-mysql-operator manager=${image} } deploy_operator_gh() { - local git_tag=$1 + local git_tag=$1 - echo "applying ${git_tag}/deploy/crd.yaml" - kubectl apply \ - --server-side \ - --force-conflicts \ - -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/crd.yaml" + echo "applying ${git_tag}/deploy/crd.yaml" + kubectl apply \ + --server-side \ + --force-conflicts \ + -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/crd.yaml" - local rbac="rbac" - local operator="operator" - if [ -n "${OPERATOR_NS}" ]; then - rbac="cw-rbac" - operator="cw-operator" + local rbac="rbac" + local operator="operator" + if [ -n "${OPERATOR_NS}" ]; then + rbac="cw-rbac" + operator="cw-operator" - create_namespace "${OPERATOR_NS}" - fi + create_namespace "${OPERATOR_NS}" + fi - echo "applying ${git_tag}/deploy/${rbac}.yaml" + echo "applying ${git_tag}/deploy/${rbac}.yaml" kubectl apply \ - -n "${OPERATOR_NS:-$NAMESPACE}" \ - -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${rbac}.yaml" + -n "${OPERATOR_NS:-$NAMESPACE}" \ + -f "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${rbac}.yaml" - echo "applying ${git_tag}/deploy/${operator}.yaml" - curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${operator}.yaml" \ - | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="DISABLE_TELEMETRY").value) = "true"' \ - | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="LOG_LEVEL").value) = "DEBUG"' \ - | kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply -f - + echo "applying ${git_tag}/deploy/${operator}.yaml" + curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/${operator}.yaml" \ + | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="DISABLE_TELEMETRY").value) = "true"' \ + | yq eval '(select(documentIndex==1).spec.template.spec.containers[] | select(.name=="manager").env[] | select(.name=="LOG_LEVEL").value) = "DEBUG"' \ + | kubectl -n "${OPERATOR_NS:-$NAMESPACE}" apply -f - } destroy_operator() { @@ -368,20 +368,20 @@ get_operator_pod() { } get_operator_image() { - kubectl get pods -n "${OPERATOR_NS:-$NAMESPACE}" \ - --selector=app.kubernetes.io/name=percona-server-mysql-operator \ - -o 'jsonpath={.items[].spec.containers[].image}' + kubectl get pods -n "${OPERATOR_NS:-$NAMESPACE}" \ + --selector=app.kubernetes.io/name=percona-server-mysql-operator \ + -o 'jsonpath={.items[].spec.containers[].image}' } get_cr() { local name_suffix=$1 - local image_mysql=${2:-${IMAGE_MYSQL}} - local image_backup=${3:-${IMAGE_BACKUP}} - local image_orchestrator=${4:-${IMAGE_ORCHESTRATOR}} - local image_router=${5:-${IMAGE_ROUTER}} - local image_toolkit=${6:-${IMAGE_TOOLKIT}} - local image_haproxy=${7:-${IMAGE_HAPROXY}} - local image_pmm_client=${8:-${IMAGE_PMM_CLIENT}} + local image_mysql=${2:-${IMAGE_MYSQL}} + local image_backup=${3:-${IMAGE_BACKUP}} + local image_orchestrator=${4:-${IMAGE_ORCHESTRATOR}} + local image_router=${5:-${IMAGE_ROUTER}} + local image_toolkit=${6:-${IMAGE_TOOLKIT}} + local image_haproxy=${7:-${IMAGE_HAPROXY}} + local image_pmm_client=${8:-${IMAGE_PMM_CLIENT}} yq eval "$(printf '.metadata.name="%s"' "${test_name}${name_suffix:+-$name_suffix}")" "${DEPLOY_DIR}/cr.yaml" \ | yq eval "$(printf '.spec.initImage="%s"' "${IMAGE}")" - \ @@ -406,13 +406,13 @@ get_cr() { } get_cr_gh() { - local name_suffix=$1 + local name_suffix=$1 - curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/cr.yaml" \ - | yq eval "$(printf '.metadata.name="%s"' "${test_name}${name_suffix:+-$name_suffix}")" - \ - | yq eval '.spec.secretsName="test-secrets"' - \ - | yq eval '.spec.sslSecretName="test-ssl"' - \ - | yq eval '.spec.upgradeOptions.apply="disabled"' - + curl -s "https://raw.githubusercontent.com/percona/percona-server-mysql-operator/${git_tag}/deploy/cr.yaml" \ + | yq eval "$(printf '.metadata.name="%s"' "${test_name}${name_suffix:+-$name_suffix}")" - \ + | yq eval '.spec.secretsName="test-secrets"' - \ + | yq eval '.spec.sslSecretName="test-ssl"' - \ + | yq eval '.spec.upgradeOptions.apply="disabled"' - } get_client_pod() { @@ -955,41 +955,41 @@ deploy_cmctl() { } latest_operator_version_in_vs() { - local latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n1) + local latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n1) - # if testing on release branch and version service is already updated with new operator images - # use the older version of operator as initial point for test - if [[ ${latest} == "${OPERATOR_VERSION}" ]]; then - latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n2 | head -n1) - fi + # if testing on release branch and version service is already updated with new operator images + # use the older version of operator as initial point for test + if [[ ${latest} == "${OPERATOR_VERSION}" ]]; then + latest=$(curl -s https://check.percona.com/versions/v1/ps-operator | jq -r '.versions[].operator' | sort -V | tail -n2 | head -n1) + fi - echo ${latest} + echo ${latest} } latest_operator_image_in_vs() { - local version=$(latest_operator_version_in_vs) + local version=$(latest_operator_version_in_vs) - curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest | jq -r '.versions[].matrix.operator[].imagePath' + curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest | jq -r '.versions[].matrix.operator[].imagePath' } get_cr_with_latest_versions_in_vs() { - local version=$(latest_operator_version_in_vs) - local latest_versions=$(curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest) - - local image_mysql=$(echo ${latest_versions} | jq -r '.versions[].matrix.mysql[].imagePath') - local image_backup=$(echo ${latest_versions} | jq -r '.versions[].matrix.backup[].imagePath') - local image_orchestrator=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') - local image_router=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') - local image_toolkit=$(echo ${latest_versions} | jq -r '.versions[].matrix.toolkit[].imagePath') - local image_haproxy=$(echo ${latest_versions} | jq -r '.versions[].matrix.haproxy[].imagePath') - local image_pmm_client=$(echo ${latest_versions} | jq -r '.versions[].matrix.pmm[].imagePath') - - get_cr "" \ - ${image_mysql} \ - ${image_backup} \ - ${image_orchestrator} \ - ${image_router} \ - ${image_toolkit} \ - ${image_haproxy} \ - ${image_pmm_client} + local version=$(latest_operator_version_in_vs) + local latest_versions=$(curl -s https://check.percona.com/versions/v1/ps-operator/${version}/latest) + + local image_mysql=$(echo ${latest_versions} | jq -r '.versions[].matrix.mysql[].imagePath') + local image_backup=$(echo ${latest_versions} | jq -r '.versions[].matrix.backup[].imagePath') + local image_orchestrator=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') + local image_router=$(echo ${latest_versions} | jq -r '.versions[].matrix.orchestrator[].imagePath') + local image_toolkit=$(echo ${latest_versions} | jq -r '.versions[].matrix.toolkit[].imagePath') + local image_haproxy=$(echo ${latest_versions} | jq -r '.versions[].matrix.haproxy[].imagePath') + local image_pmm_client=$(echo ${latest_versions} | jq -r '.versions[].matrix.pmm[].imagePath') + + get_cr "" \ + ${image_mysql} \ + ${image_backup} \ + ${image_orchestrator} \ + ${image_router} \ + ${image_toolkit} \ + ${image_haproxy} \ + ${image_pmm_client} } From 711bd42933e8d58324c0b9468e63da98f3053a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ege=20G=C3=BCne=C5=9F?= Date: Thu, 12 Jun 2025 10:36:45 +0300 Subject: [PATCH 4/6] ensure no rollout --- e2e-tests/tests/async-upgrade/03-assert.yaml | 128 ++++++++++-------- .../async-upgrade/03-ensure-no-rollout.yaml | 10 +- e2e-tests/tests/gr-upgrade/03-assert.yaml | 116 ++++++++-------- .../gr-upgrade/03-ensure-no-rollout.yaml | 10 +- 4 files changed, 138 insertions(+), 126 deletions(-) diff --git a/e2e-tests/tests/async-upgrade/03-assert.yaml b/e2e-tests/tests/async-upgrade/03-assert.yaml index 3686d85ba..488dfda06 100644 --- a/e2e-tests/tests/async-upgrade/03-assert.yaml +++ b/e2e-tests/tests/async-upgrade/03-assert.yaml @@ -1,58 +1,70 @@ -#apiVersion: kuttl.dev/v1beta1 -#kind: TestAssert -#timeout: 60 -#--- -#kind: StatefulSet -#apiVersion: apps/v1 -#metadata: -# name: async-upgrade-mysql -#status: -# observedGeneration: 1 -# replicas: 3 -# readyReplicas: 3 -# currentReplicas: 3 -# updatedReplicas: 3 -# collisionCount: 0 -#--- -#kind: StatefulSet -#apiVersion: apps/v1 -#metadata: -# name: async-upgrade-haproxy -#status: -# observedGeneration: 1 -# replicas: 3 -# readyReplicas: 3 -# updatedReplicas: 3 -#--- -#apiVersion: ps.percona.com/v1alpha1 -#kind: PerconaServerMySQL -#metadata: -# name: async-upgrade -# finalizers: -# - percona.com/delete-mysql-pods-in-order -#status: -# mysql: -# ready: 3 -# size: 3 -# state: ready -# haproxy: -# ready: 3 -# size: 3 -# state: ready -# state: ready -#--- -#apiVersion: v1 -#kind: Service -#metadata: -# name: async-upgrade-mysql -#spec: -# sessionAffinity: None -# type: ClusterIP -#--- -#apiVersion: v1 -#kind: Service -#metadata: -# name: async-upgrade-haproxy -#spec: -# sessionAffinity: None -# type: ClusterIP +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 60 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-mysql +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-haproxy +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: async-upgrade-orc +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: async-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + state: ready +--- +apiVersion: v1 +kind: Service +metadata: + name: async-upgrade-mysql +spec: + sessionAffinity: None + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: async-upgrade-haproxy +spec: + sessionAffinity: None + type: ClusterIP diff --git a/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml b/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml index f3e0bea6d..e091f9f3c 100644 --- a/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml +++ b/e2e-tests/tests/async-upgrade/03-ensure-no-rollout.yaml @@ -1,5 +1,5 @@ -#apiVersion: kuttl.dev/v1beta1 -#kind: TestStep -#commands: -# - script: |- -# sleep 25 +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + sleep 25 diff --git a/e2e-tests/tests/gr-upgrade/03-assert.yaml b/e2e-tests/tests/gr-upgrade/03-assert.yaml index 30f37d735..75f4aef0a 100644 --- a/e2e-tests/tests/gr-upgrade/03-assert.yaml +++ b/e2e-tests/tests/gr-upgrade/03-assert.yaml @@ -1,58 +1,58 @@ -#apiVersion: kuttl.dev/v1beta1 -#kind: TestAssert -#timeout: 60 -#--- -#kind: StatefulSet -#apiVersion: apps/v1 -#metadata: -# name: gr-upgrade-mysql -#status: -# observedGeneration: 1 -# replicas: 3 -# readyReplicas: 3 -# currentReplicas: 3 -# updatedReplicas: 3 -# collisionCount: 0 -#--- -#kind: StatefulSet -#apiVersion: apps/v1 -#metadata: -# name: gr-upgrade-haproxy -#status: -# observedGeneration: 1 -# replicas: 3 -# readyReplicas: 3 -# updatedReplicas: 3 -#--- -#apiVersion: ps.percona.com/v1alpha1 -#kind: PerconaServerMySQL -#metadata: -# name: gr-upgrade -# finalizers: -# - percona.com/delete-mysql-pods-in-order -#status: -# mysql: -# ready: 3 -# size: 3 -# state: ready -# haproxy: -# ready: 3 -# size: 3 -# state: ready -# state: ready -#--- -#apiVersion: v1 -#kind: Service -#metadata: -# name: gr-upgrade-mysql -#spec: -# sessionAffinity: None -# type: ClusterIP -#--- -#apiVersion: v1 -#kind: Service -#metadata: -# name: gr-upgrade-haproxy -#spec: -# sessionAffinity: None -# type: ClusterIP +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 60 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-mysql +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + currentReplicas: 3 + updatedReplicas: 3 + collisionCount: 0 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + name: gr-upgrade-haproxy +status: + observedGeneration: 1 + replicas: 3 + readyReplicas: 3 + updatedReplicas: 3 +--- +apiVersion: ps.percona.com/v1alpha1 +kind: PerconaServerMySQL +metadata: + name: gr-upgrade + finalizers: + - percona.com/delete-mysql-pods-in-order +status: + mysql: + ready: 3 + size: 3 + state: ready + haproxy: + ready: 3 + size: 3 + state: ready + state: ready +--- +apiVersion: v1 +kind: Service +metadata: + name: gr-upgrade-mysql +spec: + sessionAffinity: None + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: gr-upgrade-haproxy +spec: + sessionAffinity: None + type: ClusterIP diff --git a/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml b/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml index f3e0bea6d..e091f9f3c 100644 --- a/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml +++ b/e2e-tests/tests/gr-upgrade/03-ensure-no-rollout.yaml @@ -1,5 +1,5 @@ -#apiVersion: kuttl.dev/v1beta1 -#kind: TestStep -#commands: -# - script: |- -# sleep 25 +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + sleep 25 From e7773f69c2ace3542ac4229bece6aa7bdcf3cd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ege=20G=C3=BCne=C5=9F?= Date: Thu, 12 Jun 2025 13:02:40 +0300 Subject: [PATCH 5/6] fix operator upgrade on cluster-wide --- e2e-tests/functions | 1 + e2e-tests/tests/async-upgrade/02-assert.yaml | 26 ------------------- .../async-upgrade/02-upgrade-operator.yaml | 4 ++- e2e-tests/tests/gr-upgrade/02-assert.yaml | 26 ------------------- .../tests/gr-upgrade/02-upgrade-operator.yaml | 4 ++- 5 files changed, 7 insertions(+), 54 deletions(-) delete mode 100644 e2e-tests/tests/async-upgrade/02-assert.yaml delete mode 100644 e2e-tests/tests/gr-upgrade/02-assert.yaml diff --git a/e2e-tests/functions b/e2e-tests/functions index 09edc599d..3448f42c0 100755 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -646,6 +646,7 @@ wait_cluster_consistency_gr() { wait_pod() { local pod=$1 + local ns=${2:-${NAMESPACE}} set +o xtrace retry=0 diff --git a/e2e-tests/tests/async-upgrade/02-assert.yaml b/e2e-tests/tests/async-upgrade/02-assert.yaml deleted file mode 100644 index cdaf0a6b0..000000000 --- a/e2e-tests/tests/async-upgrade/02-assert.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -timeout: 90 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - deployment.kubernetes.io/revision: "2" - generation: 2 - name: percona-server-mysql-operator -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: percona-server-mysql-operator - template: - metadata: - labels: - app.kubernetes.io/name: percona-server-mysql-operator -status: - availableReplicas: 1 - observedGeneration: 2 - readyReplicas: 1 - replicas: 1 - updatedReplicas: 1 diff --git a/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml b/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml index 4c919247f..b86f22601 100644 --- a/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml +++ b/e2e-tests/tests/async-upgrade/02-upgrade-operator.yaml @@ -1,10 +1,12 @@ apiVersion: kuttl.dev/v1beta1 kind: TestStep commands: - - script: |- + - timeout: 120 + script: |- set -o errexit set -o xtrace source ../../functions upgrade_operator_image ${IMAGE} + wait_deployment percona-server-mysql-operator ${OPERATOR_NS:-$NAMESPACE} diff --git a/e2e-tests/tests/gr-upgrade/02-assert.yaml b/e2e-tests/tests/gr-upgrade/02-assert.yaml deleted file mode 100644 index cdaf0a6b0..000000000 --- a/e2e-tests/tests/gr-upgrade/02-assert.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -timeout: 90 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - deployment.kubernetes.io/revision: "2" - generation: 2 - name: percona-server-mysql-operator -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: percona-server-mysql-operator - template: - metadata: - labels: - app.kubernetes.io/name: percona-server-mysql-operator -status: - availableReplicas: 1 - observedGeneration: 2 - readyReplicas: 1 - replicas: 1 - updatedReplicas: 1 diff --git a/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml b/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml index 4c919247f..b86f22601 100644 --- a/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml +++ b/e2e-tests/tests/gr-upgrade/02-upgrade-operator.yaml @@ -1,10 +1,12 @@ apiVersion: kuttl.dev/v1beta1 kind: TestStep commands: - - script: |- + - timeout: 120 + script: |- set -o errexit set -o xtrace source ../../functions upgrade_operator_image ${IMAGE} + wait_deployment percona-server-mysql-operator ${OPERATOR_NS:-$NAMESPACE} From 14b92d7e0c1f2eeb454215ad8877c680b92ebc2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ege=20G=C3=BCne=C5=9F?= Date: Thu, 12 Jun 2025 13:03:01 +0300 Subject: [PATCH 6/6] run only upgrade tests --- e2e-tests/run-pr.csv | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/e2e-tests/run-pr.csv b/e2e-tests/run-pr.csv index 816bf9700..582249e58 100644 --- a/e2e-tests/run-pr.csv +++ b/e2e-tests/run-pr.csv @@ -1,36 +1,2 @@ -version-service -async-ignore-annotations -auto-config -config -config-router -demand-backup -gr-demand-backup -gr-demand-backup-haproxy -gr-finalizer -gr-haproxy -gr-ignore-annotations -gr-init-deploy -gr-one-pod -gr-recreate -gr-scaling -gr-scheduled-backup -gr-security-context -gr-self-healing -gr-tls-cert-manager -gr-users gr-upgrade async-upgrade -haproxy -init-deploy -limits -monitoring -one-pod -operator-self-healing -recreate -scaling -scheduled-backup -service-per-pod -sidecars -smart-update -tls-cert-manager -users