You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by mb...@apache.org on 2022/12/02 10:38:39 UTC
[flink-kubernetes-operator] branch main updated: Revert "[FLINK-30199] Script for running Kubernetes Operator e2e tests manually"
This is an automated email from the ASF dual-hosted git repository.
mbalassi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git
The following commit(s) were added to refs/heads/main by this push:
new e188c3ca Revert "[FLINK-30199] Script for running Kubernetes Operator e2e tests manually"
e188c3ca is described below
commit e188c3ca8b6b47a0ab94cd9b39d1afad58afbe56
Author: Gabor Somogyi <ga...@apple.com>
AuthorDate: Fri Dec 2 11:38:32 2022 +0100
Revert "[FLINK-30199] Script for running Kubernetes Operator e2e tests manually"
The new test suite is unstable in the CI, will revisit after the upcoming release.
---
.github/workflows/ci.yml | 63 +++++++-
docs/content/docs/development/guide.md | 33 -----
e2e-tests/run_tests.sh | 253 ---------------------------------
e2e-tests/utils.sh | 81 +----------
4 files changed, 59 insertions(+), 371 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7d5fd0b6..c48b631c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -59,8 +59,9 @@ jobs:
start_minikube
- name: Install cert-manager
run: |
- source e2e-tests/utils.sh
- install_cert_manager
+ kubectl get pods -A
+ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
+ kubectl -n cert-manager wait --all=true --for=condition=Available --timeout=300s deploy
- name: Build image
run: |
export SHELL=/bin/bash
@@ -94,8 +95,29 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- version: [ "v1_16","v1_15","v1_14","v1_13" ]
- namespace: [ "default","flink" ]
+ version: ["v1_16","v1_15","v1_14","v1_13"]
+ namespace: ["default","flink"]
+ mode: ["native", "standalone"]
+ test:
+ - test_application_kubernetes_ha.sh
+ - test_application_operations.sh
+ - test_sessionjob_kubernetes_ha.sh
+ - test_sessionjob_operations.sh
+ - test_multi_sessionjob.sh
+ include:
+ - namespace: flink
+ extraArgs: '--create-namespace --set "watchNamespaces={default,flink}"'
+ - version: v1_16
+ image: flink:1.16
+ - version: v1_15
+ image: flink:1.15
+ - version: v1_14
+ image: flink:1.14
+ - version: v1_13
+ image: flink:1.13
+ exclude:
+ - namespace: default
+ test: test_multi_sessionjob.sh
name: e2e_ci
steps:
- uses: actions/checkout@v2
@@ -111,10 +133,39 @@ jobs:
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- - name: Run the tests
+ - name: Start minikube
run: |
source e2e-tests/utils.sh
- bash e2e-tests/run_tests.sh -f ${{ matrix.version }} -n ${{ matrix.namespace }} -m native,standalone -d test_multi_sessionjob.sh test_application_operations.sh test_application_kubernetes_ha.sh test_sessionjob_kubernetes_ha.sh test_sessionjob_operations.sh || exit 1
+ start_minikube
+ - name: Install cert-manager
+ run: |
+ kubectl get pods -A
+ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
+ kubectl -n cert-manager wait --all=true --for=condition=Available --timeout=300s deploy
+ - name: Build image
+ run: |
+ export SHELL=/bin/bash
+ export DOCKER_BUILDKIT=1
+ eval $(minikube -p minikube docker-env)
+ docker build --progress=plain --no-cache -f ./Dockerfile -t flink-kubernetes-operator:ci-latest --progress plain .
+ docker images
+ - name: Start the operator
+ run: |
+ helm --debug install flink-kubernetes-operator -n ${{ matrix.namespace }} helm/flink-kubernetes-operator --set image.repository=flink-kubernetes-operator --set image.tag=ci-latest ${{ matrix.extraArgs }}
+ kubectl wait --for=condition=Available --timeout=120s -n ${{ matrix.namespace }} deploy/flink-kubernetes-operator
+ kubectl get pods
+ - name: Run Flink e2e tests
+ run: |
+ sed -i "s/image: flink:.*/image: ${{ matrix.image }}/" e2e-tests/data/*.yaml
+ sed -i "s/flinkVersion: .*/flinkVersion: ${{ matrix.version }}/" e2e-tests/data/*.yaml
+ sed -i "s/mode: .*/mode: ${{ matrix.mode }}/" e2e-tests/data/*.yaml
+ git diff HEAD
+ echo "Running e2e-tests/$test"
+ bash e2e-tests/${{ matrix.test }} || exit 1
+ git reset --hard
+ - name: Stop the operator
+ run: |
+ helm uninstall -n ${{ matrix.namespace }} flink-kubernetes-operator
- name: Stop minikube
run: |
source e2e-tests/utils.sh
diff --git a/docs/content/docs/development/guide.md b/docs/content/docs/development/guide.md
index d786aeb6..402a5f71 100644
--- a/docs/content/docs/development/guide.md
+++ b/docs/content/docs/development/guide.md
@@ -82,28 +82,6 @@ To uninstall you can simply call:
helm uninstall flink-kubernetes-operator
```
-### Installing the operator locally using the e2e test scripts
-
-Alternatively you can skip [Building docker images](#building-docker-images) and
-[Installing the operator locally](#installing-the-operator-locally) altogether and with the
-use of the e2e test scripts you can install the Flink Kubernetes Operator from the local codebase.
-
-You still need to install [Docker Desktop](https://www.docker.com/products/docker-desktop),
-[minikube](https://minikube.sigs.k8s.io/docs/start/) and [helm](https://helm.sh/docs/intro/quickstart/) locally.
-
-The e2e test scripts automate the following steps:
-- Starting minikube (if needed)
-- Installing the Certification Manager (overwriting the existing one if already installed)
-- Compiling the Flink Kubernetes Operator binary from the local codebase
-- Building the Flink Kubernetes Operator Docker image using the previously compiled binary
-- Installing the freshly created Kubernetes Operator to the specified namespace
-- Run a single test to check if the operator is working as expected
-
-It could be done simplz by calling the following script:
-```bash
-./e2e-tests/run_tests.sh -k
-```
-
### Running the operator from the IDE
You can run or debug the `FlinkOperator` from your preferred IDE. The operator itself is accessing the deployed Flink clusters through the REST interface. When running locally the `rest.port`, `rest.address` and `kubernetes.rest-service.exposed.type` Flink configuration parameters must be modified.
@@ -174,14 +152,3 @@ Considering the cost of running the builds, the stability, and the maintainabili
All the unit tests, integration tests, and the end-to-end tests will be triggered for each PR.
Note: Please make sure the CI passed before merging.
-
-## Running the e2e tests locally
-
-After installing [Docker Desktop](https://www.docker.com/products/docker-desktop),
-[minikube](https://minikube.sigs.k8s.io/docs/start/) and [helm](https://helm.sh/docs/intro/quickstart/) locally
-you will be able to run the end-to-end tests locally using the `e2e-tests/run_tests.sh` script.
-
-For usage examples, please execute it with the following command:
-```bash
-./e2e-tests/run_tests.sh -h
-```
diff --git a/e2e-tests/run_tests.sh b/e2e-tests/run_tests.sh
deleted file mode 100755
index a888168e..00000000
--- a/e2e-tests/run_tests.sh
+++ /dev/null
@@ -1,253 +0,0 @@
-#!/usr/bin/env bash
-################################################################################
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-################################################################################
-
-
-readlink -f "$0" 2>/dev/null
-if [[ $? -ne 0 ]]; then
- echo
- echo "-----------------------------------"
- echo "Please make sure that 'readlink -f \"$0\"' works."
- echo "Maybe:"
- echo " brew install coreutils"
- echo " alias readlink=greadlink"
- echo "-----------------------------------"
- echo
- exit 1
-fi
-
-ROOT_DIR=$(dirname $(dirname "$(readlink -f "$0")"))
-source "${ROOT_DIR}/e2e-tests/utils.sh"
-
-function help() {
- # Display Help
- echo "Script to run the flink kubernetes operator e2e tests."
- echo
- echo "Syntax: run_tests.sh [-i|-f|-m|-n|-s|-c|-h] scripts"
- echo
- echo "Options:"
- echo " -i The Flink image to use (eg. flink:1.16 / flink:1.15 / flink:1.14). Only needed if the default docker image for the Flink version need to be changed."
- echo " -f The Flink version(s) to use (eg. v1_16 / v1_15 / v1_14). Could contain multiple values separated by ','"
- echo " -m The run mode(s) to use (eg. native / standalone). Could contain multiple values separated by ','"
- echo " -n The namespace(s) to install the operator to. Could contain multiple values separated by ','"
- echo " -s If set then skips the operator build (Make sure that minikube already has a version of the operator with the name of 'flink-kubernetes-operator:ci-latest')."
- echo " -k After the test run the operator is not uninstalled. Will exit after the first test run."
- echo " -d If set then the script will print debug logs."
- echo " -h Print this help."
- echo
- echo "On MAC do not forget to start the 'minikube tunnel' in a different terminal."
- echo "Visit this terminal from time to time, as it will ask you for root password."
- echo "This is needed to forward the rest endpoint requests to port 80."
- echo
- echo "Examples:"
- echo " Start the test_application_operations.sh (default) test on a newly built and deployed operator."
- echo " The test will use the default settings for every config value:"
- echo " ./run_tests.sh"
- echo
- echo " Start a single test using the currently compiled docker image of the operator which should be available on the minikube."
- echo " The operator will be deployed in the 'flink' namespace:"
- echo " ./run_tests.sh -s -namespace flink"
- echo
- echo " Run multiple tests:"
- echo " ./run_tests.sh test_application_operations.sh test_sessionjob_operations.sh"
- echo
- echo " Run a single test and show debug logs:"
- echo " ./run_tests.sh -d"
- echo
- echo " Use every possible configuration:"
- echo " ./run_tests.sh -i 'flink:1.15' -f 'v1_15' -m standalone -n flink -s -k test_sessionjob_operations.sh"
- echo
- echo " Run every possible test configuration:"
- echo " ./run_tests.sh -f v1_16,v1_15,v1_14,v1_13 -m native,standalone -n flink,default -d test_multi_sessionjob.sh test_application_operations.sh test_application_kubernetes_ha.sh test_sessionjob_kubernetes_ha.sh test_sessionjob_operations.sh"
- echo
- echo
- echo " Use the script to compile and deploy the current version of the operator, and check the deployment:"
- echo " ./run_tests.sh -k"
- echo
-}
-
-# Default values
-image=""
-flink_versions="v1_16"
-modes="native"
-namespaces="default"
-skip_operator="false"
-keep_operator="false"
-
-# Flink version to Flink docker image mapping. Add new version and image here if it is supported.
-versions=("v1_16" "v1_15" "v1_14" "v1_13")
-images=("flink:1.16" "flink:1.15" "flink:1.14" "flink:1.13")
-
-while getopts "i:f:m:n:hsdk" option; do
- case $option in
- i) image=$OPTARG;;
- f) flink_versions=$OPTARG;;
- m) modes=$OPTARG;;
- n) namespaces=$OPTARG;;
- s) skip_operator="true";;
- k) keep_operator="true";;
- d) DEBUG="true";;
- h) # display Help
- help
- exit;;
- \?) # Invalid option
- echo "Error: Invalid option"
- exit;;
- esac
-done
-
-scripts=${@:$OPTIND}
-if [[ -z "${scripts}" ]]; then
- scripts="test_application_operations.sh"
-fi
-
-echo
-echo "-----------------------------------"
-echo "Start testing with the following parameters:"
-echo " Image: ${image}"
-echo " Flink version(s): ${flink_versions}"
-echo " Mode(s): ${modes}"
-echo " Operator namespace(s): ${namespaces}"
-echo " Skip operator build: ${skip_operator}"
-echo " Script() to run: ${scripts}"
-echo "-----------------------------------"
-
-pushd $ROOT_DIR
-echo
-echo "-----------------------------------"
-echo "Starting minikube"
-echo "-----------------------------------"
-echo
-time start_minikube
-
-echo
-echo "-----------------------------------"
-echo "Installing certificate manager"
-echo "-----------------------------------"
-echo
-time install_cert_manager
-
-if [[ "$skip_operator" = true ]]; then
- echo
- echo "-----------------------------------"
- echo "Skipping operator build"
- echo "-----------------------------------"
-else
- echo
- echo "-----------------------------------"
- echo "Building operator"
- echo "-----------------------------------"
- echo
- time build_image
-fi
-
-if [[ ! -z $(get_operator_pod_name 2>/dev/null) ]]; then
- operator_pod_namespace=$(get_operator_pod_namespace)
- echo
- echo "-----------------------------------"
- echo "Found existing operator. Please remove and restart the script. The following commands could be used:"
- echo " helm delete flink-kubernetes-operator -n ${operator_pod_namespace}"
- echo " kubectl delete namespace flink"
- echo " kubectl delete serviceaccount flink"
- echo " kubectl delete role flink"
- echo " kubectl delete rolebinding flink-role-binding"
- echo "-----------------------------------"
- echo
- exit 1;
-fi
-
-IFS=',' read -ra flink_version_list <<< "${flink_versions}"
-IFS=',' read -ra mode_list <<< "${modes}"
-IFS=',' read -ra namespace_list <<< "${namespaces}"
-
-for flink_version in ${flink_version_list[@]}; do
- test_image=${image}
- if [[ -z ${test_image} ]]; then
- position=$(get_position ${flink_version} ${versions[@]})
- if [[ -z ${position} ]]; then
- echo
- echo "-----------------------------------"
- echo "Unknown Flink version ${flink_version}, please provide an image or a known Flink version"
- echo "-----------------------------------"
- echo
- exit 1;
- fi
- test_image=${images[${position}]};
- fi
-
- for mode in ${mode_list[@]}; do
- prepare_tests ${test_image} ${flink_version} ${mode}
- for namespace in ${namespace_list[@]}; do
- for script in ${scripts}; do
- if [[ ${script} = "test_multi_sessionjob.sh" && ${namespace} = "default" ]]; then
- echo
- echo "-----------------------------------"
- echo "Skipping ${script} on 'default' namespace, since an equivalent test will/should run on the 'flink' namespace and we want to save CPU time"
- echo "-----------------------------------"
- echo
- continue
- fi
- echo
- echo "-----------------------------------"
- echo "Installing operator to '${namespace}' namespace"
- echo "-----------------------------------"
- echo
- install_operator $namespace
- echo
- echo "-----------------------------------"
- echo "Running test:"
- echo " Namespace: ${namespace}"
- echo " Flink version: ${flink_version}"
- echo " Flink image: ${test_image}"
- echo " Mode: ${mode}"
- echo " Script: ${script}"
- echo "-----------------------------------"
- echo
- time bash $ROOT_DIR/e2e-tests/${script}
- if [[ $? -ne 0 ]]; then
- echo
- echo "-----------------------------------"
- echo "Test failed: $ROOT_DIR/e2e-tests/${script}"
- echo "-----------------------------------"
- echo
- exit 1
- fi
- echo
- echo "-----------------------------------"
- echo "Test succeeded: $ROOT_DIR/e2e-tests/${script}"
- echo "-----------------------------------"
- if [[ "$keep_operator" = true ]]; then
- echo
- echo "-----------------------------------"
- echo "Keeping operator and exiting"
- echo "-----------------------------------"
- echo
- exit 0
- fi
- echo
- echo "-----------------------------------"
- echo "Removing operator from '${namespace}' namespace"
- echo "-----------------------------------"
- echo
- uninstall_operator $namespace
- done
- done
- revert_tests
- done
-done
-popd
diff --git a/e2e-tests/utils.sh b/e2e-tests/utils.sh
index 8f3af9c4..e38f9631 100755
--- a/e2e-tests/utils.sh
+++ b/e2e-tests/utils.sh
@@ -60,12 +60,7 @@ function wait_for_status {
function assert_available_slots() {
expected=$1
CLUSTER_ID=$2
- if [[ $OSTYPE == 'darwin'* ]]; then
- # docker ingress forwards the ports to the localhost instead of the minikube ip on MacOS
- ip="localhost"
- else
- ip=$(minikube ip)
- fi
+ ip=$(minikube ip)
actual=$(curl "http://$ip/default/${CLUSTER_ID}/overview" 2>/dev/null | grep -E -o '"slots-available":[0-9]+' | awk -F':' '{print $2}')
if [[ "${expected}" != "${actual}" ]]; then
echo "Expected available slots: ${expected}, actual: ${actual}"
@@ -217,7 +212,7 @@ function stop_minikube {
}
function cleanup_and_exit() {
- if [[ $TRAPPED_EXIT_CODE != 0 ]]; then
+ if [ $TRAPPED_EXIT_CODE != 0 ];then
debug_and_show_logs
fi
@@ -270,75 +265,3 @@ function create_namespace() {
fi;
}
-
-function install_cert_manager() {
- if [[ -n ${DEBUG} ]]; then
- kubectl get pods -A
- fi
- kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
- kubectl -n cert-manager wait --all=true --for=condition=Available --timeout=300s deploy
-}
-
-function build_image() {
- export SHELL=/bin/bash
- export DOCKER_BUILDKIT=1
- eval $(minikube docker-env)
- docker build --progress=plain --no-cache -f ./Dockerfile -t flink-kubernetes-operator:ci-latest --progress plain .
- if [[ -n ${DEBUG} ]]; then
- docker images
- fi
-}
-
-function install_operator() {
- local namespace=$1
-
- create_namespace flink
- if [[ -n ${DEBUG} ]]; then
- debug="--debug"
- fi
- helm ${debug} install flink-kubernetes-operator -n ${namespace} helm/flink-kubernetes-operator --set image.repository=flink-kubernetes-operator --set image.tag=ci-latest --create-namespace --set 'watchNamespaces={default,flink}'
- kubectl wait --for=condition=Available --timeout=120s -n ${namespace} deploy/flink-kubernetes-operator
- if [[ -n ${DEBUG} ]]; then
- kubectl get pods
- fi
-}
-
-function uninstall_operator() {
- local namespace=$1
-
- helm uninstall -n ${namespace} flink-kubernetes-operator
- kubectl delete namespace flink
- kubectl delete serviceaccount flink
- kubectl delete role flink
- kubectl delete rolebinding flink-role-binding
-}
-
-function prepare_tests() {
- local image=$1
- local flink_version=$2
- local mode="$3"
-
- sed -i -e "s/image: flink:.*/image: ${image}/" e2e-tests/data/*.yaml
- sed -i -e "s/flinkVersion: .*/flinkVersion: ${flink_version}/" e2e-tests/data/*.yaml
- sed -i -e "s/mode: .*/mode: ${mode}/" e2e-tests/data/*.yaml
- if [[ -n ${DEBUG} ]]; then
- git --no-pager diff HEAD
- fi
-}
-
-function revert_tests() {
- git checkout e2e-tests/data
- rm e2e-tests/data/*.yaml-e
-}
-
-function get_position() {
- local input_value=$1
- shift
- local input_array=("$@")
-
- for i in "${!input_array[@]}"; do
- if [[ "${input_array[$i]}" = "${input_value}" ]]; then
- echo "${i}";
- fi
- done
-}