diff --git a/Makefile b/Makefile index fc5610a3..74ede835 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ IPV6_CLUSTER_NAME ?= ipv6-$(shell git rev-parse --short HEAD) IPV6_MANIFEST_NAME ?= ipv6-manifests # renovate: datasource=github-tags depName=kubernetes/kubernetes -K8S_VERSION ?= "v1.31.2" +K8S_VERSION ?= "v1.32.13" # renovate: datasource=github-tags depName=kubernetes-sigs/cluster-api CAPI_VERSION ?= "v1.8.5" diff --git a/e2e/test/lb-created-with-reserved-ip-and-nb-id-annotations/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-and-nb-id-annotations/chainsaw-test.yaml index 069acba5..6b7af957 100644 --- a/e2e/test/lb-created-with-reserved-ip-and-nb-id-annotations/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-and-nb-id-annotations/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-and-nb-id-annotations" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-and-nb-id-annotations" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: Create dummy service try: @@ -47,14 +48,20 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi + if ! [[ $reserved_ip =~ $re ]]; then + echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" + fi LABEL="ccm-$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 5)" data=$(KUBECONFIG=$KUBECONFIG NAMESPACE=$NAMESPACE LINODE_TOKEN=$LINODE_TOKEN LABEL=$LABEL REGION=$LINODE_REGION ../scripts/get-nb-create-data.sh svc-dummy) @@ -62,15 +69,17 @@ spec: id_re='^[0-9]+$' - nb_id=$(curl -s --request POST \ + nb_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/nodebalancers" \ - --data "$payload" | jq .id) + --data "$payload") + nb_id=$(printf '%s' "$nb_response" | jq -r '.id // "null"' 2>/dev/null || printf 'null') if ! [[ $nb_id =~ $id_re ]]; then echo "Nodebalancer ID [$nb_id] is incorrect, failed to create nodebalancer" + echo "Nodebalancer create response: $nb_response" fi echo "{\"reserved_ip\": \"$reserved_ip\", diff --git a/e2e/test/lb-created-with-reserved-ip-attached-to-nb/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-attached-to-nb/chainsaw-test.yaml index 162b525c..14d53ba5 100644 --- a/e2e/test/lb-created-with-reserved-ip-attached-to-nb/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-attached-to-nb/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-attached-to-nb" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-attached-to-nb" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: Create dummy service try: @@ -48,14 +49,20 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi + if ! [[ $reserved_ip =~ $re ]]; then + echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" + fi LABEL="ccm-$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 5)" data=$(KUBECONFIG=$KUBECONFIG NAMESPACE=$NAMESPACE LINODE_TOKEN=$LINODE_TOKEN LABEL=$LABEL REGION=$LINODE_REGION ../scripts/get-nb-create-data.sh svc-dummy) @@ -63,15 +70,17 @@ spec: id_re='^[0-9]+$' - nb_id=$(curl -s --request POST \ + nb_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/nodebalancers" \ - --data "$payload" | jq .id) + --data "$payload") + nb_id=$(printf '%s' "$nb_response" | jq -r '.id // "null"' 2>/dev/null || printf 'null') if ! [[ $nb_id =~ $id_re ]]; then echo "Nodebalancer ID [$nb_id] is incorrect, failed to create nodebalancer" + echo "Nodebalancer create response: $nb_response" fi echo "{\"reserved_ip\": \"$reserved_ip\", diff --git a/e2e/test/lb-created-with-reserved-ip-change-ip-concurrently/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-change-ip-concurrently/chainsaw-test.yaml index 95b74ee3..bd2ad36b 100644 --- a/e2e/test/lb-created-with-reserved-ip-change-ip-concurrently/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-change-ip-concurrently/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip-concurrently" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip-concurrently" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: create reserved ip and nodebalancer resources try: @@ -30,31 +31,37 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi if ! [[ $reserved_ip =~ $re ]]; then echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" exit 1 fi - reserved_ip2=$(curl -s --request POST \ + reserved_ip2_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip2=$(echo "$reserved_ip2" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip2=$(printf '%s' "$reserved_ip2_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip2" ]]; then + reserved_ip2="null" + fi if ! [[ $reserved_ip2 =~ $re ]]; then echo "Reserved ip [$reserved_ip2] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip2_response" exit 1 fi diff --git a/e2e/test/lb-created-with-reserved-ip-change-ip-unreserved/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-change-ip-unreserved/chainsaw-test.yaml index 7221825c..a10d3633 100644 --- a/e2e/test/lb-created-with-reserved-ip-change-ip-unreserved/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-change-ip-unreserved/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip-unreserved" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip-unreserved" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: create reserved ip and nodebalancer resources try: @@ -30,17 +31,20 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi if ! [[ $reserved_ip =~ $re ]]; then echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" fi create_cm=$(kubectl -n $NAMESPACE create configmap reserved-ip-config --from-literal=ReservedIP=$reserved_ip --from-literal=UnreservedIP="100.10.10.10" -o yaml --dry-run=client | kubectl apply -f -) diff --git a/e2e/test/lb-created-with-reserved-ip-change-ip/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-change-ip/chainsaw-test.yaml index 5d5ace15..533d8d87 100644 --- a/e2e/test/lb-created-with-reserved-ip-change-ip/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-change-ip/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-change-ip" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: create reserved ip and nodebalancer resources try: @@ -30,30 +31,36 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi if ! [[ $reserved_ip =~ $re ]]; then echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" fi - reserved_ip2=$(curl -s --request POST \ + reserved_ip2_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip2=$(echo "$reserved_ip2" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip2=$(printf '%s' "$reserved_ip2_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip2" ]]; then + reserved_ip2="null" + fi if ! [[ $reserved_ip2 =~ $re ]]; then echo "Reserved ip [$reserved_ip2] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip2_response" fi create_cm=$(kubectl -n $NAMESPACE create configmap reserved-ip-config --from-literal=ReservedIP=$reserved_ip --from-literal=ReservedIP2=$reserved_ip2 -o yaml --dry-run=client | kubectl apply -f -) diff --git a/e2e/test/lb-created-with-reserved-ip-linode-range/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-linode-range/chainsaw-test.yaml index 6dd7af17..07111847 100644 --- a/e2e/test/lb-created-with-reserved-ip-linode-range/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-linode-range/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-linode-range" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-linode-range" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: create reserved ip and nodebalancer resources try: @@ -29,22 +30,25 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi if ! [[ $reserved_ip =~ $re ]]; then echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" fi fw_label="ccm-fwtest-$RANDOM" - fw_id=$(curl -s --request POST \ + fw_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ @@ -67,11 +71,13 @@ spec: \"outbound_policy\": \"ACCEPT\" } } - " | jq .id) + ") + fw_id=$(printf '%s' "$fw_response" | jq -r '.id // "null"' 2>/dev/null || printf 'null') sleep 30 if [ $fw_id == null ]; then echo "failed to create firewall : $fw_id" + echo "Firewall create response: $fw_response" fi echo "{\"reserved_ip\": \"$reserved_ip\", diff --git a/e2e/test/lb-created-with-reserved-ip-multiple-change-ip/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-multiple-change-ip/chainsaw-test.yaml index 266141ed..45447673 100644 --- a/e2e/test/lb-created-with-reserved-ip-multiple-change-ip/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-multiple-change-ip/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-multiple-change-ip" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-multiple-change-ip" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: create reserved ip and nodebalancer resources try: @@ -30,31 +31,37 @@ spec: re='^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$' - reserved_ip=$(curl -s --request POST \ + reserved_ip_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip=$(echo "$reserved_ip" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip=$(printf '%s' "$reserved_ip_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip" ]]; then + reserved_ip="null" + fi if ! [[ $reserved_ip =~ $re ]]; then echo "Reserved ip [$reserved_ip] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip_response" exit 1 fi - reserved_ip2=$(curl -s --request POST \ + reserved_ip2_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ "${LINODE_URL}/v4beta/networking/reserved/ips" \ - --data "{\"region\": \"$LINODE_REGION\"}" | jq .address) - - reserved_ip2=$(echo "$reserved_ip2" | tr -d '"') + --data "{\"region\": \"$LINODE_REGION\"}") + reserved_ip2=$(printf '%s' "$reserved_ip2_response" | jq -er '.address // empty' 2>/dev/null || true) + if [[ -z "$reserved_ip2" ]]; then + reserved_ip2="null" + fi if ! [[ $reserved_ip2 =~ $re ]]; then echo "Reserved ip [$reserved_ip2] is incorrect, failed to create a reserved ip" + echo "Reserved ip create response: $reserved_ip2_response" exit 1 fi diff --git a/e2e/test/lb-created-with-reserved-ip-nb-range/chainsaw-test.yaml b/e2e/test/lb-created-with-reserved-ip-nb-range/chainsaw-test.yaml index 50848cac..43bc22fd 100644 --- a/e2e/test/lb-created-with-reserved-ip-nb-range/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-reserved-ip-nb-range/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-nb-range" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-reserved-ip-nb-range" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: Create nodebalancer and create resources try: @@ -44,11 +45,13 @@ spec: nbid=$(echo "$nbconf" | jq '.id') if ! [[ $nbid =~ $re ]]; then echo "Nodebalancer id [$nbid] is incorrect, failed to create nodebalancer" + echo "Nodebalancer create response: $nbconf" fi ip=$(echo "$nbconf" | jq '.ipv4') if ! [[ $ip =~ $ip_re ]]; then echo "Nodebalancer ipv4 [$ip] is incorrect, failed to create nodebalancer" + echo "Nodebalancer create response: $nbconf" fi ip=$(echo "$ip" | tr -d '"') @@ -61,6 +64,7 @@ spec: if [ "$(echo "$update_ip" | jq 'length')" -eq 0 ]; then echo "Error: Unable to update the IP: $ip status to reserved" + echo "Reserved IP update response: $update_ip" fi del_nb=$(curl -s --no-keepalive --request DELETE \ @@ -72,11 +76,12 @@ spec: if [ "$(echo "$del_nb" | jq 'length')" != 0 ]; then echo "Error deleting the nodebalancer" + echo "Nodebalancer delete response: $del_nb" fi fw_label="ccm-fwtest-$RANDOM" - fw_id=$(curl -s --request POST \ + fw_response=$(curl -s --request POST \ -H "Authorization: Bearer $LINODE_TOKEN" \ -H "Content-Type: application/json" --fail-early --retry 3 \ -H "accept: application/json" \ @@ -99,11 +104,13 @@ spec: \"outbound_policy\": \"ACCEPT\" } } - " | jq .id) + ") + fw_id=$(printf '%s' "$fw_response" | jq -r '.id // "null"' 2>/dev/null || printf 'null') sleep 30 if [ $fw_id == null ]; then echo "failed to create firewall" + echo "Firewall create response: $fw_response" fi reserved_ip=$ip diff --git a/e2e/test/lb-created-with-specified-nb-id-reserved/chainsaw-test.yaml b/e2e/test/lb-created-with-specified-nb-id-reserved/chainsaw-test.yaml index 8a1ea8c1..9a1665bf 100644 --- a/e2e/test/lb-created-with-specified-nb-id-reserved/chainsaw-test.yaml +++ b/e2e/test/lb-created-with-specified-nb-id-reserved/chainsaw-test.yaml @@ -14,9 +14,10 @@ spec: shellArgs: - -c content: | - set -euo pipefail + set -uo pipefail echo "Test failed. Fetching CCM logs..." - kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-specified-nb-id-reserved" | tail -100 + kubectl logs -n kube-system daemonsets/ccm-linode | grep "lb-created-with-specified-nb-id-reserved" | tail -100 || true + ../scripts/release-reserved-ips.sh steps: - name: Create dummy service try: diff --git a/e2e/test/scripts/release-reserved-ips.sh b/e2e/test/scripts/release-reserved-ips.sh new file mode 100644 index 00000000..a9c62d03 --- /dev/null +++ b/e2e/test/scripts/release-reserved-ips.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -uo pipefail + +: "${LINODE_URL:=https://api.linode.com}" + +log() { + echo "[release-reserved-ips] $*" +} + +delete_api_resource() { + local resource_name="$1" + local resource_id="$2" + local resource_path="$3" + local response + + if [[ -z "$resource_id" || "$resource_id" == "null" ]]; then + return 0 + fi + + response=$(curl -s --request DELETE \ + -H "Authorization: Bearer $LINODE_TOKEN" \ + -H "Content-Type: application/json" --fail-early --retry 3 \ + "${LINODE_URL}${resource_path}/${resource_id}" || true) + + if [[ "$response" == "{}" || "$response" == *'"reason": "Not found"'* ]]; then + log "$resource_name $resource_id deleted or already absent" + return 0 + fi + + log "unable to delete $resource_name $resource_id: $response" + return 0 +} + +get_configmap_value() { + local configmap_name="$1" + local key="$2" + + kubectl get configmap "$configmap_name" -n "$NAMESPACE" -o "jsonpath={.data.${key}}" 2>/dev/null || true +} + +cleanup_nb_config() { + local reserved_ip + local nodebalancer_id + + reserved_ip=$(get_configmap_value nb-config Reserved_IP) + nodebalancer_id=$(get_configmap_value nb-config NB_ID) + + delete_api_resource "nodebalancer" "$nodebalancer_id" "/v4beta/nodebalancers" + delete_api_resource "reserved ip" "$reserved_ip" "/v4beta/networking/reserved/ips" + + kubectl delete configmap nb-config -n "$NAMESPACE" --ignore-not-found >/dev/null 2>&1 || true +} + +cleanup_reserved_ip_config() { + local reserved_ip + local reserved_ip2 + local firewall_id + + reserved_ip=$(get_configmap_value reserved-ip-config ReservedIP) + reserved_ip2=$(get_configmap_value reserved-ip-config ReservedIP2) + firewall_id=$(get_configmap_value reserved-ip-config FW_ID) + + delete_api_resource "firewall" "$firewall_id" "/v4/networking/firewalls" + delete_api_resource "reserved ip" "$reserved_ip" "/v4beta/networking/reserved/ips" + delete_api_resource "reserved ip" "$reserved_ip2" "/v4beta/networking/reserved/ips" + + kubectl delete configmap reserved-ip-config -n "$NAMESPACE" --ignore-not-found >/dev/null 2>&1 || true +} + +if [[ -z "${NAMESPACE:-}" || -z "${LINODE_TOKEN:-}" ]]; then + log "skipping cleanup because NAMESPACE or LINODE_TOKEN is not set" + exit 0 +fi + +cleanup_nb_config +cleanup_reserved_ip_config + +exit 0 \ No newline at end of file