This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-helm-chart.git


The following commit(s) were added to refs/heads/master by this push:
     new a8c7745  Add testing of upgrading of latest released chart version to 
CI (#432)
a8c7745 is described below

commit a8c7745b3ed2cd76a62c81e8c84e3138fd8a3199
Author: Lari Hotari <[email protected]>
AuthorDate: Tue Jan 16 09:16:16 2024 -0800

    Add testing of upgrading of latest released chart version to CI (#432)
    
    * Add upgrade test to CI
    
    - install latest released chart version and then upgrade to the local chart 
version
    
    * Add metallb for loadbalancer support so that "--wait" will work
    
    * Improve script logging
    
    * produce messages with old version of pulsar and consume with new version
    
    * Add 10 second delay
    
    * Remove duplication
    
    * Improve logging
    
    * Fix quotes
    
    * Before trying produce-consume test, verify that the Admin API is available
    
    * Add 2 more upgrade scenarios: TLS & PSP
---
 .ci/chart_test.sh                                  |  33 ++-
 .../{values-basic.yaml => values-upgrade.yaml}     |   0
 .ci/helm.sh                                        | 233 ++++++++++++++-------
 .../metallb-config.yaml}                           |  14 ++
 .github/workflows/pulsar-helm-chart-ci.yaml        |  31 ++-
 5 files changed, 223 insertions(+), 88 deletions(-)

diff --git a/.ci/chart_test.sh b/.ci/chart_test.sh
index 8c897dd..85626ca 100755
--- a/.ci/chart_test.sh
+++ b/.ci/chart_test.sh
@@ -38,14 +38,39 @@ if [[ "x${SYMMETRIC}" == "xtrue" ]]; then
     extra_opts="-s"
 fi
 
-# install pulsar chart
-ci::install_pulsar_chart ${PULSAR_HOME}/.ci/values-common.yaml 
${PULSAR_HOME}/${VALUES_FILE} ${extra_opts}
+install_type="install"
+test_action="produce-consume"
+if [[ "$UPGRADE_FROM_VERSION" != "" ]]; then
+    # install older version of pulsar chart
+    PULSAR_CHART_VERSION="$UPGRADE_FROM_VERSION"
+    ci::install_pulsar_chart install ${PULSAR_HOME}/.ci/values-common.yaml 
${PULSAR_HOME}/${VALUES_FILE} ${extra_opts}    
+    install_type="upgrade"
+    echo "Wait 10 seconds"
+    sleep 10
+    # test that we can access the admin api
+    ci::test_pulsar_admin_api_access
+    # produce messages with old version of pulsar and consume with new version
+    ci::test_pulsar_producer_consumer "produce"
+    test_action="consume"
+fi
+
+PULSAR_CHART_VERSION="local"
+# install (or upgrade) pulsar chart
+ci::install_pulsar_chart ${install_type} ${PULSAR_HOME}/.ci/values-common.yaml 
${PULSAR_HOME}/${VALUES_FILE} ${extra_opts}
+
+echo "Wait 10 seconds"
+sleep 10
+
+# check pulsar environment
+ci::check_pulsar_environment
 
+# test that we can access the admin api
+ci::test_pulsar_admin_api_access
 # test producer/consumer
-ci::test_pulsar_producer_consumer
+ci::test_pulsar_producer_consumer "${test_action}"
 
 if [[ "x${FUNCTION}" == "xtrue" ]]; then
-    # install cert manager
+    # test functions
     ci::test_pulsar_function
 fi
 
diff --git a/.ci/clusters/values-basic.yaml b/.ci/clusters/values-upgrade.yaml
similarity index 100%
copy from .ci/clusters/values-basic.yaml
copy to .ci/clusters/values-upgrade.yaml
diff --git a/.ci/helm.sh b/.ci/helm.sh
index 4838e4e..9cb6457 100644
--- a/.ci/helm.sh
+++ b/.ci/helm.sh
@@ -20,13 +20,15 @@
 BINDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 PULSAR_HOME="$(cd "${BINDIR}/.." && pwd)"
 CHARTS_HOME=${PULSAR_HOME}
+PULSAR_CHART_LOCAL=${CHARTS_HOME}/charts/pulsar
+PULSAR_CHART_VERSION=${PULSAR_CHART_VERSION:-"local"}
 OUTPUT_BIN=${CHARTS_HOME}/output/bin
 KIND_BIN=$OUTPUT_BIN/kind
 HELM=${OUTPUT_BIN}/helm
 KUBECTL=${OUTPUT_BIN}/kubectl
 NAMESPACE=pulsar
 CLUSTER=pulsar-ci
-CLUSTER_ID=$(uuidgen)
+: ${CLUSTER_ID:=$(uuidgen)}
 K8S_LOGS_DIR="${K8S_LOGS_DIR:-/tmp/k8s-logs}"
 export PATH="$OUTPUT_BIN:$PATH"
 
@@ -100,68 +102,110 @@ function ci::collect_k8s_logs() {
 }
 
 function ci::install_pulsar_chart() {
-    local common_value_file=$1
-    local value_file=$2
-    local extra_opts=$3
-
-    echo "Installing the pulsar chart"
-    ${KUBECTL} create namespace ${NAMESPACE}
-    ci::install_cert_manager
-    echo ${CHARTS_HOME}/scripts/pulsar/prepare_helm_release.sh -k ${CLUSTER} 
-n ${NAMESPACE} ${extra_opts}
-    ${CHARTS_HOME}/scripts/pulsar/prepare_helm_release.sh -k ${CLUSTER} -n 
${NAMESPACE} ${extra_opts}
-    sleep 10
-
-    echo ${HELM} dependency update ${CHARTS_HOME}/charts/pulsar
-    ${HELM} dependency update ${CHARTS_HOME}/charts/pulsar
-    echo ${HELM} install --set initialize=true --values ${common_value_file} 
--values ${value_file} ${CLUSTER} ${CHARTS_HOME}/charts/pulsar
-    ${HELM} template --values ${common_value_file} --values ${value_file} 
${CLUSTER} ${CHARTS_HOME}/charts/pulsar
-    ${HELM} install --set initialize=true --values ${common_value_file} 
--values ${value_file} --namespace=${NAMESPACE} ${CLUSTER} 
${CHARTS_HOME}/charts/pulsar
-
-    echo "wait until broker is alive"
-    WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-broker | wc -l)
-    counter=1
-    while [[ ${WC} -lt 1 ]]; do
-      ((counter++))
-      echo ${WC};
-      sleep 15
-      ${KUBECTL} get pods,jobs -n ${NAMESPACE}
-      ${KUBECTL} get events --sort-by=.lastTimestamp -A | tail -n 30 || true
-      if [[ $((counter % 20)) -eq 0 ]]; then
-        ci::print_pod_logs
-        if [[ $counter -gt 100 ]]; then
-          echo >&2 "Timeout waiting..."
-          exit 1
-        fi
-      fi
-      WC=$(${KUBECTL} get pods -n ${NAMESPACE} | grep ${CLUSTER}-broker | wc 
-l)
-      if [[ ${WC} -gt 1 ]]; then
-        ${KUBECTL} describe pod -n ${NAMESPACE} pulsar-ci-broker-0
-        ${KUBECTL} logs -n ${NAMESPACE} pulsar-ci-broker-0
+    local install_type=$1
+    local common_value_file=$2
+    local value_file=$3
+    local extra_opts=$4
+    local install_args
+
+    if [[ "${install_type}" == "install" ]]; then
+      echo "Installing the pulsar chart"
+      ${KUBECTL} create namespace ${NAMESPACE}
+      ci::install_cert_manager
+      echo ${CHARTS_HOME}/scripts/pulsar/prepare_helm_release.sh -k ${CLUSTER} 
-n ${NAMESPACE} ${extra_opts}
+      ${CHARTS_HOME}/scripts/pulsar/prepare_helm_release.sh -k ${CLUSTER} -n 
${NAMESPACE} ${extra_opts}
+      sleep 10
+
+      # install metallb for loadbalancer support
+      # following instructions from 
https://kind.sigs.k8s.io/docs/user/loadbalancer/
+      ${KUBECTL} apply -f 
https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
+      # wait until metallb is ready
+      ${KUBECTL} wait --namespace metallb-system \
+                --for=condition=ready pod \
+                --selector=app=metallb \
+                --timeout=90s
+      # configure metallb
+      ${KUBECTL} apply -f ${BINDIR}/metallb/metallb-config.yaml
+
+      install_args=""
+    else 
+      install_args="--wait --wait-for-jobs --timeout 300s --debug"
+    fi
+
+    CHART_ARGS=""
+    if [[ "${PULSAR_CHART_VERSION}" == "local" ]]; then
+      set -x
+      ${HELM} dependency update ${PULSAR_CHART_LOCAL}
+      set +x
+      CHART_ARGS="${PULSAR_CHART_LOCAL}"
+    else
+      set -x
+      ${HELM} repo add apache https://pulsar.apache.org/charts
+      set +x
+      CHART_ARGS="apache/pulsar --dependency-update"
+      if [[ "${PULSAR_CHART_VERSION}" != "latest" ]]; then
+        CHART_ARGS="${CHART_ARGS} --version ${PULSAR_CHART_VERSION}"
       fi
-      WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-broker | wc -l)
-    done
-    timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash 
-c 'until nslookup pulsar-ci-broker; do sleep 3; done' || { echo >&2 "Timeout 
waiting..."; ci::print_pod_logs; exit 1; }
-    timeout 120s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash 
-c 'until [ "$(curl -L http://pulsar-ci-broker:8080/status.html)" == "OK" ]; do 
sleep 3; done' || { echo >&2 "Timeout waiting..."; ci::print_pod_logs; exit 1; }
+    fi
+    set -x
+    ${HELM} template --values ${common_value_file} --values ${value_file} 
${CLUSTER} ${CHART_ARGS}
+    ${HELM} ${install_type} --values ${common_value_file} --values 
${value_file} --namespace=${NAMESPACE} ${CLUSTER} ${CHART_ARGS} ${install_args}
+    set +x
 
-    WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-proxy | wc -l)
-    counter=1
-    while [[ ${WC} -lt 1 ]]; do
-      ((counter++))
-      echo ${WC};
-      sleep 15
-      ${KUBECTL} get pods,jobs -n ${NAMESPACE}
-      ${KUBECTL} get events --sort-by=.lastTimestamp -A | tail -n 30 || true
-      if [[ $((counter % 8)) -eq 0 ]]; then
-        ci::print_pod_logs
-        if [[ $counter -gt 16 ]]; then
-          echo >&2 "Timeout waiting..."
-          exit 1
+    if [[ "${install_type}" == "install" ]]; then
+      echo "wait until broker is alive"
+      WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-broker | wc -l)
+      counter=1
+      while [[ ${WC} -lt 1 ]]; do
+        ((counter++))
+        echo ${WC};
+        sleep 15
+        ${KUBECTL} get pods,jobs -n ${NAMESPACE}
+        ${KUBECTL} get events --sort-by=.lastTimestamp -A | tail -n 30 || true
+        if [[ $((counter % 20)) -eq 0 ]]; then
+          ci::print_pod_logs
+          if [[ $counter -gt 100 ]]; then
+            echo >&2 "Timeout waiting..."
+            exit 1
+          fi
         fi
-      fi
+        WC=$(${KUBECTL} get pods -n ${NAMESPACE} | grep ${CLUSTER}-broker | wc 
-l)
+        if [[ ${WC} -gt 1 ]]; then
+          ${KUBECTL} describe pod -n ${NAMESPACE} pulsar-ci-broker-0
+          ${KUBECTL} logs -n ${NAMESPACE} pulsar-ci-broker-0
+        fi
+        WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-broker | wc -l)
+      done
+      timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until nslookup pulsar-ci-broker; do sleep 3; done' || { echo >&2 
"Timeout waiting..."; ci::print_pod_logs; exit 1; }
+      timeout 120s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until [ "$(curl -s -L http://pulsar-ci-broker:8080/status.html)" == 
"OK" ]; do sleep 3; done' || { echo >&2 "Timeout waiting..."; 
ci::print_pod_logs; exit 1; }
+
       WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-proxy | wc -l)
-    done
-    timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash 
-c 'until nslookup pulsar-ci-proxy; do sleep 3; done' || { echo >&2 "Timeout 
waiting..."; ci::print_pod_logs; exit 1; }
-    # ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash -c 'until [ 
"$(curl -L http://pulsar-ci-proxy:8080/status.html)" == "OK" ]; do sleep 3; 
done'
+      counter=1
+      while [[ ${WC} -lt 1 ]]; do
+        ((counter++))
+        echo ${WC};
+        sleep 15
+        ${KUBECTL} get pods,jobs -n ${NAMESPACE}
+        ${KUBECTL} get events --sort-by=.lastTimestamp -A | tail -n 30 || true
+        if [[ $((counter % 8)) -eq 0 ]]; then
+          ci::print_pod_logs
+          if [[ $counter -gt 16 ]]; then
+            echo >&2 "Timeout waiting..."
+            exit 1
+          fi
+        fi
+        WC=$(${KUBECTL} get pods -n ${NAMESPACE} 
--field-selector=status.phase=Running | grep ${CLUSTER}-proxy | wc -l)
+      done
+      timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until nslookup pulsar-ci-proxy; do sleep 3; done' || { echo >&2 
"Timeout waiting..."; ci::print_pod_logs; exit 1; }
+      echo "Install complete"
+    else
+      echo "wait until broker is alive"
+      timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until nslookup pulsar-ci-broker; do sleep 3; done' || { echo >&2 
"Timeout waiting..."; ci::print_pod_logs; exit 1; }
+      timeout 120s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until [ "$(curl -s -L http://pulsar-ci-broker:8080/status.html)" == 
"OK" ]; do sleep 3; done' || { echo >&2 "Timeout waiting..."; 
ci::print_pod_logs; exit 1; }
+      echo "wait until proxy is alive"
+      timeout 300s ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bash -c 'until nslookup pulsar-ci-proxy; do sleep 3; done' || { echo >&2 
"Timeout waiting..."; ci::print_pod_logs; exit 1; }
+      echo "Upgrade complete"
+    fi
 }
 
 helm_values_cached=""
@@ -173,28 +217,66 @@ function ci::helm_values_for_deployment() {
     printf "%s" "${helm_values_cached}"
 }
 
-function ci::test_pulsar_producer_consumer() {
-    sleep 120
+function ci::check_pulsar_environment() {
+    echo "Wait until pulsar-ci-broker is ready"
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash -c 'until 
nslookup pulsar-ci-broker; do sleep 3; done'
+    echo "Wait until pulsar-ci-proxy is ready"
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash -c 'until 
nslookup pulsar-ci-proxy; do sleep 3; done'
+    echo "bookie-0 disk usage"
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-bookie-0 -- df -h
+    echo "bookie-0 bookkeeper.conf"
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-bookie-0 -- cat 
conf/bookkeeper.conf
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -rw
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -ro
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
tenants create pulsar-ci
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
namespaces create pulsar-ci/test
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create pulsar-ci/test/test-topic
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create-subscription -s test pulsar-ci/test/test-topic
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-client 
produce -m "test-message" pulsar-ci/test/test-topic
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-client 
consume -s test pulsar-ci/test/test-topic
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create-subscription -s test2 pulsar-ci/test/test-topic
+    echo "bookie-0 bookies list (rw)"
+    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -rw | grep ListBookiesCommand
+    echo "bookie-0 bookies list (ro)"
+    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -ro | grep ListBookiesCommand
+}
+
+# function to retry a given commend 3 times with a backoff of 10 seconds in 
between
+function ci::retry() {
+  local n=1
+  local max=3
+  local delay=10
+  while true; do
+    "$@" && break || {
+      if [[ $n -lt $max ]]; then
+        ((n++))
+        echo "::warning::Command failed. Attempt $n/$max:"
+        sleep $delay
+      else
+        fail "::error::The command has failed after $n attempts."
+      fi
+    }
+  done
+}
+
+function ci::test_pulsar_admin_api_access() {
+  ci::retry ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bin/pulsar-admin tenants list
+}
+
+function ci::test_pulsar_producer_consumer() {
+    action="${1:-"produce-consume"}"
+    echo "Testing with ${action}"
     if [[ "$(ci::helm_values_for_deployment | yq .tls.proxy.enabled)" == 
"true" ]]; then
       PROXY_URL="pulsar+ssl://pulsar-ci-proxy:6651"
     else
       PROXY_URL="pulsar://pulsar-ci-proxy:6650"
     fi
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-client 
--url "${PROXY_URL}" produce -m "test-message2" pulsar-ci/test/test-topic
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-client 
--url "${PROXY_URL}" consume -s test2 pulsar-ci/test/test-topic
+    set -x
+    if [[ "${action}" == "produce" || "${action}" == "produce-consume" ]]; then
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
tenants create pulsar-ci
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
namespaces create pulsar-ci/test
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create pulsar-ci/test/test-topic
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create-subscription -s test pulsar-ci/test/test-topic
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bin/pulsar-client produce -m "test-message" pulsar-ci/test/test-topic
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
topics create-subscription -s test2 pulsar-ci/test/test-topic
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bin/pulsar-client --url "${PROXY_URL}" produce -m "test-message2" 
pulsar-ci/test/test-topic
+    fi
+    if [[ "${action}" == "consume" || "${action}" == "produce-consume" ]]; then
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bin/pulsar-client consume -s test pulsar-ci/test/test-topic
+      ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- 
bin/pulsar-client --url "${PROXY_URL}" consume -s test2 
pulsar-ci/test/test-topic
+    fi
+    set +x
 }
 
 function ci::wait_function_running() {
@@ -219,14 +301,7 @@ function ci::wait_message_processed() {
 }
 
 function ci::test_pulsar_function() {
-    sleep 120
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash -c 'until 
nslookup pulsar-ci-broker; do sleep 3; done'
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bash -c 'until 
nslookup pulsar-ci-proxy; do sleep 3; done'
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-bookie-0 -- df -h
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -rw
-    ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/bookkeeper 
shell listbookies -ro
     ${KUBECTL} exec -n ${NAMESPACE} ${CLUSTER}-toolset-0 -- bin/pulsar-admin 
functions create --tenant pulsar-ci --namespace test --name test-function 
--inputs "pulsar-ci/test/test_input" --output "pulsar-ci/test/test_output" 
--parallelism 1 --classname 
org.apache.pulsar.functions.api.examples.ExclamationFunction --jar 
/pulsar/examples/api-examples.jar
-
     # wait until the function is running
     # TODO: re-enable function test
     # ci::wait_function_running
diff --git a/.ci/clusters/values-basic.yaml b/.ci/metallb/metallb-config.yaml
similarity index 74%
rename from .ci/clusters/values-basic.yaml
rename to .ci/metallb/metallb-config.yaml
index d8a500d..b4895a4 100644
--- a/.ci/clusters/values-basic.yaml
+++ b/.ci/metallb/metallb-config.yaml
@@ -17,3 +17,17 @@
 # under the License.
 #
 
+apiVersion: metallb.io/v1beta1
+kind: IPAddressPool
+metadata:
+  name: example
+  namespace: metallb-system
+spec:
+  addresses:
+  - 172.19.255.200-172.19.255.250
+---
+apiVersion: metallb.io/v1beta1
+kind: L2Advertisement
+metadata:
+  name: empty
+  namespace: metallb-system
diff --git a/.github/workflows/pulsar-helm-chart-ci.yaml 
b/.github/workflows/pulsar-helm-chart-ci.yaml
index 8778186..bd1a281 100644
--- a/.github/workflows/pulsar-helm-chart-ci.yaml
+++ b/.github/workflows/pulsar-helm-chart-ci.yaml
@@ -136,7 +136,7 @@ jobs:
           action: wait
 
   install-chart-tests:
-    name: ${{ matrix.testScenario.name }} - k8s ${{ matrix.k8sVersion.version 
}} - Install
+    name: ${{ matrix.testScenario.name }} - k8s ${{ matrix.k8sVersion.version 
}} - ${{ matrix.testScenario.type || 'install' }}
     runs-on: ubuntu-22.04
     timeout-minutes: ${{ matrix.testScenario.timeout || 45 }}
     needs: ['preconditions', 'ct-lint']
@@ -151,9 +151,10 @@ jobs:
           - version: "1.27.3"
             kind_image_tag: 
v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72
         testScenario:
-          - name: Basic
-            values_file: .ci/clusters/values-basic.yaml
-            shortname: basic
+          - name: Upgrade latest released version
+            values_file: .ci/clusters/values-upgrade.yaml
+            shortname: upgrade
+            type: upgrade
           - name: Use Pulsar Image
             values_file: .ci/clusters/values-pulsar-image.yaml
             shortname: pulsar-image
@@ -181,6 +182,23 @@ jobs:
           - name: PSP
             values_file: .ci/clusters/values-psp.yaml
             shortname: psp
+        include:
+          - k8sVersion:
+              version: "1.21.14"
+              kind_image_tag: 
v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093
+            testScenario:
+              name: "Upgrade TLS"
+              values_file: .ci/clusters/values-tls.yaml
+              shortname: tls
+              type: upgrade
+          - k8sVersion:
+              version: "1.21.14"
+              kind_image_tag: 
v1.21.14@sha256:8a4e9bb3f415d2bb81629ce33ef9c76ba514c14d707f9797a01e3216376ba093
+            testScenario:
+              name: "Upgrade PSP"
+              values_file: .ci/clusters/values-psp.yaml
+              shortname: psp
+              type: upgrade
     env:
       k8sVersion: ${{ matrix.k8sVersion.kind_image_tag }}
       KUBECTL_VERSION: ${{ matrix.k8sVersion.version }}
@@ -234,13 +252,16 @@ jobs:
         with:
           limit-access-to-actor: true
 
-      - name: Run chart-testing (install)
+      - name: Run chart-testing (${{ matrix.testScenario.type || 'install' }})
         run: |
           case "${{ matrix.testScenario.shortname }}" in
             "jwt-symmetric")
               export SYMMETRIC=true
               ;;
           esac
+          if [[ "${{ matrix.testScenario.type || 'install' }}" == "upgrade" 
]]; then
+            export UPGRADE_FROM_VERSION=latest
+          fi
           .ci/chart_test.sh ${{ matrix.testScenario.values_file }}
 
       - name: Collect k8s logs on failure

Reply via email to