diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6188822e9a..50fd8994f2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' GOLANGCI_VERSION: 'v1.55.2' DOCKER_BUILDX_VERSION: 'v0.4.2' diff --git a/.github/workflows/e2e-1.18.yaml b/.github/workflows/e2e-1.18.yaml index 66f11ae918..40b222f30e 100644 --- a/.github/workflows/e2e-1.18.yaml +++ b/.github/workflows/e2e-1.18.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' KIND_VERSION: 'v0.14.0' KIND_IMAGE: 'kindest/node:v1.18.20' KIND_CLUSTER_NAME: 'ci-testing' diff --git a/.github/workflows/e2e-1.20-EphemeralJob.yaml b/.github/workflows/e2e-1.20-EphemeralJob.yaml index f7d3038b49..82bac5e552 100644 --- a/.github/workflows/e2e-1.20-EphemeralJob.yaml +++ b/.github/workflows/e2e-1.20-EphemeralJob.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' KIND_VERSION: 'v0.14.0' KIND_IMAGE: 'kindest/node:v1.20.15' KIND_CLUSTER_NAME: 'ci-testing' diff --git a/.github/workflows/e2e-1.24.yaml b/.github/workflows/e2e-1.24.yaml index c46320b329..73b66b7e5d 100644 --- a/.github/workflows/e2e-1.24.yaml +++ b/.github/workflows/e2e-1.24.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' KIND_ACTION_VERSION: 'v1.3.0' KIND_VERSION: 'v0.14.0' KIND_IMAGE: 'kindest/node:v1.24.6' diff --git a/.github/workflows/e2e-1.26.yaml b/.github/workflows/e2e-1.26.yaml index adf76c717a..4039ceb6a0 100644 --- a/.github/workflows/e2e-1.26.yaml +++ b/.github/workflows/e2e-1.26.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' KIND_VERSION: 'v0.18.0' KIND_IMAGE: 'kindest/node:v1.26.3' KIND_CLUSTER_NAME: 'ci-testing' diff --git a/.github/workflows/e2e-1.28.yaml b/.github/workflows/e2e-1.28.yaml index b7e8ce8a27..3acf45ce71 100644 --- a/.github/workflows/e2e-1.28.yaml +++ b/.github/workflows/e2e-1.28.yaml @@ -13,7 +13,7 @@ permissions: read-all env: # Common versions - GO_VERSION: '1.20' + GO_VERSION: '1.22' KIND_VERSION: 'v0.22.0' KIND_IMAGE: 'kindest/node:v1.28.7' KIND_CLUSTER_NAME: 'ci-testing' @@ -47,33 +47,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -126,33 +100,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -205,33 +153,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -297,33 +219,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -389,33 +285,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -481,33 +351,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -551,33 +395,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -620,33 +438,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config @@ -699,35 +491,7 @@ jobs: kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } - name: Install Kruise run: | - set -ex - kubectl create ns kruise-system - kubectl apply -f test/kruise-e2e-config.yaml - kubectl cluster-info - IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} ./scripts/deploy_kind.sh - NODES=$(kubectl get node | wc -l) - for ((i=1;i<10;i++)); - do - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - set -e - if [ "$PODS" -eq "$NODES" ]; then - break - fi - sleep 3 - done - set +e - PODS=$(kubectl get pod -n kruise-system | grep '1/1' | wc -l) - kubectl get node -o yaml - kubectl get all -n kruise-system -o yaml - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system - kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system --previous=true - set -e - if [ "$PODS" -eq "$NODES" ]; then - echo "Wait for kruise-manager and kruise-daemon ready successfully" - else - echo "Timeout to wait for kruise-manager and kruise-daemon ready" - exit 1 - fi + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise - name: Run E2E Tests run: | export KUBECONFIG=/home/runner/.kube/config diff --git a/.github/workflows/e2e-1.30.yaml b/.github/workflows/e2e-1.30.yaml new file mode 100644 index 0000000000..591e8af0db --- /dev/null +++ b/.github/workflows/e2e-1.30.yaml @@ -0,0 +1,298 @@ +name: E2E-1.30 + +on: + push: + branches: + - master + - release-* + pull_request: {} + workflow_dispatch: {} + +# Declare default permissions as read only. +permissions: read-all + +env: + # Common versions + GO_VERSION: '1.22' + KIND_VERSION: 'v0.22.0' + KIND_IMAGE: 'kindest/node:v1.30.8' + KIND_CLUSTER_NAME: 'ci-testing' + +jobs: + astatefulset-storage: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Install-CSI + run: | + make install-csi + + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] AppStatefulSetStorage' --print-info + + astatefulset: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] StatefulSet' --print-info + + pullimages-containerrecreate: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] (PullImage|ContainerRecreateRequest|PullImages)' --print-info + + advanced-daemonset: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] DaemonSet' --print-info + + sidecarset: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] SidecarSet' --print-info + + ephemeraljob: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] EphemeralJob' --print-info + + podUnavailableBudget: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[policy\] PodUnavailableBudget' --print-info + + clonesetAndInplace: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Install-CSI + run: | + make install-csi + + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus '\[apps\] (InplaceVPA)' --print-info + + other: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + submodules: true + - name: Setup Go + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + with: + go-version: ${{ env.GO_VERSION }} + - name: Setup Kind Cluster + uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 + with: + node_image: ${{ env.KIND_IMAGE }} + cluster_name: ${{ env.KIND_CLUSTER_NAME }} + config: ./test/kind-conf-with-vpa.yaml + version: ${{ env.KIND_VERSION }} + - name: Build image + run: | + export IMAGE="openkruise/kruise-manager:e2e-${GITHUB_RUN_ID}" + docker build --pull --no-cache . -t $IMAGE + kind load docker-image --name=${KIND_CLUSTER_NAME} $IMAGE || { echo >&2 "kind not installed or error loading image: $IMAGE"; exit 1; } + - name: Install Kruise + run: | + IMG=openkruise/kruise-manager:e2e-${GITHUB_RUN_ID} make install-kruise + - name: Run E2E Tests + run: | + export KUBECONFIG=/home/runner/.kube/config + tools/hack/run-kruise-e2e-test.sh --focus "" --skip '\[apps\] (InplaceVPA|AppStatefulSetStorage|StatefulSet|PullImage|PullImages|ContainerRecreateRequest|DaemonSet|SidecarSet|EphemeralJob)' --skip '\[policy\] PodUnavailableBudget' --timeout 90m --print-info diff --git a/Dockerfile b/Dockerfile index b22371f68b..0bd6636976 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,7 @@ # Build the manager and daemon binaries ARG BASE_IMAGE=alpine -ARG BASE_IMAGE_VERSION=3.19@sha256:ae65dbf8749a7d4527648ccee1fa3deb6bfcae34cbc30fc67aa45c44dcaa90ee -FROM golang:1.20.14-alpine3.19@sha256:e47f121850f4e276b2b210c56df3fda9191278dd84a3a442bfe0b09934462a8f as builder - +ARG BASE_IMAGE_VERSION=3.21@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099 +FROM golang:1.22.11-alpine3.21@sha256:161858498a61ce093c8e2bd704299bfb23e5bff79aef99b6c40bb9c6a43acf0f as builder WORKDIR /workspace # Copy the Go Modules manifests COPY go.mod go.mod diff --git a/Dockerfile_multiarch b/Dockerfile_multiarch index ab9399ad87..042d917665 100644 --- a/Dockerfile_multiarch +++ b/Dockerfile_multiarch @@ -1,7 +1,7 @@ # Build the manager and daemon binaries ARG BASE_IMAGE=alpine -ARG BASE_IMAGE_VERSION=3.19@sha256:ae65dbf8749a7d4527648ccee1fa3deb6bfcae34cbc30fc67aa45c44dcaa90ee -ARG BUILD_BASE_IMAGE=golang:1.20.14-alpine3.19@sha256:e47f121850f4e276b2b210c56df3fda9191278dd84a3a442bfe0b09934462a8f +ARG BASE_IMAGE_VERSION=3.21@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099 +ARG BUILD_BASE_IMAGE=golang:1.22.11-alpine3.21@sha256:161858498a61ce093c8e2bd704299bfb23e5bff79aef99b6c40bb9c6a43acf0f FROM --platform=$BUILDPLATFORM ${BUILD_BASE_IMAGE} as builder WORKDIR /workspace diff --git a/Makefile b/Makefile index e0ccc397ee..f6a5f3702d 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ GOOS ?= $(shell go env GOOS) # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. # Run `setup-envtest list` to list available versions. -ENVTEST_K8S_VERSION ?= 1.28.0 +ENVTEST_K8S_VERSION ?= 1.30.0 # Setting SHELL to bash allows bash commands to be executed by recipes. # This is a requirement for 'setup-envtest.sh' in the test target. @@ -28,7 +28,7 @@ all: build ##@ Development go_check: - @scripts/check_go_version "1.20" + @scripts/check_go_version "1.22" generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. @scripts/generate_client.sh @@ -53,6 +53,12 @@ test: generate fmt vet manifests envtest ## Run tests KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test -race ./pkg/... -coverprofile cover.out rm pkg/daemon/criruntime/imageruntime/fake_plugin/fake-credential-plugin +atest: + echo $(ENVTEST) + go build -o pkg/daemon/criruntime/imageruntime/fake_plugin/fake-credential-plugin pkg/daemon/criruntime/imageruntime/fake_plugin/main.go && chmod +x pkg/daemon/criruntime/imageruntime/fake_plugin/fake-credential-plugin + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test -race ./pkg/... -coverprofile cover.out + rm pkg/daemon/criruntime/imageruntime/fake_plugin/fake-credential-plugin + coverage-report: ## Generate cover.html from cover.out go tool cover -html=cover.out -o cover.html ifeq ($(GOOS), darwin) @@ -99,11 +105,11 @@ undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/confi CONTROLLER_GEN = $(shell pwd)/bin/controller-gen controller-gen: ## Download controller-gen locally if necessary. -# controller-gen@v0.14.0 comply with k8s.io/api v0.28.x -ifeq ("$(shell $(CONTROLLER_GEN) --version 2> /dev/null)", "Version: v0.14.0") +# controller-gen@v0.16.5 comply with k8s.io/api v0.30.x +ifeq ("$(shell $(CONTROLLER_GEN) --version 2> /dev/null)", "Version: v0.16.5") else rm -rf $(CONTROLLER_GEN) - $(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.14.0) + $(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.5) endif KUSTOMIZE = $(shell pwd)/bin/kustomize kustomize: ## Download kustomize locally if necessary. diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 43845fac4b..68200364df 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -5,145 +5,90 @@ metadata: name: manager-role rules: - apiGroups: - - '*' - resources: - - '*' - verbs: - - list -- apiGroups: - - '*' - resources: - - '*/scale' - verbs: - - get - - list - - watch -- apiGroups: - - admissionregistration.k8s.io + - "" resources: - - mutatingwebhookconfigurations + - configmaps + - events + - persistentvolumeclaims + - pods verbs: + - create + - delete - get - list - patch - update - watch - apiGroups: - - admissionregistration.k8s.io + - "" resources: - - validatingwebhookconfigurations + - namespaces + - nodes verbs: - get - list - - patch - - update - watch - apiGroups: - - apiextensions.k8s.io + - "" resources: - - customresourcedefinitions + - pods/ephemeralcontainers + - pods/status verbs: - get - - list - patch - update - - watch - apiGroups: - - apps + - "" resources: - - controllerrevisions + - secrets verbs: - create - delete - get - list - - patch - update - watch - apiGroups: - - apps + - '*' resources: - - deployments + - '*' verbs: - - create - - delete - - get - list - - patch - - update - - watch -- apiGroups: - - apps - resources: - - deployments/status - verbs: - - get - - patch - - update - apiGroups: - - apps + - '*' resources: - - replicasets + - '*/scale' verbs: - get - list - watch - apiGroups: - - apps - resources: - - replicasets/status - verbs: - - get -- apiGroups: - - apps + - admissionregistration.k8s.io resources: - - statefulsets + - mutatingwebhookconfigurations + - validatingwebhookconfigurations verbs: - - create - - delete - get - list - patch - update - watch - apiGroups: - - apps - resources: - - statefulsets/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io + - apiextensions.k8s.io resources: - - advancedcronjobs + - customresourcedefinitions verbs: - - create - - delete - get - list - patch - update - watch - apiGroups: - - apps.kruise.io - resources: - - advancedcronjobs/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - advancedcronjobs/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io + - apps resources: - - broadcastjobs + - controllerrevisions + - deployments + - statefulsets verbs: - create - delete @@ -153,75 +98,45 @@ rules: - update - watch - apiGroups: - - apps.kruise.io - resources: - - broadcastjobs/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io + - apps resources: - - broadcastjobs/status + - deployments/status + - statefulsets/status verbs: - get - patch - update - apiGroups: - - apps.kruise.io + - apps resources: - - clonesets + - replicasets verbs: - - create - - delete - get - list - - patch - - update - watch - apiGroups: - - apps.kruise.io - resources: - - clonesets/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io + - apps resources: - - clonesets/status + - replicasets/status verbs: - get - - patch - - update - apiGroups: - apps.kruise.io resources: + - advancedcronjobs + - broadcastjobs + - clonesets - containerrecreaterequests - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - containerrecreaterequests/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - containerrecreaterequests/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - daemonsets + - imagelistpulljobs + - imagepulljobs + - nodeimages + - nodepodprobes + - persistentpodstates + - podprobemarkers + - sidecarsets + - statefulsets + - uniteddeployments verbs: - create - delete @@ -233,13 +148,45 @@ rules: - apiGroups: - apps.kruise.io resources: + - advancedcronjobs/finalizers + - broadcastjobs/finalizers + - clonesets/finalizers + - containerrecreaterequests/finalizers - daemonsets/finalizers + - imagelistpulljobs/finalizers + - imagepulljobs/finalizers + - nodeimages/finalizers + - nodepodprobes/finalizers + - persistentpodstates/finalizers + - podprobemarkers/finalizers + - resourcedistributions/finalizers + - sidecarsets/finalizers + - statefulsets/finalizers + - uniteddeployments/finalizers + - workloadspreads/finalizers verbs: - update - apiGroups: - apps.kruise.io resources: + - advancedcronjobs/status + - broadcastjobs/status + - clonesets/status + - containerrecreaterequests/status - daemonsets/status + - ephemeraljobs/finalizers + - ephemeraljobs/status + - imagelistpulljobs/status + - imagepulljobs/status + - nodeimages/status + - nodepodprobes/status + - persistentpodstates/status + - podprobemarkers/status + - resourcedistributions/status + - sidecarsets/status + - statefulsets/status + - uniteddeployments/status + - workloadspreads/status verbs: - get - patch @@ -258,49 +205,25 @@ rules: - apiGroups: - apps.kruise.io resources: - - ephemeraljobs/finalizers - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - ephemeraljobs/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - imagelistpulljobs + - resourcedistributions verbs: - - create - - delete - get - list - - patch - - update - watch - apiGroups: - apps.kruise.io resources: - - imagelistpulljobs/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - imagelistpulljobs/status + - workloadspreads verbs: - get + - list - patch - update + - watch - apiGroups: - - apps.kruise.io + - batch resources: - - imagepulljobs + - jobs verbs: - create - delete @@ -310,358 +233,13 @@ rules: - update - watch - apiGroups: - - apps.kruise.io + - batch resources: - - imagepulljobs/finalizers + - jobs/status verbs: + - get + - patch - update -- apiGroups: - - apps.kruise.io - resources: - - imagepulljobs/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - nodeimages - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - nodeimages/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - nodeimages/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - nodepodprobes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - nodepodprobes/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - nodepodprobes/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - persistentpodstates - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - persistentpodstates/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - persistentpodstates/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - podprobemarkers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - podprobemarkers/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - podprobemarkers/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - resourcedistributions - verbs: - - get - - list - - watch -- apiGroups: - - apps.kruise.io - resources: - - resourcedistributions/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - resourcedistributions/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - sidecarsets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - sidecarsets/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - sidecarsets/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - statefulsets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - statefulsets/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - statefulsets/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - uniteddeployments - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - uniteddeployments/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - uniteddeployments/status - verbs: - - get - - patch - - update -- apiGroups: - - apps.kruise.io - resources: - - workloadspreads - verbs: - - get - - list - - patch - - update - - watch -- apiGroups: - - apps.kruise.io - resources: - - workloadspreads/finalizers - verbs: - - update -- apiGroups: - - apps.kruise.io - resources: - - workloadspreads/status - verbs: - - get - - patch - - update -- apiGroups: - - batch - resources: - - jobs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - batch - resources: - - jobs/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods/ephemeralcontainers - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - pods/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - update - - watch - apiGroups: - policy.kruise.io resources: diff --git a/go.mod b/go.mod index 8cd3e689a2..e6ab43a340 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/openkruise/kruise -go 1.20 +go 1.22.0 require ( github.com/appscode/jsonpatch v1.0.1 @@ -18,22 +18,22 @@ require ( golang.org/x/time v0.3.0 gomodules.xyz/jsonpatch/v2 v2.4.0 google.golang.org/grpc v1.63.0 - k8s.io/api v0.28.9 - k8s.io/apiextensions-apiserver v0.28.9 - k8s.io/apimachinery v0.28.9 - k8s.io/apiserver v0.28.9 - k8s.io/client-go v0.28.9 - k8s.io/code-generator v0.28.9 - k8s.io/component-base v0.28.9 - k8s.io/component-helpers v0.28.9 - k8s.io/cri-api v0.28.9 + k8s.io/api v0.30.8 + k8s.io/apiextensions-apiserver v0.30.8 + k8s.io/apimachinery v0.30.8 + k8s.io/apiserver v0.30.8 + k8s.io/client-go v0.30.8 + k8s.io/code-generator v0.30.8 + k8s.io/component-base v0.30.8 + k8s.io/component-helpers v0.30.8 + k8s.io/cri-api v0.30.8 k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 k8s.io/klog/v2 v2.120.1 - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 - k8s.io/kubelet v0.28.9 - k8s.io/kubernetes v1.28.9 + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 + k8s.io/kubelet v0.30.8 + k8s.io/kubernetes v1.30.8 k8s.io/utils v0.0.0-20230726121419-3b25d923346b - sigs.k8s.io/controller-runtime v0.16.6 + sigs.k8s.io/controller-runtime v0.18.6 ) require ( @@ -41,25 +41,29 @@ require ( github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/go-logr/zapr v1.2.4 // indirect - github.com/google/cel-go v0.16.1 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/google/cel-go v0.17.8 // indirect github.com/google/gnostic-models v0.6.8 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/stoewer/go-strcase v1.2.0 // indirect - go.etcd.io/etcd/api/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/v3 v3.5.9 // indirect + go.etcd.io/etcd/api/v3 v3.5.10 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect + go.etcd.io/etcd/client/v3 v3.5.10 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.25.0 // indirect + go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.22.0 // indirect golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 // indirect golang.org/x/net v0.24.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect - k8s.io/controller-manager v0.28.9 // indirect - k8s.io/kms v0.28.9 // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 // indirect + k8s.io/controller-manager v0.30.8 // indirect + k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 // indirect + k8s.io/kms v0.30.8 // indirect + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect ) require ( @@ -72,9 +76,9 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect @@ -104,7 +108,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect @@ -130,11 +134,11 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/cloud-provider v0.28.9 // indirect - k8s.io/csi-translation-lib v0.28.9 // indirect - k8s.io/dynamic-resource-allocation v0.28.9 // indirect - k8s.io/kube-scheduler v0.28.9 // indirect - k8s.io/mount-utils v0.28.9 // indirect + k8s.io/cloud-provider v0.30.8 // indirect + k8s.io/csi-translation-lib v0.30.8 // indirect + k8s.io/dynamic-resource-allocation v0.30.8 // indirect + k8s.io/kube-scheduler v0.30.8 // indirect + k8s.io/mount-utils v0.30.8 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect @@ -142,21 +146,32 @@ require ( replace ( golang.org/x/sys => golang.org/x/sys v0.19.0 - k8s.io/api => k8s.io/api v0.28.9 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.28.9 - k8s.io/apimachinery => k8s.io/apimachinery v0.28.9 - k8s.io/apiserver => k8s.io/apiserver v0.28.9 - k8s.io/client-go => k8s.io/client-go v0.28.9 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.28.9 - k8s.io/code-generator => k8s.io/code-generator v0.28.9 - k8s.io/component-base => k8s.io/component-base v0.28.9 - k8s.io/component-helpers => k8s.io/component-helpers v0.28.9 - k8s.io/controller-manager => k8s.io/controller-manager v0.28.9 - k8s.io/cri-api => k8s.io/cri-api v0.28.9 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.28.9 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.28.9 - k8s.io/kms => k8s.io/kms v0.28.9 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.28.9 - k8s.io/kubelet => k8s.io/kubelet v0.28.9 - k8s.io/mount-utils => k8s.io/mount-utils v0.28.9 + k8s.io/api => k8s.io/api v0.30.8 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.30.8 + k8s.io/apimachinery => k8s.io/apimachinery v0.30.8 + k8s.io/apiserver => k8s.io/apiserver v0.30.8 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.30.8 + k8s.io/client-go => k8s.io/client-go v0.30.8 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.30.8 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.30.8 + k8s.io/code-generator => k8s.io/code-generator v0.30.8 + k8s.io/component-base => k8s.io/component-base v0.30.8 + k8s.io/component-helpers => k8s.io/component-helpers v0.30.8 + k8s.io/controller-manager => k8s.io/controller-manager v0.30.8 + k8s.io/cri-api => k8s.io/cri-api v0.30.8 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.30.8 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.30.8 + k8s.io/endpointslice => k8s.io/endpointslice v0.30.8 + k8s.io/kms => k8s.io/kms v0.30.8 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.30.8 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.30.8 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.30.8 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.30.8 + k8s.io/kubectl => k8s.io/kubectl v0.30.8 + k8s.io/kubelet => k8s.io/kubelet v0.30.8 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.8 + k8s.io/metrics => k8s.io/metrics v0.30.8 + k8s.io/mount-utils => k8s.io/mount-utils v0.30.8 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.30.8 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.30.8 ) diff --git a/go.sum b/go.sum index 2c13647ac0..1268379635 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,8 @@ cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= @@ -10,10 +12,9 @@ github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/g github.com/appscode/jsonpatch v1.0.1 h1:e82Bj+rsBSnpsmjiIGlc9NiKSBpJONZkamk/F8GrCR0= github.com/appscode/jsonpatch v1.0.1/go.mod h1:4AJxUpXUhv4N+ziTvIcWWXgeorXpxPZOfk9HdEVr96M= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= @@ -23,6 +24,7 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -34,17 +36,21 @@ github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/evanphx/json-patch v4.0.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -55,13 +61,12 @@ github.com/go-bindata/go-bindata v3.1.2+incompatible h1:5vjJMVhowQdPzjE1LdxyFF7Y github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= @@ -70,13 +75,16 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -89,8 +97,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/cel-go v0.16.1 h1:3hZfSNiAU3KOiNtxuFXVp5WFy4hf/Ly3Sa4/7F8SXNo= -github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= +github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -105,14 +114,18 @@ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -120,18 +133,18 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -151,6 +164,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -159,6 +174,7 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= @@ -169,7 +185,6 @@ github.com/opencontainers/runc v1.2.0-rc.1 h1:SMjop2pxxYRTfKdsigna/8xRoaoCfIQfD2 github.com/opencontainers/runc v1.2.0-rc.1/go.mod h1:m9JwxfHzXz5YTTXBQr7EY9KTuazFAGPyMQx2nRR3vTw= github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -180,15 +195,17 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -208,22 +225,28 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= +github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.9 h1:YZ2OLi0OvR0H75AcgSUajjd5uqKDKocQUqROTG11jIo= -go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.etcd.io/etcd/pkg/v3 v3.5.9 h1:6R2jg/aWd/zB9+9JxmijDKStGJAPFsX3e6BeJkMi6eQ= -go.etcd.io/etcd/raft/v3 v3.5.9 h1:ZZ1GIHoUlHsn0QVqiRysAm3/81Xx7+i2d7nSdWxlOiI= -go.etcd.io/etcd/server/v3 v3.5.9 h1:vomEmmxeztLtS5OEH7d0hBAg4cjVIu9wXuNzUZx2ZA0= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k= +go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= +go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0= +go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= +go.etcd.io/etcd/client/v2 v2.305.10 h1:MrmRktzv/XF8CvtQt+P6wLUlURaNpSDJHFZhe//2QE4= +go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= +go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao= +go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= +go.etcd.io/etcd/pkg/v3 v3.5.10 h1:WPR8K0e9kWl1gAhB5A7gEa5ZBTNkT9NdNWrR8Qpo1CM= +go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs= +go.etcd.io/etcd/raft/v3 v3.5.10 h1:cgNAYe7xrsrn/5kXMSaH8kM/Ky8mAdMqGOxyYwpP0LA= +go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc= +go.etcd.io/etcd/server/v3 v3.5.10 h1:4NOGyOwD5sUZ22PiWYKmfxqoeh72z6EhYjNosKGLmZg= +go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= @@ -242,15 +265,12 @@ go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8 go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -259,22 +279,18 @@ golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= @@ -285,7 +301,6 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= @@ -304,13 +319,11 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= @@ -341,7 +354,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -361,55 +373,57 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.28.9 h1:E7VEXXCAlSrp+08zq4zgd+ko6Ttu0Mw+XoXlIkDTVW0= -k8s.io/api v0.28.9/go.mod h1:AnCsDYf3SHjfa8mPG5LGYf+iF4mie+3peLQR51MMCgw= -k8s.io/apiextensions-apiserver v0.28.9 h1:yzPHp+4IASHeu7XIPkAKJrY4UjWdjiAjOcQMd6oNKj0= -k8s.io/apiextensions-apiserver v0.28.9/go.mod h1:Rjhvq5y3JESdZgV2UOByldyefCfRrUguVpBLYOAIbVs= -k8s.io/apimachinery v0.28.9 h1:aXz4Zxsw+Pk4KhBerAtKRxNN1uSMWKfciL/iOdBfXvA= -k8s.io/apimachinery v0.28.9/go.mod h1:zUG757HaKs6Dc3iGtKjzIpBfqTM4yiRsEe3/E7NX15o= -k8s.io/apiserver v0.28.9 h1:koPXvgSXRBDxKJQjJGdZNgPsT9lQv6scJJFipd1m86E= -k8s.io/apiserver v0.28.9/go.mod h1:D51I37WBZojJhmLcjNVE4GSVrjiUHP+yq+N5KvKn2wY= -k8s.io/client-go v0.28.9 h1:mmMvejwc/KDjMLmDpyaxkWNzlWRCJ6ht7Qsbsnwn39Y= -k8s.io/client-go v0.28.9/go.mod h1:GFDy3rUNId++WGrr0hRaBrs+y1eZz5JtVZODEalhRMo= -k8s.io/cloud-provider v0.28.9 h1:FBW4Ii1NdXCHKprzkM8/s5BpxvLgJmYrZTNJABsVX7Y= -k8s.io/cloud-provider v0.28.9/go.mod h1:7tFyiftAlSARvJS6mzZQQKKDQA81asNQ2usg35R3Exo= -k8s.io/code-generator v0.28.9 h1:NyZt4+equopQNbwjSSpVikB15U4ghmvIaqn+VWd367U= -k8s.io/code-generator v0.28.9/go.mod h1:WiJgVNDFAlT90nq6IOxhZ1gxL2JexbcfAx9ZBsyQ3Do= -k8s.io/component-base v0.28.9 h1:ySM2PR8Z/xaUSG1Akd3yM6dqUezTltI7S5aV41MMuuc= -k8s.io/component-base v0.28.9/go.mod h1:QtWzscEhCKRfHV24/S+11BwWjVxhC6fd3RYoEgZcWFU= -k8s.io/component-helpers v0.28.9 h1:knX9F2nRoxF4wplgXO4C5tE4/k7HGszK3177Tm4+CUc= -k8s.io/component-helpers v0.28.9/go.mod h1:TdAkLbywEDE2CB5h8LbM/W03T3k8wvqAaoPcEZrr6Z4= -k8s.io/controller-manager v0.28.9 h1:muAtmO2mDN7pDkAJQMknvWy+WQhkvvi/jK1V82+qbLw= -k8s.io/controller-manager v0.28.9/go.mod h1:RYP65K6GWLRWYZR7PRRaStfvgeXkhCGZwJsxRPuaDV0= -k8s.io/cri-api v0.28.9 h1:AlhkmIDLeKWubmX2xVkW3DhcbPwH79xauFySijfkIDU= -k8s.io/cri-api v0.28.9/go.mod h1:8/bPK3T4irPoj3LjriQc1TAIheeN2yWXR3mz+8jNZ8U= -k8s.io/csi-translation-lib v0.28.9 h1:zl93l7wk0iwKInyRJfaodvsWf1z8QtWCN9a5OqHeT3o= -k8s.io/csi-translation-lib v0.28.9/go.mod h1:eOniPQitdkuyVh+gtktg3yeDJQu/IidIUSMadDPLhak= -k8s.io/dynamic-resource-allocation v0.28.9 h1:u3upC0ah0eNrO1uh3yUL3VefvB1OUTNQLKjxMfe1pgc= -k8s.io/dynamic-resource-allocation v0.28.9/go.mod h1:SIwpYxFh5gk7bW1dZ+GgnA6l4VmhrnUugePlLxYva+4= +k8s.io/api v0.30.8 h1:Y+yZRF3c1WC0MTkLe0qBkiLCquRNa4I21/iDioGMCbo= +k8s.io/api v0.30.8/go.mod h1:89IE5MzirZ5HHxU/Hq1/KWGqXkhXClu/FHGesFhQ0A4= +k8s.io/apiextensions-apiserver v0.30.8 h1:Y0JqPRpiiEmWg7OptY+iwGDol970NXZE0j0LcPwO0U8= +k8s.io/apiextensions-apiserver v0.30.8/go.mod h1:Lg5U2+EIgqSmBvLzxB4bI2K6k0Hx59BZXpHyeiWLB8M= +k8s.io/apimachinery v0.30.8 h1:9jyTItYzmJc00cBDxZC5ArFNxUeKCwbw0m760iFUMKY= +k8s.io/apimachinery v0.30.8/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apiserver v0.30.8 h1:DOWCFq7xogXYGmDyRTDwCmftStoWjvSquhM/czhU86M= +k8s.io/apiserver v0.30.8/go.mod h1:OXjKIUTmtoYffVxIOqHDfMpPtqWQoPLpwvsWT++AXiI= +k8s.io/client-go v0.30.8 h1:fC1SQMZm7bSWiVv9ydN+nv+sqGVAxMdf/5eKUVffNJE= +k8s.io/client-go v0.30.8/go.mod h1:daF3UcGVqGPHvH5mn/ESkp/VoR8i9tg9IBfKr+AeFYo= +k8s.io/cloud-provider v0.30.8 h1:E4KEKiyE5vLP9mN6VpRcfw9jPSJrIL0dic7hyIx8rL0= +k8s.io/cloud-provider v0.30.8/go.mod h1:1PYl5XVXo0K+seDgRtQh4Fb6zohEL8zPd5pzZdteOs8= +k8s.io/code-generator v0.30.8 h1:3KoO0HaE6VkeRnTTC8EW/S0e3yb1SLq71vbUNhw7Tuo= +k8s.io/code-generator v0.30.8/go.mod h1:slG4z06zmyvsSQjWkwzAEBDmn0MLgYO9ap07ZW1mCnc= +k8s.io/component-base v0.30.8 h1:63bee0sAbp3JIbjZR91/zkGQCdNwx+FymFbtXiF35zQ= +k8s.io/component-base v0.30.8/go.mod h1:BagJCGqPHHebrxT60EDn5+O/JrzILogIYeIewk8BsjU= +k8s.io/component-helpers v0.30.8 h1:Z/BLa4B0XyM/1k/G0uvfj/mv9JXsArV1hnU8joKd66I= +k8s.io/component-helpers v0.30.8/go.mod h1:f8uhAfUrP6B6Guj6PSbSdBA+rneRASOHMJWOafzjS2A= +k8s.io/controller-manager v0.30.8 h1:yAjGH6B80BKWFP8Ipi2RBLoXAjek0yq42RZcI/jVbx0= +k8s.io/controller-manager v0.30.8/go.mod h1:IQPyPCe2d+ylygok7xGdIcXIcASvS4SIUNR4JdBohMw= +k8s.io/cri-api v0.30.8 h1:936Rel2AzGWyaEqfJZTFAJT0aUTOF6AxPm+yH0K2K+Y= +k8s.io/cri-api v0.30.8/go.mod h1://4/umPJSW1ISNSNng4OwjpkvswJOQwU8rnkvO8P+xg= +k8s.io/csi-translation-lib v0.30.8 h1:FguBj/pvuZgpiRJxPLHUyhlGNWnCD5UHRdUxNAAtuGA= +k8s.io/csi-translation-lib v0.30.8/go.mod h1:3Zc2vVTwc2fFQN/OqF6pPOmwdsdf/osGKgb3lzR6aVc= +k8s.io/dynamic-resource-allocation v0.30.8 h1:2QxODv67+NLa4M0srfY12xEdiWZ0uuk5q6V6suwRWEA= +k8s.io/dynamic-resource-allocation v0.30.8/go.mod h1:3Teud41qNQ3rtN/LZzBWtDMpkEK1GtAT7J4X3YfSvGE= k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks= k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kms v0.28.9 h1:ApCWJulBl+uFRTr2jtTpG1lffmqqMuLnOH/RUbtO4UY= -k8s.io/kms v0.28.9/go.mod h1:VgyAIRMFqZX9lHyixecU/JTI0wnPD1wCIlquvlXRJ+Y= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/kube-scheduler v0.28.9 h1:rRFkTBiPIpcCdyI7/E2HVyzWehmSW1eI/rWyKTVrKfk= -k8s.io/kube-scheduler v0.28.9/go.mod h1:9xnBlTE/B2EwfiUZ/uh2zBEVViRhGG+ojLiMvyxXCe8= -k8s.io/kubelet v0.28.9 h1:76v00fFLeniz27kXhGGUIxONdwa9LKcD2Jd5cXYAZko= -k8s.io/kubelet v0.28.9/go.mod h1:46P39DFjI+E59nU2OgpatyS3oWy58ClulKO6riZ/97o= -k8s.io/kubernetes v1.28.9 h1:I4sYGQJOuxEo4/QWoY7M8kDB7O0HcH266t6o6mR6ogg= -k8s.io/kubernetes v1.28.9/go.mod h1:chlmcCDBnOA/y+572cw8dO0Rci1wiA8bm5+zhPdFLCk= -k8s.io/mount-utils v0.28.9 h1:RWt7xIrTzoKYKmMZ9Lh/rkZ9zreCUdpzhFe8jJXXuNQ= -k8s.io/mount-utils v0.28.9/go.mod h1:ZxAFXgKzcAyi3VTd2pKFlZFswl9Q/cveJ5aptdjQOuc= +k8s.io/kms v0.30.8 h1:qJ5DvD2dUYCvTzb59H+/YzowDFvfUmvnJBSls6RI5Wo= +k8s.io/kms v0.30.8/go.mod h1:GrMurD0qk3G4yNgGcsCEmepqf9KyyIrTXYR2lyUOJC4= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kube-scheduler v0.30.8 h1:iYOABvhXJ3AqpuheLNg0qQW3Qq/TqgAnNPyI5e21Id4= +k8s.io/kube-scheduler v0.30.8/go.mod h1:Xi6E7YIIOzEjBdIn2MtLcoHCmHlZoGmqcDZ/b115+is= +k8s.io/kubelet v0.30.8 h1:hhxavqZMrn3Z+0+Fucx4nND/Y1REqYRehtV8Nq+XTzU= +k8s.io/kubelet v0.30.8/go.mod h1:eqbR2YVd9sRGnW5qmLVrwENyIFcCE1sCUjpoQ5UtnWk= +k8s.io/kubernetes v1.30.8 h1:QY8y6PpXsyqBdLIv9ObB6S/X3rrJLtbLKgLZ+wNYgdQ= +k8s.io/kubernetes v1.30.8/go.mod h1:hV3c+sqOEO0eVqgSo0KW5dOJ6UjGJ2l3Pd9+Qvft8UI= +k8s.io/mount-utils v0.30.8 h1:7fsKmKZAc7nklpHuwknmWgaE/WEY6dnDlAuyGZFN/9Y= +k8s.io/mount-utils v0.30.8/go.mod h1:9sCVmwGLcV1MPvbZ+rToMDnl1QcGozy+jBPd0MsQLIo= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 h1:trsWhjU5jZrx6UvFu4WzQDrN7Pga4a7Qg+zcfcj64PA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= -sigs.k8s.io/controller-runtime v0.16.6 h1:FiXwTuFF5ZJKmozfP2Z0j7dh6kmxP4Ou1KLfxgKKC3I= -sigs.k8s.io/controller-runtime v0.16.6/go.mod h1:+dQzkZxnylD0u49e0a+7AR+vlibEBaThmPca7lTyUsI= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4= +sigs.k8s.io/controller-runtime v0.18.6 h1:UnEoLBLDpQwzJ2jYh6aTdiMhGjNDR7IdFn9YEqHIccc= +sigs.k8s.io/controller-runtime v0.18.6/go.mod h1:Dcsa9v8AEBWa3sQNJHsuWPT4ICv99irl5wj83NiC12U= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go index 35e9db9823..f8235ae5ba 100644 --- a/pkg/client/informers/externalversions/factory.go +++ b/pkg/client/informers/externalversions/factory.go @@ -42,6 +42,7 @@ type sharedInformerFactory struct { lock sync.Mutex defaultResync time.Duration customResync map[reflect.Type]time.Duration + transform cache.TransformFunc informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -80,6 +81,14 @@ func WithNamespace(namespace string) SharedInformerOption { } } +// WithTransform sets a transform on all informers. +func WithTransform(transform cache.TransformFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.transform = transform + return factory + } +} + // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { return NewSharedInformerFactoryWithOptions(client, defaultResync) @@ -184,6 +193,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal } informer = newFunc(f.client, resyncPeriod) + informer.SetTransform(f.transform) f.informers[informerType] = informer return informer diff --git a/pkg/controller/advancedcronjob/advancedcronjob_broadcastjob_controller.go b/pkg/controller/advancedcronjob/advancedcronjob_broadcastjob_controller.go index b8a0afc2a7..bed7707ff9 100644 --- a/pkg/controller/advancedcronjob/advancedcronjob_broadcastjob_controller.go +++ b/pkg/controller/advancedcronjob/advancedcronjob_broadcastjob_controller.go @@ -36,8 +36,9 @@ import ( ) func watchBroadcastJob(mgr manager.Manager, c controller.Controller) error { - if err := c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.BroadcastJob{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.AdvancedCronJob{}, handler.OnlyControllerOwner())); err != nil { + if err := c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.BroadcastJob{}, + handler.TypedEnqueueRequestForOwner[*appsv1alpha1.BroadcastJob]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.AdvancedCronJob{}, handler.OnlyControllerOwner()))); err != nil { return err } diff --git a/pkg/controller/advancedcronjob/advancedcronjob_controller.go b/pkg/controller/advancedcronjob/advancedcronjob_controller.go index d648a4d80c..2becbc0787 100644 --- a/pkg/controller/advancedcronjob/advancedcronjob_controller.go +++ b/pkg/controller/advancedcronjob/advancedcronjob_controller.go @@ -85,8 +85,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to AdvancedCronJob - src := source.Kind(mgr.GetCache(), &appsv1alpha1.AdvancedCronJob{}) - if err = c.Watch(src, &handler.EnqueueRequestForObject{}); err != nil { + src := source.Kind(mgr.GetCache(), &appsv1alpha1.AdvancedCronJob{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.AdvancedCronJob]{}) + if err = c.Watch(src); err != nil { klog.ErrorS(err, "Failed to watch AdvancedCronJob") return err } diff --git a/pkg/controller/advancedcronjob/advancedcronjob_job_controller.go b/pkg/controller/advancedcronjob/advancedcronjob_job_controller.go index f6a6e1d93b..2dfb93f6f6 100644 --- a/pkg/controller/advancedcronjob/advancedcronjob_job_controller.go +++ b/pkg/controller/advancedcronjob/advancedcronjob_job_controller.go @@ -37,8 +37,8 @@ import ( ) func watchJob(mgr manager.Manager, c controller.Controller) error { - if err := c.Watch(source.Kind(mgr.GetCache(), &batchv1.Job{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.BroadcastJob{}, handler.OnlyControllerOwner())); err != nil { + if err := c.Watch(source.Kind(mgr.GetCache(), &batchv1.Job{}, handler.TypedEnqueueRequestForOwner[*batchv1.Job]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.BroadcastJob{}, handler.OnlyControllerOwner()))); err != nil { return err } diff --git a/pkg/controller/broadcastjob/broadcastjob_controller.go b/pkg/controller/broadcastjob/broadcastjob_controller.go index 7bb9efc91f..affdb97584 100644 --- a/pkg/controller/broadcastjob/broadcastjob_controller.go +++ b/pkg/controller/broadcastjob/broadcastjob_controller.go @@ -122,21 +122,21 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to BroadcastJob - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.BroadcastJob{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.BroadcastJob{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.BroadcastJob]{})) if err != nil { return err } // Watch for changes to Pod - err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &podEventHandler{ - enqueueHandler: handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.BroadcastJob{}, handler.OnlyControllerOwner()), - }) + err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &podEventHandler{ + enqueueHandler: handler.TypedEnqueueRequestForOwner[*corev1.Pod](mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.BroadcastJob{}, handler.OnlyControllerOwner()), + })) if err != nil { return err } // Watch for changes to Node - return c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}), &enqueueBroadcastJobForNode{reader: mgr.GetCache()}) + return c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}, &enqueueBroadcastJobForNode{reader: mgr.GetCache()})) } var _ reconcile.Reconciler = &ReconcileBroadcastJob{} diff --git a/pkg/controller/broadcastjob/broadcastjob_controller_test.go b/pkg/controller/broadcastjob/broadcastjob_controller_test.go index 35e2d868b6..92fe2c920c 100644 --- a/pkg/controller/broadcastjob/broadcastjob_controller_test.go +++ b/pkg/controller/broadcastjob/broadcastjob_controller_test.go @@ -544,6 +544,10 @@ func TestJobFailedAfterActiveDeadline(t *testing.T) { activeDeadline := int64(0) now := metav1.Now() job := &appsv1alpha1.BroadcastJob{ + TypeMeta: metav1.TypeMeta{ + Kind: "BroadcastJob", + APIVersion: "apps.kruise.io/v1alpha1", + }, ObjectMeta: metav1.ObjectMeta{ Name: "job10", Namespace: "default", @@ -631,6 +635,10 @@ func createNode(nodeName string) *v1.Node { func createJob(jobName string, parallelism intstr.IntOrString) *appsv1alpha1.BroadcastJob { job1 := &appsv1alpha1.BroadcastJob{ + TypeMeta: metav1.TypeMeta{ + Kind: "BroadcastJob", + APIVersion: "apps.kruise.io/v1alpha1", + }, ObjectMeta: metav1.ObjectMeta{ Name: jobName, Namespace: "default", diff --git a/pkg/controller/broadcastjob/broadcastjob_event_handler.go b/pkg/controller/broadcastjob/broadcastjob_event_handler.go index a4b89b3f1b..566d196ba1 100644 --- a/pkg/controller/broadcastjob/broadcastjob_event_handler.go +++ b/pkg/controller/broadcastjob/broadcastjob_event_handler.go @@ -21,7 +21,7 @@ import ( ) type podEventHandler struct { - enqueueHandler handler.EventHandler + enqueueHandler handler.TypedEventHandler[*v1.Pod] } func isBroadcastJobController(controllerRef *metav1.OwnerReference) bool { @@ -33,10 +33,10 @@ func isBroadcastJobController(controllerRef *metav1.OwnerReference) bool { return controllerRef.Kind == controllerKind.Kind && refGV.Group == controllerKind.Group } -func (p *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - pod := evt.Object.(*v1.Pod) +func (p *podEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object if pod.DeletionTimestamp != nil { - p.Delete(ctx, event.DeleteEvent{Object: evt.Object}, q) + p.Delete(ctx, event.TypedDeleteEvent[*v1.Pod]{Object: pod}, q) return } if controllerRef := metav1.GetControllerOf(pod); controllerRef != nil && isBroadcastJobController(controllerRef) { @@ -46,8 +46,8 @@ func (p *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q w } } -func (p *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - pod := evt.Object.(*v1.Pod) +func (p *podEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object if controllerRef := metav1.GetControllerOf(pod); controllerRef != nil && isBroadcastJobController(controllerRef) { key := types.NamespacedName{Namespace: pod.Namespace, Name: controllerRef.Name}.String() scaleExpectations.ObserveScale(key, expectations.Delete, getAssignedNode(pod)) @@ -55,37 +55,34 @@ func (p *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q w } } -func (p *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *podEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { p.enqueueHandler.Update(ctx, evt, q) } -func (p *podEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *podEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Pod], q workqueue.RateLimitingInterface) { } type enqueueBroadcastJobForNode struct { reader client.Reader } -func (p *enqueueBroadcastJobForNode) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueBroadcastJobForNode) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Node], q workqueue.RateLimitingInterface) { p.addNode(q, evt.Object) } -func (p *enqueueBroadcastJobForNode) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueBroadcastJobForNode) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Node], q workqueue.RateLimitingInterface) { p.deleteNode(q, evt.Object) } -func (p *enqueueBroadcastJobForNode) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueBroadcastJobForNode) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Node], q workqueue.RateLimitingInterface) { } -func (p *enqueueBroadcastJobForNode) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueBroadcastJobForNode) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Node], q workqueue.RateLimitingInterface) { p.updateNode(q, evt.ObjectOld, evt.ObjectNew) } -func (p *enqueueBroadcastJobForNode) addNode(q workqueue.RateLimitingInterface, obj runtime.Object) { - node, ok := obj.(*v1.Node) - if !ok { - return - } +func (p *enqueueBroadcastJobForNode) addNode(q workqueue.RateLimitingInterface, obj *v1.Node) { + node := obj jobList := &v1alpha1.BroadcastJobList{} err := p.reader.List(context.TODO(), jobList) if err != nil { @@ -107,9 +104,9 @@ func (p *enqueueBroadcastJobForNode) addNode(q workqueue.RateLimitingInterface, } } -func (p *enqueueBroadcastJobForNode) updateNode(q workqueue.RateLimitingInterface, old, cur runtime.Object) { - oldNode := old.(*v1.Node) - curNode := cur.(*v1.Node) +func (p *enqueueBroadcastJobForNode) updateNode(q workqueue.RateLimitingInterface, old, cur *v1.Node) { + oldNode := old + curNode := cur if shouldIgnoreNodeUpdate(*oldNode, *curNode) { return } diff --git a/pkg/controller/cloneset/cloneset_controller.go b/pkg/controller/cloneset/cloneset_controller.go index 9c5244f7dc..f8420cc12d 100644 --- a/pkg/controller/cloneset/cloneset_controller.go +++ b/pkg/controller/cloneset/cloneset_controller.go @@ -137,29 +137,30 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to CloneSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.CloneSet{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldCS := e.ObjectOld.(*appsv1alpha1.CloneSet) - newCS := e.ObjectNew.(*appsv1alpha1.CloneSet) - if *oldCS.Spec.Replicas != *newCS.Spec.Replicas { - klog.V(4).InfoS("Observed updated replicas for CloneSet", - "cloneSet", klog.KObj(newCS), "oldReplicas", *oldCS.Spec.Replicas, "newReplicas", *newCS.Spec.Replicas) - } - return true - }, - }) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.CloneSet{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.CloneSet]{}, + predicate.TypedFuncs[*appsv1alpha1.CloneSet]{ + UpdateFunc: func(e event.TypedUpdateEvent[*appsv1alpha1.CloneSet]) bool { + oldCS := e.ObjectOld + newCS := e.ObjectNew + if *oldCS.Spec.Replicas != *newCS.Spec.Replicas { + klog.V(4).InfoS("Observed updated replicas for CloneSet", + "cloneSet", klog.KObj(newCS), "oldReplicas", *oldCS.Spec.Replicas, "newReplicas", *newCS.Spec.Replicas) + } + return true + }, + })) if err != nil { return err } // Watch for changes to Pod - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &podEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &podEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for changes to PVC, just ensure cache updated - err = c.Watch(source.Kind(mgr.GetCache(), &v1.PersistentVolumeClaim{}), &pvcEventHandler{}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.PersistentVolumeClaim{}, &pvcEventHandler{})) if err != nil { return err } diff --git a/pkg/controller/cloneset/cloneset_controller_suite_test.go b/pkg/controller/cloneset/cloneset_controller_suite_test.go index 06fc5698da..15db4ab680 100644 --- a/pkg/controller/cloneset/cloneset_controller_suite_test.go +++ b/pkg/controller/cloneset/cloneset_controller_suite_test.go @@ -29,10 +29,6 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "github.com/onsi/gomega" - "github.com/openkruise/kruise/apis" - appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" - clonesettest "github.com/openkruise/kruise/pkg/controller/cloneset/test" - "github.com/openkruise/kruise/pkg/util" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sruntime "k8s.io/apimachinery/pkg/runtime" @@ -44,6 +40,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/envtest" "sigs.k8s.io/controller-runtime/pkg/manager" + + "github.com/openkruise/kruise/apis" + appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" + clonesettest "github.com/openkruise/kruise/pkg/controller/cloneset/test" + "github.com/openkruise/kruise/pkg/util" ) func init() { diff --git a/pkg/controller/cloneset/cloneset_controller_test.go b/pkg/controller/cloneset/cloneset_controller_test.go index e2f00a33af..2d500b9fa6 100644 --- a/pkg/controller/cloneset/cloneset_controller_test.go +++ b/pkg/controller/cloneset/cloneset_controller_test.go @@ -87,7 +87,7 @@ func TestReconcile(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "foo-vol"}, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, + Resources: v1.VolumeResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, }, }, }, @@ -272,7 +272,7 @@ func testScale(g *gomega.GomegaWithT, instance *appsv1alpha1.CloneSet) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, + Resources: v1.VolumeResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, }, } err := c.Create(context.TODO(), &pvc1) @@ -296,7 +296,7 @@ func testScale(g *gomega.GomegaWithT, instance *appsv1alpha1.CloneSet) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, + Resources: v1.VolumeResourceRequirements{Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Mi")}}, }, } err = c.Create(context.TODO(), &pvc2) diff --git a/pkg/controller/cloneset/cloneset_event_handler.go b/pkg/controller/cloneset/cloneset_event_handler.go index d618f13d2b..0c31d88c09 100644 --- a/pkg/controller/cloneset/cloneset_event_handler.go +++ b/pkg/controller/cloneset/cloneset_event_handler.go @@ -52,14 +52,14 @@ type podEventHandler struct { client.Reader } -var _ handler.EventHandler = &podEventHandler{} +var _ handler.TypedEventHandler[*v1.Pod] = &podEventHandler{} -func (e *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - pod := evt.Object.(*v1.Pod) +func (e *podEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object if pod.DeletionTimestamp != nil { // on a restart of the controller manager, it's possible a new pod shows up in a state that // is already pending deletion. Prevent the pod from being a creation observation. - e.Delete(ctx, event.DeleteEvent{Object: evt.Object}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.Pod]{Object: evt.Object}, q) return } @@ -102,9 +102,9 @@ func (e *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q w } } -func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - oldPod := evt.ObjectOld.(*v1.Pod) - curPod := evt.ObjectNew.(*v1.Pod) +func (e *podEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + oldPod := evt.ObjectOld + curPod := evt.ObjectNew if curPod.ResourceVersion == oldPod.ResourceVersion { // Periodic resync will send update events for all known pods. // Two different versions of the same pod will always have different RVs. @@ -118,10 +118,10 @@ func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q w // for modification of the deletion timestamp and expect an rs to create more replicas asap, not wait // until the kubelet actually deletes the pod. This is different from the Phase of a pod changing, because // an rs never initiates a phase change, and so is never asleep waiting for the same. - e.Delete(ctx, event.DeleteEvent{Object: evt.ObjectNew}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.Pod]{Object: evt.ObjectNew}, q) if labelChanged { // we don't need to check the oldPod.DeletionTimestamp because DeletionTimestamp cannot be unset. - e.Delete(ctx, event.DeleteEvent{Object: evt.ObjectOld}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.Pod]{Object: evt.ObjectOld}, q) } return } @@ -187,12 +187,8 @@ func (e *podEventHandler) shouldIgnoreUpdate(req *reconcile.Request, oldPod, cur return clonesetcore.New(cs).IgnorePodUpdateEvent(oldPod, curPod) } -func (e *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - pod, ok := evt.Object.(*v1.Pod) - if !ok { - klog.ErrorS(nil, "Skipped pod deletion event", "deleteStateUnknown", evt.DeleteStateUnknown, "obj", evt.Object) - return - } +func (e *podEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object clonesetutils.ResourceVersionExpectations.Delete(pod) controllerRef := metav1.GetControllerOf(pod) @@ -210,7 +206,7 @@ func (e *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q w q.Add(*req) } -func (e *podEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *podEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Pod], q workqueue.RateLimitingInterface) { } @@ -225,7 +221,7 @@ func resolveControllerRef(namespace string, controllerRef *metav1.OwnerReference // Compare the OwnerReference Group and Kind against the OwnerType Group and Kind specified by the user. // If the two match, create a Request for the objected referred to by // the OwnerReference. Use the Name from the OwnerReference and the Namespace from the - // object in the event. + // object in the event.Typed if controllerRef.Kind == clonesetutils.ControllerKind.Kind && refGV.Group == clonesetutils.ControllerKind.Group { // Match found - add a Request for the object referred to in the OwnerReference req := reconcile.Request{NamespacedName: types.NamespacedName{ @@ -272,12 +268,12 @@ func (e *podEventHandler) joinCloneSetNames(csList []appsv1alpha1.CloneSet) stri type pvcEventHandler struct { } -var _ handler.EventHandler = &pvcEventHandler{} +var _ handler.TypedEventHandler[*v1.PersistentVolumeClaim] = &pvcEventHandler{} -func (e *pvcEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - pvc := evt.Object.(*v1.PersistentVolumeClaim) +func (e *pvcEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { + pvc := evt.Object if pvc.DeletionTimestamp != nil { - e.Delete(ctx, event.DeleteEvent{Object: evt.Object}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.PersistentVolumeClaim]{Object: evt.Object}, q) return } @@ -298,20 +294,15 @@ func (e *pvcEventHandler) Create(ctx context.Context, evt event.CreateEvent, q w } } -func (e *pvcEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - pvc := evt.ObjectNew.(*v1.PersistentVolumeClaim) +func (e *pvcEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { + pvc := evt.ObjectNew if pvc.DeletionTimestamp != nil { - e.Delete(ctx, event.DeleteEvent{Object: evt.ObjectNew}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.PersistentVolumeClaim]{Object: evt.ObjectNew}, q) } } -func (e *pvcEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - pvc, ok := evt.Object.(*v1.PersistentVolumeClaim) - if !ok { - klog.ErrorS(nil, "Skipped pvc deletion event", "deleteStateUnknown", evt.DeleteStateUnknown, "obj", evt.Object) - return - } - +func (e *pvcEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { + pvc := evt.Object if controllerRef := metav1.GetControllerOf(pvc); controllerRef != nil { if req := resolveControllerRef(pvc.Namespace, controllerRef); req != nil { clonesetutils.ScaleExpectations.ObserveScale(req.String(), expectations.Delete, pvc.Name) @@ -320,6 +311,6 @@ func (e *pvcEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q w } } -func (e *pvcEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *pvcEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { } diff --git a/pkg/controller/cloneset/cloneset_event_handler_test.go b/pkg/controller/cloneset/cloneset_event_handler_test.go index 5f33e5d449..e302a3963f 100644 --- a/pkg/controller/cloneset/cloneset_event_handler_test.go +++ b/pkg/controller/cloneset/cloneset_event_handler_test.go @@ -46,20 +46,20 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { cases := []struct { name string css []*appsv1alpha1.CloneSet - e event.CreateEvent + e event.TypedCreateEvent[*v1.Pod] alterExpectationCreationsKey string alterExpectationCreationsAdds []string expectedQueueLen int }{ { name: "no cs", - e: event.CreateEvent{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{DeletionTimestamp: &metav1.Time{Time: time.Now()}}}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{DeletionTimestamp: &metav1.Time{Time: time.Now()}}}}, expectedQueueLen: 0, }, { name: "no cs", - e: event.CreateEvent{Object: &v1.Pod{}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{}}, expectedQueueLen: 0, }, @@ -99,7 +99,7 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "pod-abc", Labels: map[string]string{"key": "v1"}}}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "pod-abc", Labels: map[string]string{"key": "v1"}}}}, expectedQueueLen: 2, }, { @@ -140,7 +140,7 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{ + e: event.TypedCreateEvent[*v1.Pod]{ Object: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -200,12 +200,12 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { cases := []struct { name string css []*appsv1alpha1.CloneSet - e event.UpdateEvent + e event.TypedUpdateEvent[*v1.Pod] expectedQueueLen int }{ { name: "resourceVersion no changed", - e: event.UpdateEvent{ObjectNew: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}, ObjectOld: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}}, + e: event.TypedUpdateEvent[*v1.Pod]{ObjectNew: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}, ObjectOld: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}}, expectedQueueLen: 0, }, { @@ -246,7 +246,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -321,7 +321,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -396,7 +396,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -470,7 +470,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -544,7 +544,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -617,7 +617,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -682,7 +682,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", diff --git a/pkg/controller/cloneset/revision/cloneset_revision_test.go b/pkg/controller/cloneset/revision/cloneset_revision_test.go index d4a4a9b422..f980a90af4 100644 --- a/pkg/controller/cloneset/revision/cloneset_revision_test.go +++ b/pkg/controller/cloneset/revision/cloneset_revision_test.go @@ -119,7 +119,7 @@ func TestCreateApplyRevisionWithVCTemplates(t *testing.T) { Name: "www-data", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("1Gi"), }, diff --git a/pkg/controller/cloneset/sync/cloneset_scale_test.go b/pkg/controller/cloneset/sync/cloneset_scale_test.go index e11a07c8ae..3a6aa8adff 100644 --- a/pkg/controller/cloneset/sync/cloneset_scale_test.go +++ b/pkg/controller/cloneset/sync/cloneset_scale_test.go @@ -312,7 +312,7 @@ func TestCreatePods(t *testing.T) { ResourceVersion: "1", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("10"), }, @@ -340,7 +340,7 @@ func TestCreatePods(t *testing.T) { ResourceVersion: "1", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("10"), }, diff --git a/pkg/controller/cloneset/sync/cloneset_update_test.go b/pkg/controller/cloneset/sync/cloneset_update_test.go index fb50984291..7b3bf9a4fc 100644 --- a/pkg/controller/cloneset/sync/cloneset_update_test.go +++ b/pkg/controller/cloneset/sync/cloneset_update_test.go @@ -986,6 +986,8 @@ func TestUpdate(t *testing.T) { if err := ctrl.Client.Get(context.TODO(), types.NamespacedName{Namespace: p.Namespace, Name: p.Name}, gotPod); err != nil { t.Fatalf("Failed to test %s, get pod %s error: %v", mc.name, p.Name, err) } + gotPod.APIVersion = "v1" + gotPod.Kind = "Pod" if v, ok := gotPod.Annotations[appspub.LifecycleTimestampKey]; ok { if p.Annotations == nil { diff --git a/pkg/controller/cloneset/test/test.go b/pkg/controller/cloneset/test/test.go index e422e63e60..c35e7e0b4d 100644 --- a/pkg/controller/cloneset/test/test.go +++ b/pkg/controller/cloneset/test/test.go @@ -20,11 +20,12 @@ package test import ( "fmt" - appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + + appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" ) // NewPVC for unit tests. @@ -34,7 +35,7 @@ func NewPVC(name string) v1.PersistentVolumeClaim { Name: name, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: *resource.NewQuantity(10, resource.BinarySI), }, diff --git a/pkg/controller/containerlaunchpriority/container_launch_priority_controller.go b/pkg/controller/containerlaunchpriority/container_launch_priority_controller.go index 65764cfdbc..35d4f016f1 100644 --- a/pkg/controller/containerlaunchpriority/container_launch_priority_controller.go +++ b/pkg/controller/containerlaunchpriority/container_launch_priority_controller.go @@ -70,22 +70,22 @@ func add(mgr manager.Manager, r *ReconcileContainerLaunchPriority) error { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - CreateFunc: func(e event.CreateEvent) bool { - pod := e.Object.(*v1.Pod) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &handler.TypedEnqueueRequestForObject[*v1.Pod]{}, predicate.TypedFuncs[*v1.Pod]{ + CreateFunc: func(e event.TypedCreateEvent[*v1.Pod]) bool { + pod := e.Object return shouldEnqueue(pod, mgr.GetCache()) }, - UpdateFunc: func(e event.UpdateEvent) bool { - pod := e.ObjectNew.(*v1.Pod) + UpdateFunc: func(e event.TypedUpdateEvent[*v1.Pod]) bool { + pod := e.ObjectNew return shouldEnqueue(pod, mgr.GetCache()) }, - DeleteFunc: func(e event.DeleteEvent) bool { + DeleteFunc: func(e event.TypedDeleteEvent[*v1.Pod]) bool { return false }, - GenericFunc: func(e event.GenericEvent) bool { + GenericFunc: func(e event.TypedGenericEvent[*v1.Pod]) bool { return false }, - }) + })) if err != nil { return err } diff --git a/pkg/controller/containerrecreaterequest/crr_controller.go b/pkg/controller/containerrecreaterequest/crr_controller.go index 87f8485850..35d487a73f 100644 --- a/pkg/controller/containerrecreaterequest/crr_controller.go +++ b/pkg/controller/containerrecreaterequest/crr_controller.go @@ -91,13 +91,14 @@ func add(mgr manager.Manager, r *ReconcileContainerRecreateRequest) error { } // Watch for changes to ContainerRecreateRequest - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ContainerRecreateRequest{}), &handler.EnqueueRequestForObject{}) + k := source.Kind(mgr.GetCache(), &appsv1alpha1.ContainerRecreateRequest{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.ContainerRecreateRequest]{}) + err = c.Watch(k) if err != nil { return err } // Watch for pod for jobs that have pod selector - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &podEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &podEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } diff --git a/pkg/controller/containerrecreaterequest/crr_event_handler.go b/pkg/controller/containerrecreaterequest/crr_event_handler.go index 89124a7379..624aa591c4 100644 --- a/pkg/controller/containerrecreaterequest/crr_event_handler.go +++ b/pkg/controller/containerrecreaterequest/crr_event_handler.go @@ -36,16 +36,16 @@ type podEventHandler struct { client.Reader } -var _ handler.EventHandler = &podEventHandler{} +var _ handler.TypedEventHandler[*v1.Pod] = &podEventHandler{} -func (e *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*v1.Pod) +func (e *podEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - obj := evt.ObjectNew.(*v1.Pod) - oldObj := evt.ObjectOld.(*v1.Pod) +func (e *podEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.ObjectNew + oldObj := evt.ObjectOld if oldObj.DeletionTimestamp == nil && obj.DeletionTimestamp != nil { e.handle(obj, q) return @@ -56,12 +56,12 @@ func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q w } } -func (e *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*v1.Pod) +func (e *podEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *podEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *podEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Pod], q workqueue.RateLimitingInterface) { } func (e *podEventHandler) handle(pod *v1.Pod, q workqueue.RateLimitingInterface) { diff --git a/pkg/controller/daemonset/daemonset_controller.go b/pkg/controller/daemonset/daemonset_controller.go index 86f2333f8d..d54e78cdcd 100644 --- a/pkg/controller/daemonset/daemonset_controller.go +++ b/pkg/controller/daemonset/daemonset_controller.go @@ -217,41 +217,41 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { logger := klog.FromContext(context.TODO()) // Watch for changes to DaemonSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.DaemonSet{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - CreateFunc: func(e event.CreateEvent) bool { - ds := e.Object.(*appsv1alpha1.DaemonSet) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.DaemonSet{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.DaemonSet]{}, predicate.TypedFuncs[*appsv1alpha1.DaemonSet]{ + CreateFunc: func(e event.TypedCreateEvent[*appsv1alpha1.DaemonSet]) bool { + ds := e.Object klog.V(4).InfoS("Adding DaemonSet", "daemonSet", klog.KObj(ds)) return true }, - UpdateFunc: func(e event.UpdateEvent) bool { - oldDS := e.ObjectOld.(*appsv1alpha1.DaemonSet) - newDS := e.ObjectNew.(*appsv1alpha1.DaemonSet) + UpdateFunc: func(e event.TypedUpdateEvent[*appsv1alpha1.DaemonSet]) bool { + oldDS := e.ObjectOld + newDS := e.ObjectNew if oldDS.UID != newDS.UID { dsc.expectations.DeleteExpectations(logger, keyFunc(oldDS)) } klog.V(4).InfoS("Updating DaemonSet", "daemonSet", klog.KObj(newDS)) return true }, - DeleteFunc: func(e event.DeleteEvent) bool { - ds := e.Object.(*appsv1alpha1.DaemonSet) + DeleteFunc: func(e event.TypedDeleteEvent[*appsv1alpha1.DaemonSet]) bool { + ds := e.Object klog.V(4).InfoS("Deleting DaemonSet", "daemonSet", klog.KObj(ds)) dsc.expectations.DeleteExpectations(logger, keyFunc(ds)) newPodForDSCache.Delete(ds.UID) return true }, - }) + })) if err != nil { return err } // Watch for changes to Node. - err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}), &nodeEventHandler{reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}, &nodeEventHandler{reader: mgr.GetCache()})) if err != nil { return err } // Watch for changes to Pod created by DaemonSet - err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &podEventHandler{Reader: mgr.GetCache(), expectations: dsc.expectations}) + err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &podEventHandler{Reader: mgr.GetCache(), expectations: dsc.expectations})) if err != nil { return err } diff --git a/pkg/controller/daemonset/daemonset_event_handler.go b/pkg/controller/daemonset/daemonset_event_handler.go index 7dd52e1482..961e2abd11 100644 --- a/pkg/controller/daemonset/daemonset_event_handler.go +++ b/pkg/controller/daemonset/daemonset_event_handler.go @@ -38,7 +38,7 @@ import ( "github.com/openkruise/kruise/pkg/util" ) -var _ handler.EventHandler = &podEventHandler{} +var _ handler.TypedEventHandler[*v1.Pod] = &podEventHandler{} type podEventHandler struct { client.Reader @@ -53,13 +53,13 @@ func enqueueDaemonSet(q workqueue.RateLimitingInterface, ds *appsv1alpha1.Daemon }}) } -func (e *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (e *podEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { logger := klog.FromContext(ctx) - pod := evt.Object.(*v1.Pod) + pod := evt.Object if pod.DeletionTimestamp != nil { // on a restart of the controller manager, it's possible a new pod shows up in a state that // is already pending deletion. Prevent the pod from being a creation observation. - e.Delete(ctx, event.DeleteEvent{Object: evt.Object}, q) + e.Delete(ctx, event.TypedDeleteEvent[*v1.Pod]{Object: evt.Object}, q) return } @@ -97,9 +97,9 @@ func joinDaemonSetNames(dsList []*appsv1alpha1.DaemonSet) string { return strings.Join(names, ",") } -func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - oldPod := evt.ObjectOld.(*v1.Pod) - curPod := evt.ObjectNew.(*v1.Pod) +func (e *podEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + oldPod := evt.ObjectOld + curPod := evt.ObjectNew if curPod.ResourceVersion == oldPod.ResourceVersion { // Periodic resync will send update events for all known pods. // Two different versions of the same pod will always have different RVs. @@ -151,12 +151,9 @@ func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q w } } -func (e *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - pod, ok := evt.Object.(*v1.Pod) - if !ok { - klog.ErrorS(nil, "Skipped pod deletion event", "deleteStateUnknown", evt.DeleteStateUnknown, "object", evt.Object) - return - } +func (e *podEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object + e.deletePod(ctx, pod, q, true) } @@ -184,7 +181,7 @@ func (e *podEventHandler) deletePod(ctx context.Context, pod *v1.Pod, q workqueu enqueueDaemonSet(q, ds) } -func (e *podEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *podEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Pod], q workqueue.RateLimitingInterface) { } @@ -230,13 +227,13 @@ func (e *podEventHandler) getPodDaemonSets(pod *v1.Pod) []*appsv1alpha1.DaemonSe return dsMatched } -var _ handler.EventHandler = &nodeEventHandler{} +var _ handler.TypedEventHandler[*v1.Node] = &nodeEventHandler{} type nodeEventHandler struct { reader client.Reader } -func (e *nodeEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (e *nodeEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Node], q workqueue.RateLimitingInterface) { dsList := &appsv1alpha1.DaemonSetList{} err := e.reader.List(context.TODO(), dsList) if err != nil { @@ -244,7 +241,7 @@ func (e *nodeEventHandler) Create(ctx context.Context, evt event.CreateEvent, q return } - node := evt.Object.(*v1.Node) + node := evt.Object for i := range dsList.Items { ds := &dsList.Items[i] if shouldSchedule, _ := nodeShouldRunDaemonPod(node, ds); shouldSchedule { @@ -256,9 +253,9 @@ func (e *nodeEventHandler) Create(ctx context.Context, evt event.CreateEvent, q } } -func (e *nodeEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - oldNode := evt.ObjectOld.(*v1.Node) - curNode := evt.ObjectNew.(*v1.Node) +func (e *nodeEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Node], q workqueue.RateLimitingInterface) { + oldNode := evt.ObjectOld + curNode := evt.ObjectNew if shouldIgnoreNodeUpdate(*oldNode, *curNode) { return } @@ -285,8 +282,8 @@ func (e *nodeEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q } } -func (e *nodeEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (e *nodeEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Node], q workqueue.RateLimitingInterface) { } -func (e *nodeEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *nodeEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Node], q workqueue.RateLimitingInterface) { } diff --git a/pkg/controller/daemonset/daemonset_event_handler_test.go b/pkg/controller/daemonset/daemonset_event_handler_test.go index e21e4ba5d6..76d4049bbb 100644 --- a/pkg/controller/daemonset/daemonset_event_handler_test.go +++ b/pkg/controller/daemonset/daemonset_event_handler_test.go @@ -45,20 +45,20 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { cases := []struct { name string dss []*appsv1alpha1.DaemonSet - e event.CreateEvent + e event.TypedCreateEvent[*v1.Pod] alterExpectationCreationsKey string alterExpectationCreationsAdds []string expectedQueueLen int }{ { name: "no ds", - e: event.CreateEvent{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{DeletionTimestamp: &metav1.Time{Time: time.Now()}}}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{DeletionTimestamp: &metav1.Time{Time: time.Now()}}}}, expectedQueueLen: 0, }, { name: "no ds", - e: event.CreateEvent{Object: &v1.Pod{}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{}}, expectedQueueLen: 0, }, @@ -98,7 +98,7 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "pod-abc", Labels: map[string]string{"key": "v1"}}}}, + e: event.TypedCreateEvent[*v1.Pod]{Object: &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "pod-abc", Labels: map[string]string{"key": "v1"}}}}, expectedQueueLen: 2, }, { @@ -139,7 +139,7 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{ + e: event.TypedCreateEvent[*v1.Pod]{ Object: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -201,12 +201,12 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { cases := []struct { name string dss []*appsv1alpha1.DaemonSet - e event.UpdateEvent + e event.TypedUpdateEvent[*v1.Pod] expectedQueueLen int }{ { name: "resourceVersion no changed", - e: event.UpdateEvent{ObjectNew: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}, ObjectOld: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}}, + e: event.TypedUpdateEvent[*v1.Pod]{ObjectNew: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}, ObjectOld: &v1.Pod{ObjectMeta: metav1.ObjectMeta{ResourceVersion: "01"}}}, expectedQueueLen: 0, }, { @@ -247,7 +247,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -322,7 +322,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -397,7 +397,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -471,7 +471,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -545,7 +545,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -618,7 +618,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Pod]{ ObjectOld: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Namespace: "default", @@ -674,7 +674,7 @@ func TestEnqueueRequestForNodeCreate(t *testing.T) { cases := []struct { name string dss []*appsv1alpha1.DaemonSet - e event.CreateEvent + e event.TypedCreateEvent[*v1.Node] expectedQueueLen int }{ { @@ -713,7 +713,7 @@ func TestEnqueueRequestForNodeCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{ + e: event.TypedCreateEvent[*v1.Node]{ Object: &v1.Node{ Spec: v1.NodeSpec{ Taints: []v1.Taint{ @@ -764,7 +764,7 @@ func TestEnqueueRequestForNodeCreate(t *testing.T) { }, }, }, - e: event.CreateEvent{ + e: event.TypedCreateEvent[*v1.Node]{ Object: &v1.Node{}, }, expectedQueueLen: 2, @@ -789,12 +789,12 @@ func TestEnqueueRequestForNodeUpdate(t *testing.T) { cases := []struct { name string dss []*appsv1alpha1.DaemonSet - e event.UpdateEvent + e event.TypedUpdateEvent[*v1.Node] expectedQueueLen int }{ { name: "shouldIgnoreNodeUpdate", - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Node]{ ObjectOld: &v1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "name0", @@ -828,7 +828,7 @@ func TestEnqueueRequestForNodeUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Node]{ ObjectOld: &v1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "name0", @@ -871,7 +871,7 @@ func TestEnqueueRequestForNodeUpdate(t *testing.T) { }, }, }, - e: event.UpdateEvent{ + e: event.TypedUpdateEvent[*v1.Node]{ ObjectOld: &v1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "name0", diff --git a/pkg/controller/ephemeraljob/ephemeraljob_controller.go b/pkg/controller/ephemeraljob/ephemeraljob_controller.go index fab0aba88e..caf365a983 100644 --- a/pkg/controller/ephemeraljob/ephemeraljob_controller.go +++ b/pkg/controller/ephemeraljob/ephemeraljob_controller.go @@ -83,12 +83,12 @@ func add(mgr manager.Manager, r *ReconcileEphemeralJob) error { } // Watch for changes to EphemeralJob - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.EphemeralJob{}), &ejobHandler{mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.EphemeralJob{}, &ejobHandler{mgr.GetCache()})) if err != nil { return err } // Watch for changes to Pod - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &podHandler{mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &podHandler{mgr.GetCache()})) if err != nil { return err } diff --git a/pkg/controller/ephemeraljob/ephemeraljob_event_handler.go b/pkg/controller/ephemeraljob/ephemeraljob_event_handler.go index 91592512d1..f7805aef0a 100644 --- a/pkg/controller/ephemeraljob/ephemeraljob_event_handler.go +++ b/pkg/controller/ephemeraljob/ephemeraljob_event_handler.go @@ -20,21 +20,18 @@ type podHandler struct { client.Reader } -func (e *podHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - pod, ok := evt.Object.(*corev1.Pod) - if !ok { - return - } +func (e *podHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object e.handle(pod, q) } -func (e *podHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *podHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (e *podHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - oldPod := evt.ObjectOld.(*corev1.Pod) - curPod := evt.ObjectNew.(*corev1.Pod) +func (e *podHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + oldPod := evt.ObjectOld + curPod := evt.ObjectNew if curPod.ResourceVersion == oldPod.ResourceVersion { return } @@ -46,11 +43,8 @@ func (e *podHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqu e.handle(curPod, q) } -func (e *podHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - pod, ok := evt.Object.(*corev1.Pod) - if !ok { - return - } +func (e *podHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + pod := evt.Object e.handle(pod, q) } @@ -76,11 +70,8 @@ type ejobHandler struct { client.Reader } -func (e *ejobHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - ejob, ok := evt.Object.(*appsv1alpha1.EphemeralJob) - if !ok { - return - } +func (e *ejobHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*appsv1alpha1.EphemeralJob], q workqueue.RateLimitingInterface) { + ejob := evt.Object if ejob.DeletionTimestamp != nil { return } @@ -88,12 +79,12 @@ func (e *ejobHandler) Create(ctx context.Context, evt event.CreateEvent, q workq q.Add(reconcile.Request{NamespacedName: types.NamespacedName{Namespace: ejob.Namespace, Name: ejob.Name}}) } -func (e *ejobHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *ejobHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsv1alpha1.EphemeralJob], q workqueue.RateLimitingInterface) { } -func (e *ejobHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - oldEJob := evt.ObjectOld.(*appsv1alpha1.EphemeralJob) - curEJob := evt.ObjectNew.(*appsv1alpha1.EphemeralJob) +func (e *ejobHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsv1alpha1.EphemeralJob], q workqueue.RateLimitingInterface) { + oldEJob := evt.ObjectOld + curEJob := evt.ObjectNew if oldEJob.ResourceVersion == curEJob.ResourceVersion { return } @@ -113,11 +104,8 @@ func (e *ejobHandler) Update(ctx context.Context, evt event.UpdateEvent, q workq } } -func (e *ejobHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - ejob, ok := evt.Object.(*appsv1alpha1.EphemeralJob) - if !ok { - return - } +func (e *ejobHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsv1alpha1.EphemeralJob], q workqueue.RateLimitingInterface) { + ejob := evt.Object key := types.NamespacedName{Namespace: ejob.Namespace, Name: ejob.Name} scaleExpectations.DeleteExpectations(key.String()) } diff --git a/pkg/controller/imagelistpulljob/imagelistpulljob_controller.go b/pkg/controller/imagelistpulljob/imagelistpulljob_controller.go index ccba514387..2b5dbd57c2 100644 --- a/pkg/controller/imagelistpulljob/imagelistpulljob_controller.go +++ b/pkg/controller/imagelistpulljob/imagelistpulljob_controller.go @@ -94,16 +94,17 @@ func add(mgr manager.Manager, r *ReconcileImageListPullJob) error { } // Watch for changes to ImageListPullJob - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImageListPullJob{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImageListPullJob{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.ImageListPullJob]{})) if err != nil { return err } // Watch for changes to ImagePullJob // todo the imagelistpulljob(status) will not change if the pull job status does not change significantly (ex. number of failed nodeimage changes from 1 to 2) - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}), &imagePullJobEventHandler{ - enqueueHandler: handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.ImageListPullJob{}, handler.OnlyControllerOwner()), - }) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}, + &imagePullJobEventHandler{ + enqueueHandler: handler.TypedEnqueueRequestForOwner[*appsv1alpha1.ImagePullJob](mgr.GetScheme(), mgr.GetRESTMapper(), + &appsv1alpha1.ImageListPullJob{}, handler.OnlyControllerOwner()), + })) if err != nil { return err } diff --git a/pkg/controller/imagelistpulljob/imagelistpulljob_event_handler.go b/pkg/controller/imagelistpulljob/imagelistpulljob_event_handler.go index 40162e1aad..770e4f77e0 100644 --- a/pkg/controller/imagelistpulljob/imagelistpulljob_event_handler.go +++ b/pkg/controller/imagelistpulljob/imagelistpulljob_event_handler.go @@ -31,8 +31,10 @@ import ( "github.com/openkruise/kruise/pkg/util/expectations" ) +var _ handler.TypedEventHandler[*appsv1alpha1.ImagePullJob] = &imagePullJobEventHandler{} + type imagePullJobEventHandler struct { - enqueueHandler handler.EventHandler + enqueueHandler handler.TypedEventHandler[*appsv1alpha1.ImagePullJob] } func isImageListPullJobController(controllerRef *metav1.OwnerReference) bool { @@ -44,10 +46,10 @@ func isImageListPullJobController(controllerRef *metav1.OwnerReference) bool { return controllerRef.Kind == controllerKind.Kind && refGV.Group == controllerKind.Group } -func (p *imagePullJobEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - job := evt.Object.(*appsv1alpha1.ImagePullJob) +func (p *imagePullJobEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { + job := evt.Object if job.DeletionTimestamp != nil { - p.Delete(ctx, event.DeleteEvent{Object: evt.Object}, q) + p.Delete(ctx, event.TypedDeleteEvent[*appsv1alpha1.ImagePullJob]{Object: evt.Object}, q) return } if controllerRef := metav1.GetControllerOf(job); controllerRef != nil && isImageListPullJobController(controllerRef) { @@ -57,8 +59,8 @@ func (p *imagePullJobEventHandler) Create(ctx context.Context, evt event.CreateE } } -func (p *imagePullJobEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - job := evt.Object.(*appsv1alpha1.ImagePullJob) +func (p *imagePullJobEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { + job := evt.Object if controllerRef := metav1.GetControllerOf(job); controllerRef != nil && isImageListPullJobController(controllerRef) { key := types.NamespacedName{Namespace: job.Namespace, Name: controllerRef.Name}.String() scaleExpectations.ObserveScale(key, expectations.Delete, job.Spec.Image) @@ -66,11 +68,11 @@ func (p *imagePullJobEventHandler) Delete(ctx context.Context, evt event.DeleteE p.enqueueHandler.Delete(ctx, evt, q) } -func (p *imagePullJobEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - newJob := evt.ObjectNew.(*appsv1alpha1.ImagePullJob) +func (p *imagePullJobEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { + newJob := evt.ObjectNew resourceVersionExpectations.Expect(newJob) p.enqueueHandler.Update(ctx, evt, q) } -func (p *imagePullJobEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *imagePullJobEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { } diff --git a/pkg/controller/imagepulljob/imagepulljob_controller.go b/pkg/controller/imagepulljob/imagepulljob_controller.go index 78bd79c09a..a208222d0f 100644 --- a/pkg/controller/imagepulljob/imagepulljob_controller.go +++ b/pkg/controller/imagepulljob/imagepulljob_controller.go @@ -107,25 +107,25 @@ func add(mgr manager.Manager, r *ReconcileImagePullJob) error { } // Watch for changes to ImagePullJob - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.ImagePullJob]{})) if err != nil { return err } // Watch for nodeimage update to get image pull status - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodeImage{}), &nodeImageEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodeImage{}, &nodeImageEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for pod for jobs that have pod selector - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &podEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &podEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for secret for jobs that have pullSecrets - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Secret{}), &secretEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Secret{}, &secretEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } diff --git a/pkg/controller/imagepulljob/imagepulljob_event_handler.go b/pkg/controller/imagepulljob/imagepulljob_event_handler.go index c9762f8716..37304c1597 100644 --- a/pkg/controller/imagepulljob/imagepulljob_event_handler.go +++ b/pkg/controller/imagepulljob/imagepulljob_event_handler.go @@ -42,16 +42,16 @@ type nodeImageEventHandler struct { client.Reader } -var _ handler.EventHandler = &nodeImageEventHandler{} +var _ handler.TypedEventHandler[*appsv1alpha1.NodeImage] = &nodeImageEventHandler{} -func (e *nodeImageEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*appsv1alpha1.NodeImage) +func (e *nodeImageEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*appsv1alpha1.NodeImage], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *nodeImageEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - obj := evt.ObjectNew.(*appsv1alpha1.NodeImage) - oldObj := evt.ObjectOld.(*appsv1alpha1.NodeImage) +func (e *nodeImageEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsv1alpha1.NodeImage], q workqueue.RateLimitingInterface) { + obj := evt.ObjectNew + oldObj := evt.ObjectOld if obj.DeletionTimestamp != nil { e.handle(obj, q) } else { @@ -59,13 +59,13 @@ func (e *nodeImageEventHandler) Update(ctx context.Context, evt event.UpdateEven } } -func (e *nodeImageEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*appsv1alpha1.NodeImage) +func (e *nodeImageEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsv1alpha1.NodeImage], q workqueue.RateLimitingInterface) { + obj := evt.Object resourceVersionExpectations.Delete(obj) e.handle(obj, q) } -func (e *nodeImageEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *nodeImageEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsv1alpha1.NodeImage], q workqueue.RateLimitingInterface) { } func (e *nodeImageEventHandler) handle(nodeImage *appsv1alpha1.NodeImage, q workqueue.RateLimitingInterface) { @@ -129,16 +129,16 @@ type podEventHandler struct { client.Reader } -var _ handler.EventHandler = &podEventHandler{} +var _ handler.TypedEventHandler[*v1.Pod] = &podEventHandler{} -func (e *podEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*v1.Pod) +func (e *podEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - obj := evt.ObjectNew.(*v1.Pod) - oldObj := evt.ObjectOld.(*v1.Pod) +func (e *podEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.ObjectNew + oldObj := evt.ObjectOld if obj.DeletionTimestamp != nil { e.handle(obj, q) } else { @@ -146,12 +146,12 @@ func (e *podEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q w } } -func (e *podEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*v1.Pod) +func (e *podEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *podEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *podEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Pod], q workqueue.RateLimitingInterface) { } func (e *podEventHandler) handle(pod *v1.Pod, q workqueue.RateLimitingInterface) { @@ -196,23 +196,23 @@ type secretEventHandler struct { client.Reader } -var _ handler.EventHandler = &secretEventHandler{} +var _ handler.TypedEventHandler[*v1.Secret] = &secretEventHandler{} -func (e *secretEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - obj := evt.Object.(*v1.Secret) +func (e *secretEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Secret], q workqueue.RateLimitingInterface) { + obj := evt.Object e.handle(obj, q) } -func (e *secretEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - newObj := evt.ObjectNew.(*v1.Secret) - oldObj := evt.ObjectOld.(*v1.Secret) +func (e *secretEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Secret], q workqueue.RateLimitingInterface) { + newObj := evt.ObjectNew + oldObj := evt.ObjectOld e.handleUpdate(newObj, oldObj, q) } -func (e *secretEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (e *secretEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Secret], q workqueue.RateLimitingInterface) { } -func (e *secretEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *secretEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Secret], q workqueue.RateLimitingInterface) { } func (e *secretEventHandler) handle(secret *v1.Secret, q workqueue.RateLimitingInterface) { diff --git a/pkg/controller/nodeimage/nodeimage_controller.go b/pkg/controller/nodeimage/nodeimage_controller.go index 21c72d9bae..d78f47515c 100644 --- a/pkg/controller/nodeimage/nodeimage_controller.go +++ b/pkg/controller/nodeimage/nodeimage_controller.go @@ -111,19 +111,19 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to NodeImage - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodeImage{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodeImage{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.NodeImage]{})) if err != nil { return err } // Watch for changes to Node - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Node{}), &nodeHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Node{}, &nodeHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for deletion to ImagePullJob - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}), &imagePullJobHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ImagePullJob{}, &imagePullJobHandler{Reader: mgr.GetCache()})) if err != nil { return err } diff --git a/pkg/controller/nodeimage/nodeimage_event_handler.go b/pkg/controller/nodeimage/nodeimage_event_handler.go index a7d52d4668..49eb5bc1f9 100644 --- a/pkg/controller/nodeimage/nodeimage_event_handler.go +++ b/pkg/controller/nodeimage/nodeimage_event_handler.go @@ -42,10 +42,10 @@ type nodeHandler struct { client.Reader } -var _ handler.EventHandler = &nodeHandler{} +var _ handler.TypedEventHandler[*v1.Node] = &nodeHandler{} -func (e *nodeHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - node := evt.Object.(*v1.Node) +func (e *nodeHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.Node], q workqueue.RateLimitingInterface) { + node := evt.Object if node.Labels["type"] == VirtualKubelet { return } @@ -56,11 +56,11 @@ func (e *nodeHandler) Create(ctx context.Context, evt event.CreateEvent, q workq e.nodeCreateOrUpdate(node, q) } -func (e *nodeHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *nodeHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.Node], q workqueue.RateLimitingInterface) { } -func (e *nodeHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - node := evt.ObjectNew.(*v1.Node) +func (e *nodeHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.Node], q workqueue.RateLimitingInterface) { + node := evt.ObjectNew if node.Labels["type"] == VirtualKubelet { return } @@ -71,8 +71,8 @@ func (e *nodeHandler) Update(ctx context.Context, evt event.UpdateEvent, q workq } } -func (e *nodeHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - node := evt.Object.(*v1.Node) +func (e *nodeHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.Node], q workqueue.RateLimitingInterface) { + node := evt.Object if node.Labels["type"] == VirtualKubelet { return } @@ -117,21 +117,23 @@ func (e *nodeHandler) nodeDelete(node *v1.Node, q workqueue.RateLimitingInterfac q.Add(reconcile.Request{NamespacedName: namespacedName}) } +var _ handler.TypedEventHandler[*appsv1alpha1.ImagePullJob] = &imagePullJobHandler{} + type imagePullJobHandler struct { client.Reader } -func (e *imagePullJobHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (e *imagePullJobHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { } -func (e *imagePullJobHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *imagePullJobHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { } -func (e *imagePullJobHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (e *imagePullJobHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { } -func (e *imagePullJobHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - job := evt.Object.(*appsv1alpha1.ImagePullJob) +func (e *imagePullJobHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsv1alpha1.ImagePullJob], q workqueue.RateLimitingInterface) { + job := evt.Object nodeImageNames := utilimagejob.PopCachedNodeImagesForJob(job) for _, name := range nodeImageNames { q.Add(reconcile.Request{NamespacedName: types.NamespacedName{Name: name}}) diff --git a/pkg/controller/nodepodprobe/node_pod_probe_controller.go b/pkg/controller/nodepodprobe/node_pod_probe_controller.go index df197fdfa3..c417effa97 100644 --- a/pkg/controller/nodepodprobe/node_pod_probe_controller.go +++ b/pkg/controller/nodepodprobe/node_pod_probe_controller.go @@ -93,17 +93,17 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // watch for changes to NodePodProbe - if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodePodProbe{}), &enqueueRequestForNodePodProbe{}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.NodePodProbe{}, &enqueueRequestForNodePodProbe{})); err != nil { return err } // watch for changes to pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &enqueueRequestForPod{reader: mgr.GetClient()})); err != nil { return err } // watch for changes to node - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}), &enqueueRequestForNode{Reader: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Node{}, &enqueueRequestForNode{Reader: mgr.GetClient()})); err != nil { return err } diff --git a/pkg/controller/nodepodprobe/nodepodprobe_event_handler.go b/pkg/controller/nodepodprobe/nodepodprobe_event_handler.go index 1cc2efb827..893d27c23a 100644 --- a/pkg/controller/nodepodprobe/nodepodprobe_event_handler.go +++ b/pkg/controller/nodepodprobe/nodepodprobe_event_handler.go @@ -35,34 +35,25 @@ import ( appsalphav1 "github.com/openkruise/kruise/apis/apps/v1alpha1" ) -var _ handler.EventHandler = &enqueueRequestForNodePodProbe{} +var _ handler.TypedEventHandler[*appsalphav1.NodePodProbe] = &enqueueRequestForNodePodProbe{} type enqueueRequestForNodePodProbe struct{} -func (p *enqueueRequestForNodePodProbe) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - obj, ok := evt.Object.(*appsalphav1.NodePodProbe) - if !ok { - return - } +func (p *enqueueRequestForNodePodProbe) Create(ctx context.Context, evt event.TypedCreateEvent[*appsalphav1.NodePodProbe], q workqueue.RateLimitingInterface) { + obj := evt.Object p.queue(q, obj) } -func (p *enqueueRequestForNodePodProbe) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNodePodProbe) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsalphav1.NodePodProbe], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForNodePodProbe) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNodePodProbe) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsalphav1.NodePodProbe], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForNodePodProbe) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNodePodProbe) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsalphav1.NodePodProbe], q workqueue.RateLimitingInterface) { // must be deep copy before update the objection - new, ok := evt.ObjectNew.(*appsalphav1.NodePodProbe) - if !ok { - return - } - old, ok := evt.ObjectOld.(*appsalphav1.NodePodProbe) - if !ok { - return - } + new := evt.ObjectNew + old := evt.ObjectOld if !reflect.DeepEqual(new.Status, old.Status) { p.queue(q, new) } @@ -76,20 +67,17 @@ func (p *enqueueRequestForNodePodProbe) queue(q workqueue.RateLimitingInterface, }) } -var _ handler.EventHandler = &enqueueRequestForPod{} +var _ handler.TypedEventHandler[*corev1.Pod] = &enqueueRequestForPod{} type enqueueRequestForPod struct { reader client.Reader } -func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - obj, ok := evt.Object.(*corev1.Pod) - if !ok { - return - } +func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + obj := evt.Object // remove pod probe from nodePodProbe.spec if obj.Spec.NodeName == "" { return @@ -109,18 +97,12 @@ func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.DeleteEvent } } -func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - new, ok := evt.ObjectNew.(*corev1.Pod) - if !ok { - return - } - old, ok := evt.ObjectOld.(*corev1.Pod) - if !ok { - return - } +func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + new := evt.ObjectNew + old := evt.ObjectOld // remove pod probe from nodePodProbe.spec if new.Spec.NodeName != "" && kubecontroller.IsPodActive(old) && !kubecontroller.IsPodActive(new) { npp := &appsalphav1.NodePodProbe{} @@ -147,10 +129,10 @@ type enqueueRequestForNode struct { client.Reader } -var _ handler.EventHandler = &enqueueRequestForNode{} +var _ handler.TypedEventHandler[*corev1.Node] = &enqueueRequestForNode{} -func (e *enqueueRequestForNode) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { - node := evt.Object.(*corev1.Node) +func (e *enqueueRequestForNode) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Node], q workqueue.RateLimitingInterface) { + node := evt.Object if node.Labels["type"] == VirtualKubelet { return } @@ -161,11 +143,11 @@ func (e *enqueueRequestForNode) Create(ctx context.Context, evt event.CreateEven e.nodeCreate(node, q) } -func (e *enqueueRequestForNode) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *enqueueRequestForNode) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Node], q workqueue.RateLimitingInterface) { } -func (e *enqueueRequestForNode) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - node := evt.ObjectNew.(*corev1.Node) +func (e *enqueueRequestForNode) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Node], q workqueue.RateLimitingInterface) { + node := evt.ObjectNew if node.Labels["type"] == VirtualKubelet { return } @@ -176,8 +158,8 @@ func (e *enqueueRequestForNode) Update(ctx context.Context, evt event.UpdateEven } } -func (e *enqueueRequestForNode) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { - node := evt.Object.(*corev1.Node) +func (e *enqueueRequestForNode) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Node], q workqueue.RateLimitingInterface) { + node := evt.Object if node.Labels["type"] == VirtualKubelet { return } diff --git a/pkg/controller/nodepodprobe/nodepodprobe_event_handler_test.go b/pkg/controller/nodepodprobe/nodepodprobe_event_handler_test.go index 4206c589fe..71b089d2c1 100644 --- a/pkg/controller/nodepodprobe/nodepodprobe_event_handler_test.go +++ b/pkg/controller/nodepodprobe/nodepodprobe_event_handler_test.go @@ -49,7 +49,7 @@ func TestNodeEventHandler(t *testing.T) { _ = fakeClient.Create(context.TODO(), demo) // create createQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - createEvt := event.CreateEvent{ + createEvt := event.TypedCreateEvent[*corev1.Node]{ Object: demo, } handler.Create(context.TODO(), createEvt, createQ) diff --git a/pkg/controller/persistentpodstate/persistent_pod_state_controller.go b/pkg/controller/persistentpodstate/persistent_pod_state_controller.go index 46d1c6659f..17c092ee0d 100644 --- a/pkg/controller/persistentpodstate/persistent_pod_state_controller.go +++ b/pkg/controller/persistentpodstate/persistent_pod_state_controller.go @@ -105,22 +105,22 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to Pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetClient(), client: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetClient(), client: mgr.GetClient()})); err != nil { return err } // watch for changes to PersistentPodState - if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.PersistentPodState{}), &handler.EnqueueRequestForObject{}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.PersistentPodState{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.PersistentPodState]{})); err != nil { return err } // watch for changes to StatefulSet - if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.StatefulSet{}), &enqueueRequestForStatefulSet{reader: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1.StatefulSet{}), &enqueueRequestForStatefulSet{reader: mgr.GetClient()})); err != nil { return err } // watch for changes to kruise StatefulSet - if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1beta1.StatefulSet{}), &enqueueRequestForKruiseStatefulSet{reader: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1beta1.StatefulSet{}), &enqueueRequestForKruiseStatefulSet{reader: mgr.GetClient()})); err != nil { return err } diff --git a/pkg/controller/podprobemarker/pod_probe_marker_controller.go b/pkg/controller/podprobemarker/pod_probe_marker_controller.go index 89295b8779..f1af3521f4 100644 --- a/pkg/controller/podprobemarker/pod_probe_marker_controller.go +++ b/pkg/controller/podprobemarker/pod_probe_marker_controller.go @@ -97,11 +97,11 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // watch for changes to PodProbeMarker - if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.PodProbeMarker{}), &enqueueRequestForPodProbeMarker{}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.PodProbeMarker{}, &enqueueRequestForPodProbeMarker{})); err != nil { return err } // watch for changes to pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetClient()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &enqueueRequestForPod{reader: mgr.GetClient()})); err != nil { return err } diff --git a/pkg/controller/podprobemarker/podprobemarker_event_handler.go b/pkg/controller/podprobemarker/podprobemarker_event_handler.go index 711e09418d..9d7ed4048d 100644 --- a/pkg/controller/podprobemarker/podprobemarker_event_handler.go +++ b/pkg/controller/podprobemarker/podprobemarker_event_handler.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/util/workqueue" "k8s.io/klog/v2" kubecontroller "k8s.io/kubernetes/pkg/controller" @@ -36,21 +37,21 @@ import ( utilclient "github.com/openkruise/kruise/pkg/util/client" ) -var _ handler.EventHandler = &enqueueRequestForPodProbeMarker{} +var _ handler.TypedEventHandler[*appsalphav1.PodProbeMarker] = &enqueueRequestForPodProbeMarker{} type enqueueRequestForPodProbeMarker struct{} -func (p *enqueueRequestForPodProbeMarker) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPodProbeMarker) Create(ctx context.Context, evt event.TypedCreateEvent[*appsalphav1.PodProbeMarker], q workqueue.RateLimitingInterface) { p.queue(q, evt.Object) } -func (p *enqueueRequestForPodProbeMarker) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPodProbeMarker) Delete(ctx context.Context, evt event.TypedDeleteEvent[*appsalphav1.PodProbeMarker], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPodProbeMarker) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPodProbeMarker) Generic(ctx context.Context, evt event.TypedGenericEvent[*appsalphav1.PodProbeMarker], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPodProbeMarker) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPodProbeMarker) Update(ctx context.Context, evt event.TypedUpdateEvent[*appsalphav1.PodProbeMarker], q workqueue.RateLimitingInterface) { p.queue(q, evt.ObjectNew) } @@ -67,30 +68,24 @@ func (p *enqueueRequestForPodProbeMarker) queue(q workqueue.RateLimitingInterfac }) } -var _ handler.EventHandler = &enqueueRequestForPod{} +var _ handler.TypedEventHandler[*corev1.Pod] = &enqueueRequestForPod{} type enqueueRequestForPod struct { reader client.Reader } -func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - new, ok := evt.ObjectNew.(*corev1.Pod) - if !ok { - return - } - old, ok := evt.ObjectOld.(*corev1.Pod) - if !ok { - return - } +func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { + new := evt.ObjectNew + old := evt.ObjectOld // add pod probe to nodePodProbe.spec oldInitialCondition := util.GetCondition(old, corev1.PodInitialized) newInitialCondition := util.GetCondition(new, corev1.PodInitialized) diff --git a/pkg/controller/podprobemarker/podprobemarker_event_handler_test.go b/pkg/controller/podprobemarker/podprobemarker_event_handler_test.go index 20118b92fd..f47077b3c8 100644 --- a/pkg/controller/podprobemarker/podprobemarker_event_handler_test.go +++ b/pkg/controller/podprobemarker/podprobemarker_event_handler_test.go @@ -69,7 +69,7 @@ func TestPodUpdateEventHandler(t *testing.T) { newPod.ResourceVersion = fmt.Sprintf("%d", time.Now().Unix()) updateQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - updateEvent := event.UpdateEvent{ + updateEvent := event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: podDemo, ObjectNew: newPod, } @@ -94,7 +94,7 @@ func TestPodUpdateEventHandler(t *testing.T) { } // parse pod error - updateEvent = event.UpdateEvent{ + updateEvent = event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: nil, ObjectNew: nil, } @@ -104,7 +104,7 @@ func TestPodUpdateEventHandler(t *testing.T) { } // parse old pod error - updateEvent = event.UpdateEvent{ + updateEvent = event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: nil, ObjectNew: newPod, } @@ -452,7 +452,7 @@ func TestPodUpdateEventHandler_v2(t *testing.T) { }) updateQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - updateEvent := event.UpdateEvent{ + updateEvent := event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: podDemo, ObjectNew: newPod, } diff --git a/pkg/controller/podreadiness/pod_readiness_controller.go b/pkg/controller/podreadiness/pod_readiness_controller.go index 19262b3286..fa4e5d56ed 100644 --- a/pkg/controller/podreadiness/pod_readiness_controller.go +++ b/pkg/controller/podreadiness/pod_readiness_controller.go @@ -66,22 +66,22 @@ func add(mgr manager.Manager, r *ReconcilePodReadiness) error { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - CreateFunc: func(e event.CreateEvent) bool { - pod := e.Object.(*v1.Pod) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, &handler.TypedEnqueueRequestForObject[*v1.Pod]{}, predicate.TypedFuncs[*v1.Pod]{ + CreateFunc: func(e event.TypedCreateEvent[*v1.Pod]) bool { + pod := e.Object return utilpodreadiness.ContainsReadinessGate(pod) && utilpodreadiness.GetReadinessCondition(pod) == nil }, - UpdateFunc: func(e event.UpdateEvent) bool { - pod := e.ObjectNew.(*v1.Pod) + UpdateFunc: func(e event.TypedUpdateEvent[*v1.Pod]) bool { + pod := e.ObjectNew return utilpodreadiness.ContainsReadinessGate(pod) && utilpodreadiness.GetReadinessCondition(pod) == nil }, - DeleteFunc: func(e event.DeleteEvent) bool { + DeleteFunc: func(e event.TypedDeleteEvent[*v1.Pod]) bool { return false }, - GenericFunc: func(e event.GenericEvent) bool { + GenericFunc: func(e event.TypedGenericEvent[*v1.Pod]) bool { return false }, - }) + })) if err != nil { return err } diff --git a/pkg/controller/podunavailablebudget/podunavailablebudget_controller.go b/pkg/controller/podunavailablebudget/podunavailablebudget_controller.go index f0599af9ac..68854d7488 100644 --- a/pkg/controller/podunavailablebudget/podunavailablebudget_controller.go +++ b/pkg/controller/podunavailablebudget/podunavailablebudget_controller.go @@ -119,13 +119,13 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to PodUnavailableBudget - err = c.Watch(source.Kind(mgr.GetCache(), &policyv1alpha1.PodUnavailableBudget{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &policyv1alpha1.PodUnavailableBudget{}, &handler.TypedEnqueueRequestForObject[*policyv1alpha1.PodUnavailableBudget]{})) if err != nil { return err } // Watch for changes to Pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), newEnqueueRequestForPod(mgr.GetClient())); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, newEnqueueRequestForPod(mgr.GetClient()))); err != nil { return err } @@ -136,7 +136,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // 2. at this time the cloneSet.replicas is scaled down to 50, the pub controller listens to the replicas change, triggering reconcile will adjust UnavailableAllowed to 55. // 3. so pub webhook will not intercept the request to delete the pods // deployment - if err = c.Watch(source.Kind(mgr.GetCache(), &apps.Deployment{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&apps.Deployment{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { old := e.ObjectOld.(*apps.Deployment) new := e.ObjectNew.(*apps.Deployment) @@ -145,12 +145,12 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { DeleteFunc: func(deleteEvent event.DeleteEvent) bool { return true }, - }); err != nil { + })); err != nil { return err } // kruise AdvancedStatefulSet - if err = c.Watch(source.Kind(mgr.GetCache(), &kruiseappsv1beta1.StatefulSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&kruiseappsv1beta1.StatefulSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { old := e.ObjectOld.(*kruiseappsv1beta1.StatefulSet) new := e.ObjectNew.(*kruiseappsv1beta1.StatefulSet) @@ -159,12 +159,12 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { DeleteFunc: func(deleteEvent event.DeleteEvent) bool { return true }, - }); err != nil { + })); err != nil { return err } // CloneSet - if err = c.Watch(source.Kind(mgr.GetCache(), &kruiseappsv1alpha1.CloneSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&kruiseappsv1alpha1.CloneSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { old := e.ObjectOld.(*kruiseappsv1alpha1.CloneSet) new := e.ObjectNew.(*kruiseappsv1alpha1.CloneSet) @@ -173,12 +173,12 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { DeleteFunc: func(deleteEvent event.DeleteEvent) bool { return true }, - }); err != nil { + })); err != nil { return err } // StatefulSet - if err = c.Watch(source.Kind(mgr.GetCache(), &apps.StatefulSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&apps.StatefulSet{}), &SetEnqueueRequestForPUB{mgr}, predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { old := e.ObjectOld.(*apps.StatefulSet) new := e.ObjectNew.(*apps.StatefulSet) @@ -187,7 +187,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { DeleteFunc: func(deleteEvent event.DeleteEvent) bool { return true }, - }); err != nil { + })); err != nil { return err } diff --git a/pkg/controller/podunavailablebudget/pub_pod_event_handler.go b/pkg/controller/podunavailablebudget/pub_pod_event_handler.go index 8ba9f470c3..07d29b9ff2 100644 --- a/pkg/controller/podunavailablebudget/pub_pod_event_handler.go +++ b/pkg/controller/podunavailablebudget/pub_pod_event_handler.go @@ -44,9 +44,9 @@ import ( "github.com/openkruise/kruise/pkg/util/controllerfinder" ) -var _ handler.EventHandler = &enqueueRequestForPod{} +var _ handler.TypedEventHandler[*corev1.Pod] = &enqueueRequestForPod{} -func newEnqueueRequestForPod(c client.Client) handler.EventHandler { +func newEnqueueRequestForPod(c client.Client) handler.TypedEventHandler[*corev1.Pod] { e := &enqueueRequestForPod{client: c} e.controllerFinder = controllerfinder.Finder return e @@ -57,17 +57,17 @@ type enqueueRequestForPod struct { controllerFinder *controllerfinder.ControllerFinder } -func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { p.addPod(q, evt.Object) } -func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { p.updatePod(q, evt.ObjectOld, evt.ObjectNew) } diff --git a/pkg/controller/podunavailablebudget/pub_pod_event_handler_test.go b/pkg/controller/podunavailablebudget/pub_pod_event_handler_test.go index 2429e0e254..4b0247e915 100644 --- a/pkg/controller/podunavailablebudget/pub_pod_event_handler_test.go +++ b/pkg/controller/podunavailablebudget/pub_pod_event_handler_test.go @@ -42,7 +42,7 @@ func TestPodEventHandler(t *testing.T) { // create createQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - createEvt := event.CreateEvent{ + createEvt := event.TypedCreateEvent[*corev1.Pod]{ Object: podDemo.DeepCopy(), } createEvt.Object.SetAnnotations(map[string]string{pubcontrol.PodRelatedPubAnnotation: pubDemo.Name}) @@ -57,7 +57,7 @@ func TestPodEventHandler(t *testing.T) { readyCondition := podutil.GetPodReadyCondition(newPod.Status) readyCondition.Status = corev1.ConditionFalse updateQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - updateEvent := event.UpdateEvent{ + updateEvent := event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: podDemo, ObjectNew: newPod, } @@ -73,7 +73,7 @@ func TestPodEventHandler(t *testing.T) { newPod.ResourceVersion = fmt.Sprintf("%d", time.Now().Unix()) newPod.Spec.Containers[0].Image = "nginx:latest" updateQ = workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - updateEvent = event.UpdateEvent{ + updateEvent = event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: podDemo, ObjectNew: newPod, } diff --git a/pkg/controller/resourcedistribution/resourcedistribution_controller.go b/pkg/controller/resourcedistribution/resourcedistribution_controller.go index 29f22ebe60..4768a2a063 100644 --- a/pkg/controller/resourcedistribution/resourcedistribution_controller.go +++ b/pkg/controller/resourcedistribution/resourcedistribution_controller.go @@ -88,23 +88,25 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to ResourceDistribution - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ResourceDistribution{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldObj := e.ObjectOld.(*appsv1alpha1.ResourceDistribution) - newObj := e.ObjectNew.(*appsv1alpha1.ResourceDistribution) - if !reflect.DeepEqual(oldObj.Spec, newObj.Spec) { - klog.V(3).InfoS("Observed updated Spec for ResourceDistribution", "resourceDistribution", klog.KObj(oldObj)) - return true - } - return false - }, - }) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.ResourceDistribution{}, + &handler.TypedEnqueueRequestForObject[*appsv1alpha1.ResourceDistribution]{}, + predicate.TypedFuncs[*appsv1alpha1.ResourceDistribution]{ + UpdateFunc: func(e event.TypedUpdateEvent[*appsv1alpha1.ResourceDistribution]) bool { + oldObj := e.ObjectOld + newObj := e.ObjectNew + if !reflect.DeepEqual(oldObj.Spec, newObj.Spec) { + klog.V(3).InfoS("Observed updated Spec for ResourceDistribution", "resourceDistribution", klog.KObj(oldObj)) + return true + } + return false + }, + })) if err != nil { return err } // Watch for changes to all namespaces - err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Namespace{}), &enqueueRequestForNamespace{reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Namespace{}, &enqueueRequestForNamespace{reader: mgr.GetCache()})) if err != nil { return err } @@ -112,7 +114,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // Watch for changes to Secrets secret := unstructured.Unstructured{} secret.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("Secret")) - err = c.Watch(source.Kind(mgr.GetCache(), &secret), handler.EnqueueRequestForOwner( + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&secret), handler.EnqueueRequestForOwner( mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.ResourceDistribution{}, handler.OnlyControllerOwner()), predicate.Funcs{ CreateFunc: func(createEvent event.CreateEvent) bool { @@ -121,7 +123,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { GenericFunc: func(genericEvent event.GenericEvent) bool { return false }, - }) + })) if err != nil { return err } @@ -129,7 +131,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // Watch for changes to ConfigMap configMap := unstructured.Unstructured{} configMap.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("ConfigMap")) - err = c.Watch(source.Kind(mgr.GetCache(), &configMap), handler.EnqueueRequestForOwner( + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&configMap), handler.EnqueueRequestForOwner( mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.ResourceDistribution{}, handler.OnlyControllerOwner()), predicate.Funcs{ CreateFunc: func(createEvent event.CreateEvent) bool { @@ -138,7 +140,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { GenericFunc: func(genericEvent event.GenericEvent) bool { return false }, - }) + })) if err != nil { return err } diff --git a/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler.go b/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler.go index 2eb0e2006c..7d7e9f7f51 100644 --- a/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler.go +++ b/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler.go @@ -31,7 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/handler" ) -var _ handler.EventHandler = &enqueueRequestForNamespace{} +var _ handler.TypedEventHandler[*corev1.Namespace] = &enqueueRequestForNamespace{} type matchFunc func(*corev1.Namespace, *appsv1alpha1.ResourceDistribution) (bool, error) @@ -39,15 +39,15 @@ type enqueueRequestForNamespace struct { reader client.Reader } -func (p *enqueueRequestForNamespace) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNamespace) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Namespace], q workqueue.RateLimitingInterface) { p.addNamespace(q, evt.Object, matchViaTargets) } -func (p *enqueueRequestForNamespace) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNamespace) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Namespace], q workqueue.RateLimitingInterface) { p.addNamespace(q, evt.Object, matchViaIncludedNamespaces) } -func (p *enqueueRequestForNamespace) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNamespace) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Namespace], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForNamespace) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForNamespace) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Namespace], q workqueue.RateLimitingInterface) { p.updateNamespace(q, evt.ObjectOld, evt.ObjectNew) } diff --git a/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler_test.go b/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler_test.go index aefe452aef..5d4e88f03c 100644 --- a/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler_test.go +++ b/pkg/controller/resourcedistribution/resourcedistribution_namespace_event_handler_test.go @@ -75,7 +75,7 @@ func TestNamespaceEventHandler(t *testing.T) { func testEnqueueRequestForNamespaceCreate(namespace *corev1.Namespace, expectedNumber int, t *testing.T) { createQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - createEvt := event.CreateEvent{ + createEvt := event.TypedCreateEvent[*corev1.Namespace]{ Object: namespace, } enqueueHandler.Create(context.TODO(), createEvt, createQ) @@ -86,7 +86,7 @@ func testEnqueueRequestForNamespaceCreate(namespace *corev1.Namespace, expectedN func testEnqueueRequestForNamespaceUpdate(namespaceOld, namespaceNew *corev1.Namespace, expectedNumber int, t *testing.T) { updateQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - updateEvt := event.UpdateEvent{ + updateEvt := event.TypedUpdateEvent[*corev1.Namespace]{ ObjectOld: namespaceOld, ObjectNew: namespaceNew, } @@ -98,7 +98,7 @@ func testEnqueueRequestForNamespaceUpdate(namespaceOld, namespaceNew *corev1.Nam func testEnqueueRequestForNamespaceDelete(namespace *corev1.Namespace, expectedNumber int, t *testing.T) { deleteQ := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) - deleteEvt := event.DeleteEvent{ + deleteEvt := event.TypedDeleteEvent[*corev1.Namespace]{ Object: namespace, } enqueueHandler.Delete(context.TODO(), deleteEvt, deleteQ) diff --git a/pkg/controller/sidecarset/sidecarset_controller.go b/pkg/controller/sidecarset/sidecarset_controller.go index 7d7640d4ee..b66c38653d 100644 --- a/pkg/controller/sidecarset/sidecarset_controller.go +++ b/pkg/controller/sidecarset/sidecarset_controller.go @@ -85,23 +85,23 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to SidecarSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.SidecarSet{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldScS := e.ObjectOld.(*appsv1alpha1.SidecarSet) - newScS := e.ObjectNew.(*appsv1alpha1.SidecarSet) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.SidecarSet{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.SidecarSet]{}, predicate.TypedFuncs[*appsv1alpha1.SidecarSet]{ + UpdateFunc: func(e event.TypedUpdateEvent[*appsv1alpha1.SidecarSet]) bool { + oldScS := e.ObjectOld + newScS := e.ObjectNew if oldScS.GetGeneration() != newScS.GetGeneration() { klog.V(3).InfoS("Observed updated Spec for SidecarSet", "sidecarSet", klog.KObj(newScS)) return true } return false }, - }) + })) if err != nil { return err } // Watch for changes to Pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetCache()}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&corev1.Pod{}), &enqueueRequestForPod{reader: mgr.GetCache()})); err != nil { return err } diff --git a/pkg/controller/sidecarterminator/sidecar_terminator_controller.go b/pkg/controller/sidecarterminator/sidecar_terminator_controller.go index 9f872aa566..68ed90aeda 100644 --- a/pkg/controller/sidecarterminator/sidecar_terminator_controller.go +++ b/pkg/controller/sidecarterminator/sidecar_terminator_controller.go @@ -93,7 +93,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to Pod - if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &enqueueRequestForPod{}); err != nil { + if err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}, &enqueueRequestForPod{})); err != nil { return err } diff --git a/pkg/controller/sidecarterminator/sidecar_terminator_controller_test.go b/pkg/controller/sidecarterminator/sidecar_terminator_controller_test.go index ee29c4c16c..99f42690fd 100644 --- a/pkg/controller/sidecarterminator/sidecar_terminator_controller_test.go +++ b/pkg/controller/sidecarterminator/sidecar_terminator_controller_test.go @@ -511,6 +511,9 @@ func TestKruiseDaemonStrategy(t *testing.T) { }, realCRR) expectCRR := cs.getCRR() + realCRR.TypeMeta.APIVersion = appsv1alpha1.SchemeGroupVersion.String() + realCRR.TypeMeta.Kind = "ContainerRecreateRequest" + realBy, _ := json.Marshal(realCRR) expectBy, _ := json.Marshal(expectCRR) diff --git a/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler.go b/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler.go index 2a9c4ecd70..3b079ca73a 100644 --- a/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler.go +++ b/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler.go @@ -32,18 +32,18 @@ import ( appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" ) -var _ handler.EventHandler = &enqueueRequestForPod{} +var _ handler.TypedEventHandler[*corev1.Pod] = &enqueueRequestForPod{} type enqueueRequestForPod struct{} -func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Delete(ctx context.Context, evt event.TypedDeleteEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Generic(ctx context.Context, evt event.TypedGenericEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { } -func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Create(ctx context.Context, evt event.TypedCreateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { p.handlePodCreate(q, evt.Object) } -func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { +func (p *enqueueRequestForPod) Update(ctx context.Context, evt event.TypedUpdateEvent[*corev1.Pod], q workqueue.RateLimitingInterface) { p.handlePodUpdate(q, evt.ObjectOld, evt.ObjectNew) } diff --git a/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler_test.go b/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler_test.go index 3354b1d2ff..497d943ac2 100644 --- a/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler_test.go +++ b/pkg/controller/sidecarterminator/sidecar_terminator_pod_event_handler_test.go @@ -250,7 +250,7 @@ func TestEnqueueRequestForPodUpdate(t *testing.T) { for _, cs := range cases { t.Run(cs.name, func(t *testing.T) { eventHandler := &enqueueRequestForPod{} - evt := event.UpdateEvent{ + evt := event.TypedUpdateEvent[*corev1.Pod]{ ObjectOld: cs.getOldPod(), ObjectNew: cs.getNewPod(), } @@ -357,7 +357,7 @@ func TestEnqueueRequestForPodCreate(t *testing.T) { for _, cs := range cases { t.Run(cs.name, func(t *testing.T) { eventHandler := &enqueueRequestForPod{} - evt := event.CreateEvent{ + evt := event.TypedCreateEvent[*corev1.Pod]{ Object: cs.getPod(), } que := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) diff --git a/pkg/controller/statefulset/pvc_event_handler.go b/pkg/controller/statefulset/pvc_event_handler.go index 665fb5047d..da37518034 100644 --- a/pkg/controller/statefulset/pvc_event_handler.go +++ b/pkg/controller/statefulset/pvc_event_handler.go @@ -31,13 +31,13 @@ import ( type pvcEventHandler struct { } -var _ handler.EventHandler = &pvcEventHandler{} +var _ handler.TypedEventHandler[*v1.PersistentVolumeClaim] = &pvcEventHandler{} -func (e *pvcEventHandler) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) { +func (e *pvcEventHandler) Create(ctx context.Context, evt event.TypedCreateEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { } -func (e *pvcEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - newPVC := evt.ObjectNew.(*v1.PersistentVolumeClaim) +func (e *pvcEventHandler) Update(ctx context.Context, evt event.TypedUpdateEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { + newPVC := evt.ObjectNew if len(newPVC.Annotations) == 0 { return } @@ -54,8 +54,8 @@ func (e *pvcEventHandler) Update(ctx context.Context, evt event.UpdateEvent, q w return } -func (e *pvcEventHandler) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) { +func (e *pvcEventHandler) Delete(ctx context.Context, evt event.TypedDeleteEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { } -func (e *pvcEventHandler) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) { +func (e *pvcEventHandler) Generic(ctx context.Context, evt event.TypedGenericEvent[*v1.PersistentVolumeClaim], q workqueue.RateLimitingInterface) { } diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index cba0236c9d..9c16d9c5ee 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -4870,7 +4870,7 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, @@ -4888,7 +4888,7 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, @@ -4906,12 +4906,12 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, } - set.Spec.VolumeClaimTemplates[1].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[1].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, @@ -4929,7 +4929,7 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, @@ -4947,12 +4947,12 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, } - set.Spec.VolumeClaimTemplates[1].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[1].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, @@ -4970,7 +4970,7 @@ func TestStatefulSetVCTResize(t *testing.T) { }, update: func(set *appsv1beta1.StatefulSet) *appsv1beta1.StatefulSet { set.Spec.Template.Spec.Containers[0].Image = "busybox" - set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.ResourceRequirements{ + set.Spec.VolumeClaimTemplates[0].Spec.Resources = corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(20, resource.BinarySI), }, diff --git a/pkg/controller/statefulset/stateful_set_utils_test.go b/pkg/controller/statefulset/stateful_set_utils_test.go index 41ac1dddf4..03d6197aaf 100644 --- a/pkg/controller/statefulset/stateful_set_utils_test.go +++ b/pkg/controller/statefulset/stateful_set_utils_test.go @@ -814,7 +814,7 @@ func newPVC(name string) corev1.PersistentVolumeClaim { Name: name, }, Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.ResourceRequirements{ + Resources: corev1.VolumeResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceStorage: *resource.NewQuantity(1, resource.BinarySI), }, diff --git a/pkg/controller/statefulset/statefulset_controller.go b/pkg/controller/statefulset/statefulset_controller.go index 704b6678f4..6557c62f77 100644 --- a/pkg/controller/statefulset/statefulset_controller.go +++ b/pkg/controller/statefulset/statefulset_controller.go @@ -196,30 +196,31 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to StatefulSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1beta1.StatefulSet{}), &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldSS := e.ObjectOld.(*appsv1beta1.StatefulSet) - newSS := e.ObjectNew.(*appsv1beta1.StatefulSet) - if oldSS.Status.Replicas != newSS.Status.Replicas { - klog.V(4).InfoS("Observed updated replica count for StatefulSet", - "statefulSet", klog.KObj(newSS), "oldReplicas", oldSS.Status.Replicas, "newReplicas", newSS.Status.Replicas) - } - return true - }, - }) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1beta1.StatefulSet{}, &handler.TypedEnqueueRequestForObject[*appsv1beta1.StatefulSet]{}, + predicate.TypedFuncs[*appsv1beta1.StatefulSet]{ + UpdateFunc: func(e event.TypedUpdateEvent[*appsv1beta1.StatefulSet]) bool { + oldSS := e.ObjectOld + newSS := e.ObjectNew + if oldSS.Status.Replicas != newSS.Status.Replicas { + klog.V(4).InfoS("Observed updated replica count for StatefulSet", + "statefulSet", klog.KObj(newSS), "oldReplicas", oldSS.Status.Replicas, "newReplicas", newSS.Status.Replicas) + } + return true + }, + })) if err != nil { return err } // Watch for changes to PVC patched by StatefulSet - err = c.Watch(source.Kind(mgr.GetCache(), &v1.PersistentVolumeClaim{}), &pvcEventHandler{}) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.PersistentVolumeClaim{}, &pvcEventHandler{})) if err != nil { return err } // Watch for changes to Pod created by StatefulSet - err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1beta1.StatefulSet{}, handler.OnlyControllerOwner())) + err = c.Watch(source.Kind(mgr.GetCache(), &v1.Pod{}, handler.TypedEnqueueRequestForOwner[*v1.Pod]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1beta1.StatefulSet{}, handler.OnlyControllerOwner()))) if err != nil { return err } diff --git a/pkg/controller/uniteddeployment/uniteddeployment_controller.go b/pkg/controller/uniteddeployment/uniteddeployment_controller.go index 79d5b20618..c1fa1cf88c 100644 --- a/pkg/controller/uniteddeployment/uniteddeployment_controller.go +++ b/pkg/controller/uniteddeployment/uniteddeployment_controller.go @@ -116,31 +116,31 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to UnitedDeployment - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.UnitedDeployment{}), &eventHandler{}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1alpha1.UnitedDeployment{}), &eventHandler{})) if err != nil { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.StatefulSet{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner())) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.StatefulSet{}, handler.TypedEnqueueRequestForOwner[*appsv1.StatefulSet]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner()))) if err != nil { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1beta1.StatefulSet{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner())) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1beta1.StatefulSet{}, handler.TypedEnqueueRequestForOwner[*appsv1beta1.StatefulSet]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner()))) if err != nil { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.CloneSet{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner())) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.CloneSet{}, handler.TypedEnqueueRequestForOwner[*appsv1alpha1.CloneSet]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner()))) if err != nil { return err } - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.Deployment{}), handler.EnqueueRequestForOwner( - mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner())) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.Deployment{}, handler.TypedEnqueueRequestForOwner[*appsv1.Deployment]( + mgr.GetScheme(), mgr.GetRESTMapper(), &appsv1alpha1.UnitedDeployment{}, handler.OnlyControllerOwner()))) if err != nil { return err } diff --git a/pkg/controller/util/watch.go b/pkg/controller/util/watch.go index 363ded4c13..b82326d27c 100644 --- a/pkg/controller/util/watch.go +++ b/pkg/controller/util/watch.go @@ -10,6 +10,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/util/retry" "k8s.io/klog/v2" + crclient "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" @@ -68,5 +69,5 @@ func AddWatcherDynamically(mgr manager.Manager, c controller.Controller, h handl object := &unstructured.Unstructured{} object.SetGroupVersionKind(gvk) watcherMap.Store(cacheKey, true) - return true, c.Watch(source.Kind(mgr.GetCache(), object), h) + return true, c.Watch(source.Kind(mgr.GetCache(), crclient.Object(object), h)) } diff --git a/pkg/controller/workloadspread/workloadspread_controller.go b/pkg/controller/workloadspread/workloadspread_controller.go index 951839ca7f..19950318df 100644 --- a/pkg/controller/workloadspread/workloadspread_controller.go +++ b/pkg/controller/workloadspread/workloadspread_controller.go @@ -123,37 +123,37 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch WorkloadSpread - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.WorkloadSpread{}), &handler.EnqueueRequestForObject{}) + err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.WorkloadSpread{}, &handler.TypedEnqueueRequestForObject[*appsv1alpha1.WorkloadSpread]{})) if err != nil { return err } // Watch for changes to Pods have a specific annotation - err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Pod{}), &podEventHandler{}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&corev1.Pod{}), &podEventHandler{})) if err != nil { return err } // Watch for replica changes to CloneSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1alpha1.CloneSet{}), &workloadEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1alpha1.CloneSet{}), &workloadEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for replica changes to Deployment - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.Deployment{}), &workloadEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1.Deployment{}), &workloadEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for replica changes to ReplicaSet - err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.ReplicaSet{}), &workloadEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&appsv1.ReplicaSet{}), &workloadEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } // Watch for parallelism changes to Job - err = c.Watch(source.Kind(mgr.GetCache(), &batchv1.Job{}), &workloadEventHandler{Reader: mgr.GetCache()}) + err = c.Watch(source.Kind(mgr.GetCache(), client.Object(&batchv1.Job{}), &workloadEventHandler{Reader: mgr.GetCache()})) if err != nil { return err } diff --git a/pkg/daemon/kuberuntime/kuberuntime_container.go b/pkg/daemon/kuberuntime/kuberuntime_container.go index 45a4082aff..e2a71b1dd4 100644 --- a/pkg/daemon/kuberuntime/kuberuntime_container.go +++ b/pkg/daemon/kuberuntime/kuberuntime_container.go @@ -30,9 +30,9 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" + kubelettypes "k8s.io/kubelet/pkg/types" kubeletcontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" ) diff --git a/pkg/daemon/kuberuntime/labels.go b/pkg/daemon/kuberuntime/labels.go index aec5f165a7..1d7a9b0c9f 100644 --- a/pkg/daemon/kuberuntime/labels.go +++ b/pkg/daemon/kuberuntime/labels.go @@ -21,7 +21,7 @@ import ( "encoding/json" "strconv" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" + kubelettypes "k8s.io/kubelet/pkg/types" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" diff --git a/pkg/daemon/podprobe/pod_probe_controller.go b/pkg/daemon/podprobe/pod_probe_controller.go index 19f8ece40b..e379bc122e 100644 --- a/pkg/daemon/podprobe/pod_probe_controller.go +++ b/pkg/daemon/podprobe/pod_probe_controller.go @@ -41,7 +41,7 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/gengo/examples/set-gen/sets" "k8s.io/klog/v2" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" + kubelettypes "k8s.io/kubelet/pkg/types" appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" "github.com/openkruise/kruise/pkg/client" diff --git a/pkg/util/inplaceupdate/inplace_update_test.go b/pkg/util/inplaceupdate/inplace_update_test.go index af3295e7ec..e6491669ad 100644 --- a/pkg/util/inplaceupdate/inplace_update_test.go +++ b/pkg/util/inplaceupdate/inplace_update_test.go @@ -639,6 +639,9 @@ func TestRefresh(t *testing.T) { t.Fatalf("failed to get pod: %v", err) } + got.APIVersion = "v1" + got.Kind = "Pod" + testCase.expectedPod.ResourceVersion = got.ResourceVersion if !reflect.DeepEqual(testCase.expectedPod, got) { t.Fatalf("case %s failed, expected \n%v\n got \n%v", testCase.name, util.DumpJSON(testCase.expectedPod), util.DumpJSON(got)) diff --git a/pkg/util/metrics/leadership/leader.go b/pkg/util/metrics/leadership/leader.go index 5f82085cba..3c18ab6da1 100644 --- a/pkg/util/metrics/leadership/leader.go +++ b/pkg/util/metrics/leadership/leader.go @@ -7,11 +7,17 @@ import ( "sigs.k8s.io/controller-runtime/pkg/metrics" ) -var leaderMetric = promauto.NewGauge( - prometheus.GaugeOpts{ - Name: "kruise_manager_is_leader", - Help: "Gauge the leader of kruise-manager", - }, +var ( + leaderMetric = promauto.NewGauge( + prometheus.GaugeOpts{ + Name: "kruise_manager_is_leader", + Help: "Gauge the leader of kruise-manager", + }, + ) + leaderSlowpathCounter = prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "leader_election_slowpath_total", + Help: "Total number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.", + }, []string{"name"}) ) func init() { @@ -28,10 +34,10 @@ type switchMetric struct{} var ( _ leaderelection.MetricsProvider = metricsProvider{} - _ leaderelection.SwitchMetric = switchMetric{} + _ leaderelection.LeaderMetric = switchMetric{} ) -func (_ metricsProvider) NewLeaderMetric() leaderelection.SwitchMetric { +func (_ metricsProvider) NewLeaderMetric() leaderelection.LeaderMetric { return switchMetric{} } @@ -42,3 +48,8 @@ func (_ switchMetric) On(_ string) { func (s switchMetric) Off(string) { leaderMetric.Set(0) } + +// todo: why not use leaderelection.NewLeaderMetric? +func (s switchMetric) SlowpathExercised(name string) { + leaderSlowpathCounter.WithLabelValues(name).Inc() +} diff --git a/pkg/util/ownerref_test.go b/pkg/util/ownerref_test.go index 3d13b3975e..adc71e0901 100644 --- a/pkg/util/ownerref_test.go +++ b/pkg/util/ownerref_test.go @@ -50,7 +50,7 @@ func TestHasOwnerRef(t *testing.T) { ResourceVersion: "1", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("10"), }, @@ -92,7 +92,7 @@ func TestRemoveOwner(t *testing.T) { ResourceVersion: "1", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("10"), }, @@ -128,7 +128,7 @@ func TestSetOwnerRef(t *testing.T) { ResourceVersion: "1", }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("10"), }, diff --git a/pkg/util/pods.go b/pkg/util/pods.go index a17901018c..40f0fd2eaa 100644 --- a/pkg/util/pods.go +++ b/pkg/util/pods.go @@ -288,6 +288,9 @@ func ContainsObjectRef(slice []v1.ObjectReference, obj v1.ObjectReference) bool } func GetCondition(pod *v1.Pod, cType v1.PodConditionType) *v1.PodCondition { + if pod == nil { + return nil + } for _, c := range pod.Status.Conditions { if c.Type == cType { return &c diff --git a/pkg/util/pvc/pvc_compare_utils_test.go b/pkg/util/pvc/pvc_compare_utils_test.go index 4f0ec01105..940d9f0389 100644 --- a/pkg/util/pvc/pvc_compare_utils_test.go +++ b/pkg/util/pvc/pvc_compare_utils_test.go @@ -24,7 +24,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -40,7 +40,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -61,7 +61,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -77,7 +77,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -98,7 +98,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -114,7 +114,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadOnlyMany, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -136,7 +136,7 @@ func TestCompareWithCheckFn(t *testing.T) { v1.ReadWriteOnce, v1.ReadWriteOncePod, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -152,7 +152,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadOnlyMany, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -173,7 +173,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("500Mi"), }, @@ -189,7 +189,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -210,7 +210,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("5Gi"), }, @@ -226,7 +226,7 @@ func TestCompareWithCheckFn(t *testing.T) { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -276,7 +276,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -285,7 +285,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, template: &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -304,7 +304,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -313,7 +313,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, template: &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -332,7 +332,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -341,7 +341,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, template: &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -360,7 +360,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("4Gi"), }, @@ -369,7 +369,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, template: &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -388,7 +388,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, }, Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -397,7 +397,7 @@ func TestIsPVCCompatibleAndReady(t *testing.T) { }, template: &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("3Gi"), }, @@ -485,7 +485,7 @@ func TestIsPatchPVCCompleted(t *testing.T) { template := &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -498,7 +498,7 @@ func TestIsPatchPVCCompleted(t *testing.T) { t.Run(tt.name, func(t *testing.T) { claim := &v1.PersistentVolumeClaim{ Spec: v1.PersistentVolumeClaimSpec{ - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("1Gi"), }, diff --git a/pkg/util/volumeclaimtemplate/volume_templates_hash_test.go b/pkg/util/volumeclaimtemplate/volume_templates_hash_test.go index e6371effae..f39f791ce7 100644 --- a/pkg/util/volumeclaimtemplate/volume_templates_hash_test.go +++ b/pkg/util/volumeclaimtemplate/volume_templates_hash_test.go @@ -42,7 +42,7 @@ func Test_vctHasher_GetExpectHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -66,7 +66,7 @@ func Test_vctHasher_GetExpectHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -82,7 +82,7 @@ func Test_vctHasher_GetExpectHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -144,7 +144,7 @@ func TestPatchVCTemplateHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -169,7 +169,7 @@ func TestPatchVCTemplateHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("1Gi"), }, @@ -185,7 +185,7 @@ func TestPatchVCTemplateHash(t *testing.T) { }, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, diff --git a/pkg/webhook/advancedcronjob/mutating/advancedcronjob_create_update_handler.go b/pkg/webhook/advancedcronjob/mutating/advancedcronjob_create_update_handler.go index e13744f03f..35b24cfd97 100644 --- a/pkg/webhook/advancedcronjob/mutating/advancedcronjob_create_update_handler.go +++ b/pkg/webhook/advancedcronjob/mutating/advancedcronjob_create_update_handler.go @@ -41,7 +41,7 @@ type AdvancedCronJobCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &AdvancedCronJobCreateUpdateHandler{} diff --git a/pkg/webhook/advancedcronjob/validating/advancedcronjob_create_update_handler.go b/pkg/webhook/advancedcronjob/validating/advancedcronjob_create_update_handler.go index c670a9d214..3e26acf269 100644 --- a/pkg/webhook/advancedcronjob/validating/advancedcronjob_create_update_handler.go +++ b/pkg/webhook/advancedcronjob/validating/advancedcronjob_create_update_handler.go @@ -54,7 +54,7 @@ var ( // AdvancedCronJobCreateUpdateHandler handles AdvancedCronJob type AdvancedCronJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func (h *AdvancedCronJobCreateUpdateHandler) validateAdvancedCronJob(obj *appsv1alpha1.AdvancedCronJob) field.ErrorList { diff --git a/pkg/webhook/broadcastjob/mutating/broadcastjob_create_update_handler.go b/pkg/webhook/broadcastjob/mutating/broadcastjob_create_update_handler.go index 83d2473456..7dea55d471 100644 --- a/pkg/webhook/broadcastjob/mutating/broadcastjob_create_update_handler.go +++ b/pkg/webhook/broadcastjob/mutating/broadcastjob_create_update_handler.go @@ -41,7 +41,7 @@ type BroadcastJobCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &BroadcastJobCreateUpdateHandler{} diff --git a/pkg/webhook/broadcastjob/validating/broadcastjob_create_update_handler.go b/pkg/webhook/broadcastjob/validating/broadcastjob_create_update_handler.go index b3dd224c52..697cee2af3 100644 --- a/pkg/webhook/broadcastjob/validating/broadcastjob_create_update_handler.go +++ b/pkg/webhook/broadcastjob/validating/broadcastjob_create_update_handler.go @@ -54,7 +54,7 @@ type BroadcastJobCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func (h *BroadcastJobCreateUpdateHandler) validatingBroadcastJobFn(ctx context.Context, obj *appsv1alpha1.BroadcastJob) (bool, string, error) { diff --git a/pkg/webhook/builtinworkloads/validating/builtin_handlers.go b/pkg/webhook/builtinworkloads/validating/builtin_handlers.go index f9daa83402..cc860df0e2 100644 --- a/pkg/webhook/builtinworkloads/validating/builtin_handlers.go +++ b/pkg/webhook/builtinworkloads/validating/builtin_handlers.go @@ -21,22 +21,23 @@ import ( "fmt" "net/http" - "github.com/openkruise/kruise/pkg/util" - "github.com/openkruise/kruise/pkg/webhook/util/deletionprotection" admissionv1 "k8s.io/api/admission/v1" apps "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + "github.com/openkruise/kruise/pkg/util" + "github.com/openkruise/kruise/pkg/webhook/util/deletionprotection" ) // WorkloadHandler handles built-in workloads, e.g. Deployment, ReplicaSet, StatefulSet type WorkloadHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } -func (h *WorkloadHandler) InjectDecoder(d *admission.Decoder) error { +func (h *WorkloadHandler) InjectDecoder(d admission.Decoder) error { h.Decoder = d return nil } diff --git a/pkg/webhook/cloneset/mutating/cloneset_create_update_handler.go b/pkg/webhook/cloneset/mutating/cloneset_create_update_handler.go index 1725a599f1..159ddc5d9e 100644 --- a/pkg/webhook/cloneset/mutating/cloneset_create_update_handler.go +++ b/pkg/webhook/cloneset/mutating/cloneset_create_update_handler.go @@ -37,7 +37,7 @@ import ( // CloneSetCreateUpdateHandler handles CloneSet type CloneSetCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &CloneSetCreateUpdateHandler{} diff --git a/pkg/webhook/cloneset/validating/cloneset_create_update_handler.go b/pkg/webhook/cloneset/validating/cloneset_create_update_handler.go index 45b486a242..ddb1d03be0 100644 --- a/pkg/webhook/cloneset/validating/cloneset_create_update_handler.go +++ b/pkg/webhook/cloneset/validating/cloneset_create_update_handler.go @@ -36,7 +36,7 @@ type CloneSetCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &CloneSetCreateUpdateHandler{} diff --git a/pkg/webhook/cloneset/validating/validation_test.go b/pkg/webhook/cloneset/validating/validation_test.go index 27b9e82f93..f0a8be51dd 100644 --- a/pkg/webhook/cloneset/validating/validation_test.go +++ b/pkg/webhook/cloneset/validating/validation_test.go @@ -5,10 +5,6 @@ import ( "strconv" "testing" - "github.com/openkruise/kruise/apis/apps/defaults" - appspub "github.com/openkruise/kruise/apis/apps/pub" - appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" - "github.com/openkruise/kruise/pkg/util" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -16,6 +12,11 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" utilpointer "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client/fake" + + "github.com/openkruise/kruise/apis/apps/defaults" + appspub "github.com/openkruise/kruise/apis/apps/pub" + appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" + "github.com/openkruise/kruise/pkg/util" ) type testCase struct { @@ -83,7 +84,7 @@ func TestValidate(t *testing.T) { Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: utilpointer.String("foo/bar"), AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{Requests: map[v1.ResourceName]resource.Quantity{ + Resources: v1.VolumeResourceRequirements{Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse(size), }}, }, diff --git a/pkg/webhook/containerrecreaterequest/mutating/crr_mutating_handler.go b/pkg/webhook/containerrecreaterequest/mutating/crr_mutating_handler.go index b6494f7e7e..62bd69832e 100644 --- a/pkg/webhook/containerrecreaterequest/mutating/crr_mutating_handler.go +++ b/pkg/webhook/containerrecreaterequest/mutating/crr_mutating_handler.go @@ -47,7 +47,7 @@ const ( // ContainerRecreateRequestHandler handles ContainerRecreateRequest type ContainerRecreateRequestHandler struct { Client client.Client - Decoder *admission.Decoder + Decoder admission.Decoder } // Handle handles admission requests. diff --git a/pkg/webhook/customresourcedefinition/validating/crd_handler.go b/pkg/webhook/customresourcedefinition/validating/crd_handler.go index e62fe1229e..364b660222 100644 --- a/pkg/webhook/customresourcedefinition/validating/crd_handler.go +++ b/pkg/webhook/customresourcedefinition/validating/crd_handler.go @@ -37,7 +37,7 @@ type CRDHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &CRDHandler{} diff --git a/pkg/webhook/daemonset/mutating/daemonset_mutating_handler.go b/pkg/webhook/daemonset/mutating/daemonset_mutating_handler.go index bbd87c0b37..429f23e366 100644 --- a/pkg/webhook/daemonset/mutating/daemonset_mutating_handler.go +++ b/pkg/webhook/daemonset/mutating/daemonset_mutating_handler.go @@ -40,7 +40,7 @@ type DaemonSetCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &DaemonSetCreateUpdateHandler{} diff --git a/pkg/webhook/daemonset/validating/daemonset_create_update_handler.go b/pkg/webhook/daemonset/validating/daemonset_create_update_handler.go index 2a269f5251..3726aa9e3c 100644 --- a/pkg/webhook/daemonset/validating/daemonset_create_update_handler.go +++ b/pkg/webhook/daemonset/validating/daemonset_create_update_handler.go @@ -39,7 +39,7 @@ var ValidateDaemonSetName = genericvalidation.NameIsDNSSubdomain // DaemonSetCreateUpdateHandler handles DaemonSet type DaemonSetCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func (h *DaemonSetCreateUpdateHandler) validateDaemonSetUpdate(ds, oldDs *appsv1alpha1.DaemonSet) field.ErrorList { diff --git a/pkg/webhook/ephemeraljob/validating/ephemeraljob_create_update_handler.go b/pkg/webhook/ephemeraljob/validating/ephemeraljob_create_update_handler.go index eeaed7ab62..1df44b4f9c 100644 --- a/pkg/webhook/ephemeraljob/validating/ephemeraljob_create_update_handler.go +++ b/pkg/webhook/ephemeraljob/validating/ephemeraljob_create_update_handler.go @@ -33,7 +33,7 @@ import ( // EphemeralJobCreateUpdateHandler handles EphemeralJob type EphemeralJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &EphemeralJobCreateUpdateHandler{} @@ -64,7 +64,9 @@ func validate(obj *appsv1alpha1.EphemeralJob) error { if err != nil { return err } + // default hostUsers is true + hostUsers := true // don't validate EphemeralContainer TargetContainerName - allErrs := validateEphemeralContainers(ecs, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}) + allErrs := validateEphemeralContainers(ecs, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}, hostUsers) return allErrs.ToAggregate() } diff --git a/pkg/webhook/ephemeraljob/validating/validation.go b/pkg/webhook/ephemeraljob/validating/validation.go index 8f1b7abbb7..354758d184 100644 --- a/pkg/webhook/ephemeraljob/validating/validation.go +++ b/pkg/webhook/ephemeraljob/validating/validation.go @@ -96,7 +96,7 @@ func validatePullPolicy(policy core.PullPolicy, fldPath *field.Path) field.Error // validateContainerCommon applies validation common to all container types. It's called by regular, init, and ephemeral // container list validation to require a properly formatted name, image, etc. -func validateContainerCommon(ctr *core.Container, path *field.Path, opts validation.PodValidationOptions) field.ErrorList { +func validateContainerCommon(ctr *core.Container, path *field.Path, opts validation.PodValidationOptions, hostUsers bool) field.ErrorList { var allErrs field.ErrorList namePath := path.Child("name") @@ -127,9 +127,9 @@ func validateContainerCommon(ctr *core.Container, path *field.Path, opts validat allErrs = append(allErrs, validateContainerPorts(ctr.Ports, path.Child("ports"))...) allErrs = append(allErrs, validation.ValidateEnv(ctr.Env, path.Child("env"), opts)...) - allErrs = append(allErrs, validation.ValidateEnvFrom(ctr.EnvFrom, path.Child("envFrom"))...) + allErrs = append(allErrs, validation.ValidateEnvFrom(ctr.EnvFrom, path.Child("envFrom"), opts)...) allErrs = append(allErrs, validatePullPolicy(ctr.ImagePullPolicy, path.Child("imagePullPolicy"))...) - allErrs = append(allErrs, validation.ValidateSecurityContext(ctr.SecurityContext, path.Child("securityContext"))...) + allErrs = append(allErrs, validation.ValidateSecurityContext(ctr.SecurityContext, path.Child("securityContext"), hostUsers)...) return allErrs } @@ -168,7 +168,7 @@ func validateFieldAllowList(value interface{}, allowedFields map[string]bool, er // validateEphemeralContainers is called by pod spec and template validation to validate the list of ephemeral containers. // Note that this is called for pod template even though ephemeral containers aren't allowed in pod templates. -func validateEphemeralContainers(ephemeralContainers []core.EphemeralContainer, fldPath *field.Path, opts validation.PodValidationOptions) field.ErrorList { +func validateEphemeralContainers(ephemeralContainers []core.EphemeralContainer, fldPath *field.Path, opts validation.PodValidationOptions, hostUsers bool) field.ErrorList { var allErrs field.ErrorList if len(ephemeralContainers) == 0 { @@ -181,7 +181,7 @@ func validateEphemeralContainers(ephemeralContainers []core.EphemeralContainer, idxPath := fldPath.Index(i) c := (*core.Container)(&ec.EphemeralContainerCommon) - allErrs = append(allErrs, validateContainerCommon(c, idxPath, opts)...) + allErrs = append(allErrs, validateContainerCommon(c, idxPath, opts, hostUsers)...) // Ephemeral containers don't need looser constraints for pod templates, so it's convenient to apply both validations // here where we've already converted EphemeralContainerCommon to Container. allErrs = append(allErrs, validateContainerOnlyForPod(c, idxPath)...) diff --git a/pkg/webhook/ephemeraljob/validating/validation_test.go b/pkg/webhook/ephemeraljob/validating/validation_test.go index 43ae7fc6bc..cfb386a55b 100644 --- a/pkg/webhook/ephemeraljob/validating/validation_test.go +++ b/pkg/webhook/ephemeraljob/validating/validation_test.go @@ -93,7 +93,7 @@ func TestValidateEphemeralContainers(t *testing.T) { }, }}, } { - if errs := validateEphemeralContainers(ephemeralContainers, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}); len(errs) != 0 { + if errs := validateEphemeralContainers(ephemeralContainers, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}, true); len(errs) != 0 { t.Errorf("expected success for '%s' but got errors: %v", title, errs) } } @@ -380,7 +380,7 @@ func TestValidateEphemeralContainers(t *testing.T) { for _, tc := range tcs { t.Run(tc.title+"__@L"+tc.line, func(t *testing.T) { - errs := validateEphemeralContainers(tc.ephemeralContainers, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}) + errs := validateEphemeralContainers(tc.ephemeralContainers, field.NewPath("ephemeralContainers"), validation.PodValidationOptions{}, true) if len(errs) == 0 { t.Fatal("expected error but received none") } diff --git a/pkg/webhook/imagelistpulljob/mutating/imagelistpulljob_create_update_handler.go b/pkg/webhook/imagelistpulljob/mutating/imagelistpulljob_create_update_handler.go index 9b0214e6b1..f78a73d678 100644 --- a/pkg/webhook/imagelistpulljob/mutating/imagelistpulljob_create_update_handler.go +++ b/pkg/webhook/imagelistpulljob/mutating/imagelistpulljob_create_update_handler.go @@ -34,7 +34,7 @@ import ( // ImageListPullJobCreateUpdateHandler handles ImagePullJob type ImageListPullJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ImageListPullJobCreateUpdateHandler{} diff --git a/pkg/webhook/imagelistpulljob/validating/imagelistpulljob_create_update_handler.go b/pkg/webhook/imagelistpulljob/validating/imagelistpulljob_create_update_handler.go index bee46db12b..f3bbef7bac 100644 --- a/pkg/webhook/imagelistpulljob/validating/imagelistpulljob_create_update_handler.go +++ b/pkg/webhook/imagelistpulljob/validating/imagelistpulljob_create_update_handler.go @@ -35,7 +35,7 @@ import ( // ImageListPullJobCreateUpdateHandler handles ImagePullJob type ImageListPullJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ImageListPullJobCreateUpdateHandler{} diff --git a/pkg/webhook/imagepulljob/mutating/imagepulljob_create_update_handler.go b/pkg/webhook/imagepulljob/mutating/imagepulljob_create_update_handler.go index bd970f1b90..507aae7984 100644 --- a/pkg/webhook/imagepulljob/mutating/imagepulljob_create_update_handler.go +++ b/pkg/webhook/imagepulljob/mutating/imagepulljob_create_update_handler.go @@ -35,7 +35,7 @@ import ( // ImagePullJobCreateUpdateHandler handles ImagePullJob type ImagePullJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ImagePullJobCreateUpdateHandler{} diff --git a/pkg/webhook/imagepulljob/validating/imagepulljob_create_update_handler.go b/pkg/webhook/imagepulljob/validating/imagepulljob_create_update_handler.go index c68c7e3ad4..b5e92c0f49 100644 --- a/pkg/webhook/imagepulljob/validating/imagepulljob_create_update_handler.go +++ b/pkg/webhook/imagepulljob/validating/imagepulljob_create_update_handler.go @@ -35,7 +35,7 @@ import ( // ImagePullJobCreateUpdateHandler handles ImagePullJob type ImagePullJobCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ImagePullJobCreateUpdateHandler{} diff --git a/pkg/webhook/ingress/validating/ingress_handler.go b/pkg/webhook/ingress/validating/ingress_handler.go index 1adbab7a8d..bdc17293a0 100644 --- a/pkg/webhook/ingress/validating/ingress_handler.go +++ b/pkg/webhook/ingress/validating/ingress_handler.go @@ -35,7 +35,7 @@ type IngressHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &IngressHandler{} diff --git a/pkg/webhook/namespace/validating/namespace_handler.go b/pkg/webhook/namespace/validating/namespace_handler.go index 030c8549a6..0e8bec4f65 100644 --- a/pkg/webhook/namespace/validating/namespace_handler.go +++ b/pkg/webhook/namespace/validating/namespace_handler.go @@ -34,7 +34,7 @@ type NamespaceHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &NamespaceHandler{} diff --git a/pkg/webhook/nodeimage/mutating/nodeimage_create_update_handler.go b/pkg/webhook/nodeimage/mutating/nodeimage_create_update_handler.go index 03225a9a94..9bf0c03ad6 100644 --- a/pkg/webhook/nodeimage/mutating/nodeimage_create_update_handler.go +++ b/pkg/webhook/nodeimage/mutating/nodeimage_create_update_handler.go @@ -35,7 +35,7 @@ import ( // NodeImageCreateUpdateHandler handles NodeImage type NodeImageCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &NodeImageCreateUpdateHandler{} diff --git a/pkg/webhook/nodeimage/validating/nodeimage_create_update_handler.go b/pkg/webhook/nodeimage/validating/nodeimage_create_update_handler.go index 9ad991a886..8f6975a1e0 100644 --- a/pkg/webhook/nodeimage/validating/nodeimage_create_update_handler.go +++ b/pkg/webhook/nodeimage/validating/nodeimage_create_update_handler.go @@ -37,7 +37,7 @@ var ( // NodeImageCreateUpdateHandler handles NodeImage type NodeImageCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &NodeImageCreateUpdateHandler{} diff --git a/pkg/webhook/persistentpodstate/validating/persistent_create_update_handler.go b/pkg/webhook/persistentpodstate/validating/persistent_create_update_handler.go index 59ce03cfa4..754d4a321b 100644 --- a/pkg/webhook/persistentpodstate/validating/persistent_create_update_handler.go +++ b/pkg/webhook/persistentpodstate/validating/persistent_create_update_handler.go @@ -41,7 +41,7 @@ type PersistentPodStateCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &PersistentPodStateCreateUpdateHandler{} diff --git a/pkg/webhook/pod/mutating/pod_create_update_handler.go b/pkg/webhook/pod/mutating/pod_create_update_handler.go index c9cd6d6270..0a00588899 100644 --- a/pkg/webhook/pod/mutating/pod_create_update_handler.go +++ b/pkg/webhook/pod/mutating/pod_create_update_handler.go @@ -38,7 +38,7 @@ type PodCreateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &PodCreateHandler{} diff --git a/pkg/webhook/pod/mutating/pod_unavailable_budget_test.go b/pkg/webhook/pod/mutating/pod_unavailable_budget_test.go index a1f1f5b198..d8d4a4ad77 100644 --- a/pkg/webhook/pod/mutating/pod_unavailable_budget_test.go +++ b/pkg/webhook/pod/mutating/pod_unavailable_budget_test.go @@ -21,11 +21,6 @@ import ( "reflect" "testing" - appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" - policyv1alpha1 "github.com/openkruise/kruise/apis/policy/v1alpha1" - "github.com/openkruise/kruise/pkg/control/pubcontrol" - "github.com/openkruise/kruise/pkg/util" - "github.com/openkruise/kruise/pkg/util/controllerfinder" admissionv1 "k8s.io/api/admission/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -33,6 +28,12 @@ import ( "k8s.io/client-go/kubernetes/scheme" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" + policyv1alpha1 "github.com/openkruise/kruise/apis/policy/v1alpha1" + "github.com/openkruise/kruise/pkg/control/pubcontrol" + "github.com/openkruise/kruise/pkg/util" + "github.com/openkruise/kruise/pkg/util/controllerfinder" ) func TestPubMutatingPod(t *testing.T) { @@ -164,6 +165,10 @@ func TestPubMutatingPod(t *testing.T) { getWorkload: func() *appsv1alpha1.CloneSet { var replicas int32 = 1 obj := &appsv1alpha1.CloneSet{ + TypeMeta: metav1.TypeMeta{ + Kind: "CloneSet", + APIVersion: "apps.kruise.io/v1alpha1", + }, ObjectMeta: metav1.ObjectMeta{ Name: "cs02", Namespace: "test", diff --git a/pkg/webhook/pod/validating/pod_create_update_handler.go b/pkg/webhook/pod/validating/pod_create_update_handler.go index 5574952489..87b8d0d7e7 100644 --- a/pkg/webhook/pod/validating/pod_create_update_handler.go +++ b/pkg/webhook/pod/validating/pod_create_update_handler.go @@ -38,7 +38,7 @@ type PodCreateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func (h *PodCreateHandler) validatingPodFn(ctx context.Context, req admission.Request) (allowed bool, reason string, err error) { diff --git a/pkg/webhook/podprobemarker/validating/probe_create_update_handler.go b/pkg/webhook/podprobemarker/validating/probe_create_update_handler.go index 5ea66f97ab..fcad81f74f 100644 --- a/pkg/webhook/podprobemarker/validating/probe_create_update_handler.go +++ b/pkg/webhook/podprobemarker/validating/probe_create_update_handler.go @@ -60,7 +60,7 @@ var ( // PodProbeMarkerCreateUpdateHandler handles PodProbeMarker type PodProbeMarkerCreateUpdateHandler struct { // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &PodProbeMarkerCreateUpdateHandler{} diff --git a/pkg/webhook/podunavailablebudget/validating/pub_create_update_handler.go b/pkg/webhook/podunavailablebudget/validating/pub_create_update_handler.go index 963a629267..b2e653058d 100644 --- a/pkg/webhook/podunavailablebudget/validating/pub_create_update_handler.go +++ b/pkg/webhook/podunavailablebudget/validating/pub_create_update_handler.go @@ -48,7 +48,7 @@ type PodUnavailableBudgetCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &PodUnavailableBudgetCreateUpdateHandler{} diff --git a/pkg/webhook/resourcedistribution/validating/resourcedistribution_create_update_handler.go b/pkg/webhook/resourcedistribution/validating/resourcedistribution_create_update_handler.go index 2671c347a5..7a810efdf0 100755 --- a/pkg/webhook/resourcedistribution/validating/resourcedistribution_create_update_handler.go +++ b/pkg/webhook/resourcedistribution/validating/resourcedistribution_create_update_handler.go @@ -41,7 +41,7 @@ type ResourceDistributionCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ResourceDistributionCreateUpdateHandler{} diff --git a/pkg/webhook/service/validating/service_handler.go b/pkg/webhook/service/validating/service_handler.go index da987910e2..e350883123 100644 --- a/pkg/webhook/service/validating/service_handler.go +++ b/pkg/webhook/service/validating/service_handler.go @@ -33,7 +33,7 @@ type ServiceHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &ServiceHandler{} diff --git a/pkg/webhook/sidecarset/mutating/sidecarset_create_update_handler.go b/pkg/webhook/sidecarset/mutating/sidecarset_create_update_handler.go index f690adfd26..feeeefe45b 100644 --- a/pkg/webhook/sidecarset/mutating/sidecarset_create_update_handler.go +++ b/pkg/webhook/sidecarset/mutating/sidecarset_create_update_handler.go @@ -42,7 +42,7 @@ type SidecarSetCreateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func setHashSidecarSet(sidecarset *appsv1alpha1.SidecarSet) error { diff --git a/pkg/webhook/sidecarset/validating/sidecarset_create_update_handler.go b/pkg/webhook/sidecarset/validating/sidecarset_create_update_handler.go index ea2b9e69f1..8b96a04908 100644 --- a/pkg/webhook/sidecarset/validating/sidecarset_create_update_handler.go +++ b/pkg/webhook/sidecarset/validating/sidecarset_create_update_handler.go @@ -71,7 +71,7 @@ type SidecarSetCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } func (h *SidecarSetCreateUpdateHandler) validatingSidecarSetFn(_ context.Context, obj *appsv1alpha1.SidecarSet, older *appsv1alpha1.SidecarSet) (bool, string, error) { diff --git a/pkg/webhook/statefulset/mutating/statefulset_create_update_handler.go b/pkg/webhook/statefulset/mutating/statefulset_create_update_handler.go index 1dd4de00e3..0c05f7e7d6 100644 --- a/pkg/webhook/statefulset/mutating/statefulset_create_update_handler.go +++ b/pkg/webhook/statefulset/mutating/statefulset_create_update_handler.go @@ -45,7 +45,7 @@ type StatefulSetCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &StatefulSetCreateUpdateHandler{} diff --git a/pkg/webhook/statefulset/validating/statefulset_create_update_handler.go b/pkg/webhook/statefulset/validating/statefulset_create_update_handler.go index b62e95745d..d4c6a66ddc 100644 --- a/pkg/webhook/statefulset/validating/statefulset_create_update_handler.go +++ b/pkg/webhook/statefulset/validating/statefulset_create_update_handler.go @@ -43,7 +43,7 @@ type StatefulSetCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &StatefulSetCreateUpdateHandler{} diff --git a/pkg/webhook/statefulset/validating/statefulset_validation_test.go b/pkg/webhook/statefulset/validating/statefulset_validation_test.go index b73305b3e0..1e298f9296 100644 --- a/pkg/webhook/statefulset/validating/statefulset_validation_test.go +++ b/pkg/webhook/statefulset/validating/statefulset_validation_test.go @@ -524,7 +524,7 @@ func TestValidateStatefulSetUpdate(t *testing.T) { Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: utilpointer.String("foo/bar"), AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{Requests: map[v1.ResourceName]resource.Quantity{ + Resources: v1.VolumeResourceRequirements{Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse(size), }}, }, @@ -853,7 +853,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("3Gi"), }, @@ -870,7 +870,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -894,7 +894,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &disallowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("3Gi"), }, @@ -911,7 +911,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &disallowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -935,7 +935,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("3Gi"), }, @@ -952,7 +952,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -976,7 +976,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -993,7 +993,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &allowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("3Gi"), }, @@ -1017,7 +1017,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &disallowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("2Gi"), }, @@ -1034,7 +1034,7 @@ func TestValidateVolumeClaimTemplateUpdate(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "pvc-1"}, Spec: v1.PersistentVolumeClaimSpec{ StorageClassName: &disallowExpandSC.Name, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: map[v1.ResourceName]resource.Quantity{ v1.ResourceStorage: resource.MustParse("3Gi"), }, diff --git a/pkg/webhook/uniteddeployment/mutating/uniteddeployment_create_update_handler.go b/pkg/webhook/uniteddeployment/mutating/uniteddeployment_create_update_handler.go index d1ad3e69ef..06cdb6803d 100644 --- a/pkg/webhook/uniteddeployment/mutating/uniteddeployment_create_update_handler.go +++ b/pkg/webhook/uniteddeployment/mutating/uniteddeployment_create_update_handler.go @@ -43,7 +43,7 @@ type UnitedDeploymentCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &UnitedDeploymentCreateUpdateHandler{} diff --git a/pkg/webhook/uniteddeployment/validating/uniteddeployment_create_update_handler.go b/pkg/webhook/uniteddeployment/validating/uniteddeployment_create_update_handler.go index 585e1b17f6..7f96e4fcdf 100644 --- a/pkg/webhook/uniteddeployment/validating/uniteddeployment_create_update_handler.go +++ b/pkg/webhook/uniteddeployment/validating/uniteddeployment_create_update_handler.go @@ -39,7 +39,7 @@ type UnitedDeploymentCreateUpdateHandler struct { // Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &UnitedDeploymentCreateUpdateHandler{} diff --git a/pkg/webhook/util/pod_validation.go b/pkg/webhook/util/pod_validation.go index c1f4c0839d..09419130ed 100644 --- a/pkg/webhook/util/pod_validation.go +++ b/pkg/webhook/util/pod_validation.go @@ -26,7 +26,7 @@ var ( AllowInvalidLabelValueInSelector: true, AllowHostIPsField: true, AllowInvalidTopologySpreadConstraintLabelSelector: true, - AllowMutableNodeSelectorAndNodeAffinity: true, - ResourceIsPod: true, + //AllowMutableNodeSelectorAndNodeAffinity: true, + ResourceIsPod: true, } ) diff --git a/pkg/webhook/workloadspread/validating/workloadspread_create_update_handler.go b/pkg/webhook/workloadspread/validating/workloadspread_create_update_handler.go index 08e53769f0..cba09fc035 100644 --- a/pkg/webhook/workloadspread/validating/workloadspread_create_update_handler.go +++ b/pkg/webhook/workloadspread/validating/workloadspread_create_update_handler.go @@ -39,7 +39,7 @@ type WorkloadSpreadCreateUpdateHandler struct { Client client.Client // Decoder decodes objects - Decoder *admission.Decoder + Decoder admission.Decoder } var _ admission.Handler = &WorkloadSpreadCreateUpdateHandler{} diff --git a/scripts/generate_client.sh b/scripts/generate_client.sh index 13ede850b5..b4b3b6567c 100755 --- a/scripts/generate_client.sh +++ b/scripts/generate_client.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +set -o errexit +set -o nounset +set -o pipefail go mod vendor retVal=$? @@ -6,7 +9,6 @@ if [ $retVal -ne 0 ]; then exit $retVal fi -set -e TMP_DIR=$(mktemp -d) mkdir -p "${TMP_DIR}"/src/github.com/openkruise/kruise/pkg/client cp -r ./{apis,hack,vendor,go.mod,.git} "${TMP_DIR}"/src/github.com/openkruise/kruise/ @@ -14,11 +16,25 @@ cp -r ./{apis,hack,vendor,go.mod,.git} "${TMP_DIR}"/src/github.com/openkruise/kr chmod +x "${TMP_DIR}"/src/github.com/openkruise/kruise/vendor/k8s.io/code-generator/generate-internal-groups.sh echo "tmp_dir: ${TMP_DIR}" -(cd "${TMP_DIR}"/src/github.com/openkruise/kruise; \ - GOPATH=${TMP_DIR} GO111MODULE=off /bin/bash vendor/k8s.io/code-generator/generate-groups.sh client,deepcopy,informer,lister \ - github.com/openkruise/kruise/pkg/client github.com/openkruise/kruise/apis "apps:v1alpha1 apps:v1beta1 policy:v1alpha1" -h ./hack/boilerplate.go.txt) +SCRIPT_ROOT="${TMP_DIR}"/src/github.com/openkruise/kruise +CODEGEN_PKG=${CODEGEN_PKG:-"${SCRIPT_ROOT}/vendor/k8s.io/code-generator"} + +echo "source ${CODEGEN_PKG}/kube_codegen.sh" +source "${CODEGEN_PKG}/kube_codegen.sh" + +echo "gen_helpers" +GOPATH=${TMP_DIR} GO111MODULE=off kube::codegen::gen_helpers \ + --boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/apis" + +echo "gen_client" +GOPATH=${TMP_DIR} GO111MODULE=off kube::codegen::gen_client \ + --with-watch \ + --output-dir "${SCRIPT_ROOT}/pkg/client" \ + --output-pkg "github.com/openkruise/kruise/pkg/client" \ + --boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/apis" rm -rf ./pkg/client/{clientset,informers,listers} mv "${TMP_DIR}"/src/github.com/openkruise/kruise/pkg/client/* ./pkg/client - -rm -rf vendor +rm -rf vendor \ No newline at end of file diff --git a/scripts/generate_openapi.sh b/scripts/generate_openapi.sh index 588afdf343..ede1b346e3 100755 --- a/scripts/generate_openapi.sh +++ b/scripts/generate_openapi.sh @@ -9,23 +9,48 @@ fi set -e TMP_DIR=$(mktemp -d) mkdir -p "${TMP_DIR}"/src/github.com/openkruise/kruise -cp -r ./{apis,hack,vendor} "${TMP_DIR}"/src/github.com/openkruise/kruise/ +cp -r ./{apis,hack,vendor,go.mod,.git} "${TMP_DIR}"/src/github.com/openkruise/kruise/ +echo "tmp_dir: ${TMP_DIR}" +SCRIPT_ROOT="${TMP_DIR}"/src/github.com/openkruise/kruise +CODEGEN_PKG=${CODEGEN_PKG:-"${SCRIPT_ROOT}/vendor/k8s.io/code-generator"} +source "${CODEGEN_PKG}/kube_codegen.sh" + +echo "gen_openapi" +report_filename="./violation_exceptions.list" (cd "${TMP_DIR}"/src/github.com/openkruise/kruise; \ - GOPATH=${TMP_DIR} GO111MODULE=off go run vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go \ - -O openapi_generated -i ./apis/apps/pub -p github.com/openkruise/kruise/apis/apps/pub -h ./hack/boilerplate.go.txt \ - --report-filename ./violation_exceptions.list) +GOPATH=${TMP_DIR} kube::codegen::gen_openapi \ + --output-dir "${SCRIPT_ROOT}/apis/apps/v1alpha1" \ + --output-pkg "github.com/openkruise/kruise/apis/apps/v1alpha1" \ + --report-filename "${report_filename}" \ + --update-report \ + --boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/apis/apps/v1alpha1") + (cd "${TMP_DIR}"/src/github.com/openkruise/kruise; \ - GOPATH=${TMP_DIR} GO111MODULE=off go run vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go \ - -O openapi_generated -i ./apis/apps/v1alpha1 -p github.com/openkruise/kruise/apis/apps/v1alpha1 -h ./hack/boilerplate.go.txt \ - --report-filename ./violation_exceptions.list) +GOPATH=${TMP_DIR} kube::codegen::gen_openapi \ + --output-dir "${SCRIPT_ROOT}/apis/apps/v1beta1" \ + --output-pkg "github.com/openkruise/kruise/apis/apps/v1beta1" \ + --report-filename "${report_filename}" \ + --update-report \ + --boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/apis/apps/v1beta1") + (cd "${TMP_DIR}"/src/github.com/openkruise/kruise; \ - GOPATH=${TMP_DIR} GO111MODULE=off go run vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go \ - -O openapi_generated -i ./apis/apps/v1beta1 -p github.com/openkruise/kruise/apis/apps/v1beta1 -h ./hack/boilerplate.go.txt \ - --report-filename ./violation_exceptions.list) +GOPATH=${TMP_DIR} kube::codegen::gen_openapi \ + --output-dir "${SCRIPT_ROOT}/apis/apps/pub" \ + --output-pkg "github.com/openkruise/kruise/apis/apps/pub" \ + --report-filename "${report_filename}" \ + --update-report \ + --boilerplate "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/apis/apps/pub") + +cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/pub/zz_generated.openapi.go ./apis/apps/pub/openapi_generated.go +cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1alpha1/zz_generated.openapi.go ./apis/apps/v1alpha1/openapi_generated.go +cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1beta1/zz_generated.openapi.go ./apis/apps/v1beta1/openapi_generated.go -cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/pub/openapi_generated.go ./apis/apps/pub -cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1alpha1/openapi_generated.go ./apis/apps/v1alpha1 -cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1beta1/openapi_generated.go ./apis/apps/v1beta1 +#cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/pub/openapi_generated.go ./apis/apps/pub +#cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1alpha1/openapi_generated.go ./apis/apps/v1alpha1 +#cp -f "${TMP_DIR}"/src/github.com/openkruise/kruise/apis/apps/v1beta1/openapi_generated.go ./apis/apps/v1beta1 rm -rf vendor diff --git a/test/e2e/apps/cloneset.go b/test/e2e/apps/cloneset.go index ad06800b87..3d43480f61 100644 --- a/test/e2e/apps/cloneset.go +++ b/test/e2e/apps/cloneset.go @@ -796,7 +796,7 @@ var _ = SIGDescribe("CloneSet", func() { ObjectMeta: metav1.ObjectMeta{Name: "data-vol1"}, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Gi")}, }, }, @@ -805,7 +805,7 @@ var _ = SIGDescribe("CloneSet", func() { ObjectMeta: metav1.ObjectMeta{Name: "data-vol2"}, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Gi")}, }, }, @@ -1277,7 +1277,7 @@ func testUpdateVolumeClaimTemplates(tester *framework.CloneSetTester, randStr st ObjectMeta: metav1.ObjectMeta{Name: "data-vol1"}, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Gi")}, }, }, @@ -1286,7 +1286,7 @@ func testUpdateVolumeClaimTemplates(tester *framework.CloneSetTester, randStr st ObjectMeta: metav1.ObjectMeta{Name: "data-vol2"}, Spec: v1.PersistentVolumeClaimSpec{ AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{v1.ResourceStorage: resource.MustParse("1Gi")}, }, }, diff --git a/test/e2e/framework/statefulset_utils.go b/test/e2e/framework/statefulset_utils.go index d57cd0d331..6fa8421d53 100644 --- a/test/e2e/framework/statefulset_utils.go +++ b/test/e2e/framework/statefulset_utils.go @@ -817,7 +817,7 @@ func NewStatefulSetPVC(name string) v1.PersistentVolumeClaim { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: *resource.NewQuantity(1, resource.BinarySI), }, diff --git a/test/e2e/policy/deletionprotection.go b/test/e2e/policy/deletionprotection.go index 9e0f2f1975..6c2e096b9a 100644 --- a/test/e2e/policy/deletionprotection.go +++ b/test/e2e/policy/deletionprotection.go @@ -23,10 +23,6 @@ import ( "github.com/onsi/ginkgo" "github.com/onsi/gomega" - appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" - policyv1alpha1 "github.com/openkruise/kruise/apis/policy/v1alpha1" - kruiseclientset "github.com/openkruise/kruise/pkg/client/clientset/versioned" - "github.com/openkruise/kruise/test/e2e/framework" apps "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" networkingv1 "k8s.io/api/networking/v1" @@ -43,6 +39,11 @@ import ( "k8s.io/client-go/dynamic" clientset "k8s.io/client-go/kubernetes" utilpointer "k8s.io/utils/pointer" + + appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1" + policyv1alpha1 "github.com/openkruise/kruise/apis/policy/v1alpha1" + kruiseclientset "github.com/openkruise/kruise/pkg/client/clientset/versioned" + "github.com/openkruise/kruise/test/e2e/framework" ) const ( @@ -134,7 +135,7 @@ var _ = SIGDescribe("DeletionProtection", func() { AccessModes: []v1.PersistentVolumeAccessMode{ v1.ReadWriteOnce, }, - Resources: v1.ResourceRequirements{ + Resources: v1.VolumeResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceStorage: resource.MustParse("50Mi"), }, diff --git a/tools/hack/install-kruise.sh b/tools/hack/install-kruise.sh index 64133bbb96..f406285d19 100755 --- a/tools/hack/install-kruise.sh +++ b/tools/hack/install-kruise.sh @@ -16,8 +16,26 @@ set -ex readonly IMAGE="$1" +USE_GOPROXY=false -export GOPROXY=https://mirrors.aliyun.com/goproxy/ +while [[ $# -gt 1 ]]; do + key="$2" + case $key in + --use-goproxy) + USE_GOPROXY=true + shift # past argument + ;; + *) + echo "Unknown parameter passed: $key" + exit 1 + ;; + esac + shift # past value +done + +if [ "$USE_GOPROXY" = true ]; then + export GOPROXY=https://mirrors.aliyun.com/goproxy/ +fi kubectl cluster-info @@ -27,7 +45,7 @@ NODES=$(kubectl get node | wc -l) for ((i=1;i<10;i++)); do set +e - PODS=$(kubectl get pod -n kruise-system | grep -c '1/1') + PODS=$(kubectl get pod -n kruise-system | grep -c '1/1'| wc -l) set -e if [ "$PODS" -eq "$NODES" ]; then break @@ -35,7 +53,7 @@ do sleep 3 done set +e -PODS=$(kubectl get pod -n kruise-system | grep -c '1/1') +PODS=$(kubectl get pod -n kruise-system | grep -c '1/1'| wc -l) kubectl get node -o yaml kubectl get all -n kruise-system -o yaml kubectl get pod -n kruise-system --no-headers | grep daemon | awk '{print $1}' | xargs kubectl logs -n kruise-system @@ -46,4 +64,4 @@ if [ "$PODS" -eq "$NODES" ]; then else echo "Timeout to wait for kruise-manager and kruise-daemon ready" exit 1 -fi \ No newline at end of file +fi diff --git a/tools/hack/run-kruise-e2e-test.sh b/tools/hack/run-kruise-e2e-test.sh index 1baeafa8ff..02788f9c63 100755 --- a/tools/hack/run-kruise-e2e-test.sh +++ b/tools/hack/run-kruise-e2e-test.sh @@ -13,14 +13,65 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -ex +set -e +# default value +FOCUS_DEFAULT='\[apps\] StatefulSet' +FOCUS=${FOCUS_DEFAULT} +SKIP="" +TIMEOUT="60m" +PRINT_INFO=false -export KUBECONFIG=${HOME}/.kube/config +while [[ $# -gt 0 ]]; do + key="$1" + case $key in + --focus) + FOCUS="$2" + shift # past argument + shift # past value + ;; + --skip) + if [ -z "$SKIP" ]; then + SKIP="$2" + else + SKIP="$SKIP|$2" + fi + shift # past argument + shift # past value + ;; + --timeout) + TIMEOUT="$2" + shift # past argument + shift # past value + ;; + --print-info) + PRINT_INFO=true + shift # past argument + ;; + *) + echo "Unknown parameter passed: $1" + exit 1 + ;; + esac +done + +config=${KUBECONFIG:-${HOME}/.kube/config} +export KUBECONFIG=${config} make ginkgo -set +e echo "installing tfjobs crds" kubectl apply -f https://raw.githubusercontent.com/kubeflow/training-operator/refs/heads/v1.8-branch/manifests/base/crds/kubeflow.org_tfjobs.yaml -./bin/ginkgo -p -timeout 60m -v --focus='\[apps\] StatefulSet' test/e2e + +set +e +set -x +GINKGO_CMD="./bin/ginkgo -p -timeout $TIMEOUT -v" +if [ -n "$FOCUS" ]; then + GINKGO_CMD+=" --focus='$FOCUS'" +fi +if [ -n "$SKIP" ]; then + GINKGO_CMD+=" --skip='$SKIP'" +fi +GINKGO_CMD+=" test/e2e" + +bash -c "$GINKGO_CMD" retVal=$? restartCount=$(kubectl get pod -n kruise-system -l control-plane=controller-manager --no-headers | awk '{print $4}') if [ "${restartCount}" -eq "0" ];then @@ -31,4 +82,31 @@ else kubectl get pod -n kruise-system --no-headers -l control-plane=controller-manager | awk '{print $1}' | xargs kubectl logs -p -n kruise-system exit 1 fi -exit $retVal \ No newline at end of file + +kubectl get pods -n kruise-system -l control-plane=daemon -o=jsonpath="{range .items[*]}{.metadata.namespace}{\"\t\"}{.metadata.name}{\"\n\"}{end}" | while read ns name; +do + restartCount=$(kubectl get pod -n ${ns} ${name} --no-headers | awk '{print $4}') + if [ "${restartCount}" -eq "0" ];then + echo "Kruise-daemon has not restarted" + else + kubectl get pods -n ${ns} -l control-plane=daemon --no-headers + echo "Kruise-daemon has restarted, abort!!!" + kubectl logs -p -n ${ns} ${name} + exit 1 + fi +done + +if [ "$PRINT_INFO" = true ]; then + if [ "$retVal" -ne 0 ];then + echo "test fail, dump kruise-manager logs" + while read pod; do + kubectl logs -n kruise-system $pod + done < <(kubectl get pods -n kruise-system -l control-plane=controller-manager --no-headers | awk '{print $1}') + echo "test fail, dump kruise-daemon logs" + while read pod; do + kubectl logs -n kruise-system $pod + done < <(kubectl get pods -n kruise-system -l control-plane=daemon --no-headers | awk '{print $1}') + fi +fi + +exit $retVal