From 86c8067beb9038f189c7a5ff2a1d8a4a383c0ead Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Thu, 19 Mar 2026 10:31:35 +0000 Subject: [PATCH] Keep cluster alive? --- .gitea/workflows/e2e.yml | 102 +++++++++++++-------------------------- 1 file changed, 34 insertions(+), 68 deletions(-) diff --git a/.gitea/workflows/e2e.yml b/.gitea/workflows/e2e.yml index e6b61c8..3f5d521 100644 --- a/.gitea/workflows/e2e.yml +++ b/.gitea/workflows/e2e.yml @@ -17,90 +17,56 @@ jobs: # Install kubectl curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" install kubectl /usr/local/bin/ - - - name: Debug All - run: | - docker ps -adocker network rm kind || true - docker network ls - docker volume ls - - - name: Delete Kind Cluster - run: | - kind delete cluster --name test-cluster-2 - - - name: Sleep 5s - run: sleep 5 - - - name: Delete kind network - run: | - docker network rm kind || true - - - name: Debug All - run: | - docker ps -a - docker network ls - docker volume ls - name: Create kind cluster run: | - cat > cluster.yml << 'EOF' - # three node (two workers) cluster config - kind: Cluster - apiVersion: kind.x-k8s.io/v1alpha4 - nodes: - - role: control-plane - EOF - kind create cluster --name test-cluster-2 --config cluster.yml + docker inspect "$KIND_CONTAINER" || kind create cluster --name test-cluster --wait 5m - - name: Attach kind control-plane to job network and wait + - name: Connect kind to the job container's network and fix kubeconfig + if: always() run: | - apt-get update && apt-get install -y jq docker.io + # 1. Find the Docker network the job container is on + # The job container's hostname is the container ID + JOB_CONTAINER_ID=$(hostname) + NETWORK_NAME=$(docker inspect "$JOB_CONTAINER_ID" \ + --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}{{end}}') + + echo "NETWORK_NAME=$NETWORK_NAME" >> $GITHUB_ENV - JOB_CONTAINER_ID="$(hostname)" - NETWORK_NAME="$(docker inspect "$JOB_CONTAINER_ID" --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}{{end}}')" - echo "Job network: $NETWORK_NAME" + echo "Job container network: $NETWORK_NAME" - CONTROL_PLANE="test-cluster-2-control-plane" - docker network connect "$NETWORK_NAME" "$CONTROL_PLANE" || true + # 2. Get the kind control-plane container name + KIND_CONTAINER="test-cluster-control-plane" - KIND_IP="$(docker inspect "$CONTROL_PLANE" --format "{{(index .NetworkSettings.Networks \"$NETWORK_NAME\").IPAddress}}")" - echo "Kind IP: $KIND_IP" + echo "KIND_CONTAINER=$KIND_CONTAINER" >> $GITHUB_ENV - # Point kubectl at the control-plane directly - kubectl config set-cluster kind-test-cluster-2 --server="https://${KIND_IP}:6443" - kubectl config set-cluster kind-test-cluster-2 --insecure-skip-tls-verify=true + # 3. Connect the kind container to the same network + docker network connect "$NETWORK_NAME" "$KIND_CONTAINER" - # Wait for API and nodes - for i in $(seq 1 120); do - if kubectl get nodes >/dev/null 2>&1; then - break - fi - echo "Waiting for kind API... ($i/120)" - sleep 2 - done - kubectl get nodes + # 4. Get the kind container's IP on that network + KIND_IP=$(docker inspect "$KIND_CONTAINER" \ + --format "{{(index .NetworkSettings.Networks \"$NETWORK_NAME\").IPAddress}}") + + echo "Kind container IP on shared network: $KIND_IP" + + # 5. Rewrite the kubeconfig to use the kind container's IP + # kind's API server listens on port 6443 inside the container + kubectl config set-cluster kind-test-cluster \ + --server="https://${KIND_IP}:6443" + + # 6. Since the TLS cert won't match the new IP, use insecure mode + # OR set insecure-skip-tls-verify + kubectl config set-cluster kind-test-cluster \ + --insecure-skip-tls-verify=true - name: Verify cluster access + if: always() run: | kubectl cluster-info kubectl get nodes kubectl get pods -A - - - name: Debug All - if: always() - run: | - docker ps -a - docker network ls - docker volume ls - - name: Delete Kind Cluster + - name: Disconnect Kind Network if: always() run: | - kind delete cluster --name test-cluster-2 - - - name: Debug All - if: always() - run: | - docker ps -a - docker network ls - docker volume ls \ No newline at end of file + docker network connect "$NETWORK_NAME" "$KIND_CONTAINER"