From 0f5a6302e4b089e825e88b3bb13487d55e741677 Mon Sep 17 00:00:00 2001 From: KMAnju-2021 Date: Thu, 19 Dec 2024 11:21:41 +0530 Subject: [PATCH] adding CNCF runner Signed-off-by: KMAnju-2021 --- .github/workflows/kind.yml | 66 ++++++++++++++++++++++++++++++++++++++ ci/kind/kind-setup.sh | 32 +++++++++++++++++- ci/kind/test-e2e-kind.sh | 34 ++++++++++++++++++-- 3 files changed, 129 insertions(+), 3 deletions(-) diff --git a/.github/workflows/kind.yml b/.github/workflows/kind.yml index 168bf029b33..8f9a2dda0bb 100644 --- a/.github/workflows/kind.yml +++ b/.github/workflows/kind.yml @@ -277,6 +277,72 @@ jobs: path: log.tar.gz retention-days: 30 + test-e2e-ipam-feature-enabled: + name: E2e tests on a Kind cluster on Linux with FlexibleIPAM feature enabled + needs: [build-antrea-coverage-image] + runs-on: [ubuntu-latest-4-cores] + steps: + - name: Free disk space + # https://github.com/actions/virtual-environments/issues/709 + run: | + sudo apt-get clean + df -h + - uses: actions/checkout@v4 + with: + show-progress: false + - uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + - name: Download Antrea image from previous job + uses: actions/download-artifact@v4 + with: + name: antrea-ubuntu-cov + - name: Load Antrea image + run: | + docker load -i antrea-ubuntu.tar + - name: Install Kind + run: | + KIND_VERSION=$(head -n1 ./ci/kind/version) + curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64 + chmod +x ./kind + sudo mv kind /usr/local/bin + - name: Run ipam e2e tests + run: | + mkdir log + mkdir test-ipam-e2e-coverage + ANTREA_LOG_DIR=$PWD/log ANTREA_COV_DIR=$PWD/test-ipam-e2e-coverage ./ci/kind/test-e2e-kind.sh \ + --flexible-ipam \ + --encap-mode noEncap \ + --coverage + - name: Tar coverage files + run: tar -czf test-ipam-e2e-coverage.tar.gz test-ipam-e2e-coverage + - name: Upload coverage for test-ipam-e2e-coverage + uses: actions/upload-artifact@v4 + with: + name: test-ipam-e2e-coverage + path: test-ipam-e2e-coverage.tar.gz + retention-days: 30 + - name: Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: '*.cov.out*' + disable_search: true + flags: kind-e2e-tests + name: test-ipam-e2e-coverage + directory: test-ipam-e2e-coverage + fail_ci_if_error: ${{ github.event_name == 'push' }} + - name: Tar log files + if: ${{ failure() }} + run: tar -czf log.tar.gz log + - name: Upload test log + uses: actions/upload-artifact@v4 + if: ${{ failure() }} + with: + name: e2e-kind-ipam-features-enabled.tar.gz + path: log.tar.gz + retention-days: 30 + test-e2e-noencap: name: E2e tests on a Kind cluster on Linux (noEncap) needs: [build-antrea-coverage-image] diff --git a/ci/kind/kind-setup.sh b/ci/kind/kind-setup.sh index e6f5f676130..652defe5537 100755 --- a/ci/kind/kind-setup.sh +++ b/ci/kind/kind-setup.sh @@ -300,6 +300,25 @@ function configure_vlan_subnets { docker_run_with_host_net iptables -t filter -A FORWARD -i ${vlan_interfaces[j]} -o ${vlan_interfaces[i]} -j ACCEPT done done + + # Adding ipset rules to prevent SNAT based on flexibleIPAM e2e tests + if [[ $FLEXIBLE_IPAM == true ]]; then + docker_run_with_host_net iptables -t nat -D POSTROUTING ! -o $bridge_interface -s 192.168.240.0/24 -j MASQUERADE + + docker_run_with_host_net ipset create excluded_subnets hash:net + docker_run_with_host_net ipset add excluded_subnets 192.168.241.0/24 + docker_run_with_host_net ipset add excluded_subnets 192.168.242.0/24 + docker_run_with_host_net ipset list excluded_subnets + docker_run_with_host_net iptables -t nat -A POSTROUTING ! -o $bridge_interface -s 192.168.240.0/24 -m set ! --match-set excluded_subnets dst -j MASQUERADE + + docker_run_with_host_net ipset create excluded_ipam_subnets hash:net + docker_run_with_host_net ipset add excluded_ipam_subnets 192.168.241.0/24 + docker_run_with_host_net ipset add excluded_ipam_subnets 192.168.242.0/24 + docker_run_with_host_net ipset add excluded_ipam_subnets 192.168.240.0/24 + docker_run_with_host_net ipset list excluded_ipam_subnets + docker_run_with_host_net iptables -t nat -A POSTROUTING ! -o $bridge_interface -s 10.244.0.0/16 -m set ! --match-set excluded_ipam_subnets dst -j MASQUERADE + fi + } function delete_vlan_subnets { @@ -327,6 +346,13 @@ function delete_networks { docker network rm $networks > /dev/null 2>&1 echo "deleted networks $networks" fi + + if [[ $FLEXIBLE_IPAM == true ]]; then + networks=$(docker network ls -f name=kind --format '{{.Name}}') + networks="$(echo $networks)" + docker network rm $networks > /dev/null 2>&1 + echo "deleted networks $networks" + fi } function load_images { @@ -711,7 +737,6 @@ if [[ $ACTION == "destroy" ]]; then exit fi - kind_version=$(kind version | awk '{print $2}') kind_version=${kind_version:1} # strip leading 'v' function version_lt() { test "$(printf '%s\n' "$@" | sort -rV | head -n 1)" != "$1"; } @@ -728,5 +753,10 @@ if [[ $ACTION == "create" ]]; then echoerr "Only one of '--subnets' and '--extra-networks' can be specified" exit 1 fi + + # To run FlexibleIPAM e2e tests, kind network should be in 192.168.240.0/24 subnet. + if [[ $FLEXIBLE_IPAM == true ]]; then + docker network create -d bridge --subnet 192.168.240.0/24 kind + fi create fi diff --git a/ci/kind/test-e2e-kind.sh b/ci/kind/test-e2e-kind.sh index 5adc2a8352c..5427029c385 100755 --- a/ci/kind/test-e2e-kind.sh +++ b/ci/kind/test-e2e-kind.sh @@ -89,6 +89,7 @@ setup_only=false cleanup_only=false test_only=false run="" +flexible_ipam=false antrea_controller_image="antrea/antrea-controller-ubuntu" antrea_agent_image="antrea/antrea-agent-ubuntu" use_non_default_images=false @@ -110,6 +111,10 @@ case $key in proxy_all=true shift ;; + --flexible-ipam) + flexible_ipam=true + shift + ;; --no-kube-proxy) no_kube_proxy=true shift @@ -249,6 +254,10 @@ if $flow_visibility; then manifest_args="$manifest_args --feature-gates FlowExporter=true,L7FlowExporter=true --extra-helm-values-file $FLOW_VISIBILITY_HELM_VALUES" fi +if $flexible_ipam; then + manifest_args="$manifest_args --flexible-ipam --multicast" +fi + COMMON_IMAGES_LIST=("registry.k8s.io/e2e-test-images/agnhost:2.40" \ "antrea/nginx:1.21.6-alpine" \ "antrea/toolbox:1.5-1") @@ -302,6 +311,10 @@ if $extra_vlan; then fi fi +if $flexible_ipam; then + vlan_args="$vlan_args --vlan-subnets 11=192.168.241.1/24 --vlan-subnets 12=192.168.242.1/24" +fi + function setup_cluster { args=$1 @@ -330,7 +343,11 @@ function setup_cluster { fi echo "creating test bed with args $args" - eval "timeout 600 $TESTBED_CMD create kind $args" + if $flexible_ipam; then + eval "timeout 600 $TESTBED_CMD --flexible-ipam create kind $args" + else + eval "timeout 600 $TESTBED_CMD create kind $args" + fi } function run_test { @@ -353,6 +370,11 @@ function run_test { timeout="75m" fi + if $flexible_ipam; then + $YML_CMD --flexible-ipam --multicast --encap-mode $current_mode $manifest_args | docker exec -i kind-control-plane dd of=/root/antrea.yml + echo "debug-1" + fi + if $flow_visibility; then timeout="30m" flow_visibility_args="-run=TestFlowAggregator --flow-visibility" @@ -401,7 +423,15 @@ function run_test { EXTRA_ARGS="$EXTRA_ARGS --external-frr-cid $external_frr_cid --external-frr-ips $external_frr_ips" fi - go test -v -timeout=$timeout $RUN_OPT antrea.io/antrea/test/e2e $flow_visibility_args -provider=kind --logs-export-dir=$ANTREA_LOG_DIR $np_evaluation_flag --skip-cases=$skiplist $coverage_args $EXTRA_ARGS + if $flexible_ipam; then + sudo iptables -t nat -vnL + kubectl get pods -o wide -A + ip route + export GO111MODULE=on + go test -v antrea.io/antrea/test/e2e --provider kind -timeout=100m --prometheus --antrea-ipam + else + go test -v -timeout=$timeout $RUN_OPT antrea.io/antrea/test/e2e $flow_visibility_args -provider=kind --logs-export-dir=$ANTREA_LOG_DIR $np_evaluation_flag --skip-cases=$skiplist $coverage_args $EXTRA_ARGS + fi if $coverage; then pushd $ANTREA_COV_DIR