This is an automated email from the ASF dual-hosted git repository.
ccondit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/master by this push:
new 0cf3c810 [YUNIKORN-2996] Build against Kubernetes 1.32.2 (#953)
0cf3c810 is described below
commit 0cf3c8104b6e50998e0fe63c3d256333accc0168
Author: Craig Condit <[email protected]>
AuthorDate: Tue Mar 4 14:14:43 2025 -0600
[YUNIKORN-2996] Build against Kubernetes 1.32.2 (#953)
Closes: #953
---
.github/workflows/pre-commit.yml | 8 +-
Makefile | 6 +-
go.mod | 173 ++++++------
go.sum | 309 ++++++++--------------
pkg/admission/webhook_manager_test.go | 280 +++++---------------
pkg/cache/context.go | 13 +
pkg/cache/external/scheduler_cache.go | 2 +-
pkg/cache/task.go | 16 +-
pkg/client/apifactory.go | 9 +-
pkg/client/apifactory_mock.go | 2 +-
pkg/client/apifactory_test.go | 3 +-
pkg/client/clients.go | 55 ++--
pkg/client/clients_test.go | 19 +-
pkg/common/resource_test.go | 2 +-
pkg/common/test/volumeattachment_informer_mock.go | 45 ++++
pkg/common/test/volumeattachment_lister_mock.go | 57 ++++
pkg/plugin/predicates/predicate_manager.go | 32 ++-
pkg/plugin/predicates/predicate_manager_test.go | 4 +-
pkg/plugin/scheduler_plugin.go | 6 +-
pkg/plugin/support/framework_handle.go | 11 +
scripts/run-e2e-tests.sh | 10 +-
21 files changed, 478 insertions(+), 584 deletions(-)
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 969ade87..0dbbbb1c 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -49,10 +49,10 @@ jobs:
matrix:
k8s:
[
- v1.32.0,
- v1.31.4,
- v1.30.6,
- v1.29.10,
+ v1.32.2,
+ v1.31.6,
+ v1.30.10,
+ v1.29.14,
v1.28.15,
v1.27.16,
v1.26.15,
diff --git a/Makefile b/Makefile
index b3577bc4..f73963cb 100644
--- a/Makefile
+++ b/Makefile
@@ -71,7 +71,7 @@ export PATH := $(BASE_DIR)/$(TOOLS_DIR):$(GO_EXE_PATH):$(PATH)
# Default values for dev cluster
ifeq ($(K8S_VERSION),)
-K8S_VERSION := v1.32.0
+K8S_VERSION := v1.32.2
endif
ifeq ($(CLUSTER_NAME),)
CLUSTER_NAME := yk8s
@@ -177,7 +177,7 @@ KUBECTL_BIN=$(KUBECTL_PATH)/kubectl
export PATH := $(BASE_DIR)/$(KUBECTL_PATH):$(PATH)
# kind
-KIND_VERSION=v0.25.0
+KIND_VERSION=v0.27.0
KIND_PATH=$(TOOLS_DIR)/kind-$(KIND_VERSION)
KIND_BIN=$(KIND_PATH)/kind
export PATH := $(BASE_DIR)/$(KIND_PATH):$(PATH)
@@ -206,7 +206,7 @@ GO_LICENSES_BIN=$(GO_LICENSES_PATH)/go-licenses
export PATH := $(BASE_DIR)/$(GO_LICENSES_PATH):$(PATH)
# ginkgo
-GINKGO_VERSION=v2.19.0
+GINKGO_VERSION=v2.21.0
GINKGO_PATH=$(TOOLS_DIR)/ginkgo-$(GINKGO_VERSION)
GINKGO_BIN=$(GINKGO_PATH)/ginkgo
export PATH := $(BASE_DIR)/$(GINKGO_PATH):$(PATH)
diff --git a/go.mod b/go.mod
index dea7adf5..03637e45 100644
--- a/go.mod
+++ b/go.mod
@@ -18,36 +18,38 @@
module github.com/apache/yunikorn-k8shim
-go 1.22.0
+go 1.23.0
-toolchain go1.22.5
+toolchain go1.23.6
require (
- github.com/apache/yunikorn-core v0.0.0-20241114184223-ac32595a9712
+ github.com/apache/yunikorn-core v0.0.0-20250303172658-9eee423b3df0
github.com/apache/yunikorn-scheduler-interface
v0.0.0-20241016105739-f0e241aa0146
github.com/google/go-cmp v0.6.0
github.com/google/uuid v1.6.0
github.com/looplab/fsm v1.0.1
- github.com/onsi/ginkgo/v2 v2.19.0
- github.com/onsi/gomega v1.33.1
+ github.com/onsi/ginkgo/v2 v2.21.0
+ github.com/onsi/gomega v1.35.1
github.com/prometheus/client_golang v1.19.1
github.com/sasha-s/go-deadlock v0.3.5
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
gopkg.in/yaml.v3 v3.0.1
gotest.tools/v3 v3.5.1
- k8s.io/api v0.31.0
- k8s.io/apimachinery v0.31.0
- k8s.io/cli-runtime v0.31.0
- k8s.io/client-go v0.31.0
- k8s.io/component-base v0.31.0
+ k8s.io/api v0.32.2
+ k8s.io/apimachinery v0.32.2
+ k8s.io/cli-runtime v0.32.2
+ k8s.io/client-go v0.32.2
+ k8s.io/component-base v0.32.2
+ k8s.io/component-helpers v0.32.2
k8s.io/klog/v2 v2.130.1
- k8s.io/kube-scheduler v0.31.0
- k8s.io/kubectl v0.31.0
- k8s.io/kubernetes v1.31.0
+ k8s.io/kube-scheduler v0.32.2
+ k8s.io/kubectl v0.32.2
+ k8s.io/kubernetes v1.32.2
)
require (
- github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 //
indirect
+ cel.dev/expr v0.18.0 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 //
indirect
github.com/NYTimes/gziphandler v1.1.1 // indirect
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a //
indirect
@@ -58,7 +60,7 @@ require (
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc //
indirect
- github.com/distribution/reference v0.5.0 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
@@ -66,33 +68,29 @@ require (
github.com/go-errors/errors v1.4.2 // 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/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
+ github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
- github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da //
indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.2 // indirect
- github.com/google/cel-go v0.20.1 // indirect
+ github.com/google/cel-go v0.22.0 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af // indirect
+ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
- github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc //
indirect
+ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 //
indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
- github.com/imdario/mergo v0.3.7 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de //
indirect
github.com/mailru/easyjson v0.7.7 // indirect
- github.com/moby/spdystream v0.4.0 // indirect
- github.com/moby/sys/mountinfo v0.7.1 // indirect
+ github.com/moby/spdystream v0.5.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd //
indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -100,24 +98,20 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 //
indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f //
indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/runc v1.1.14 // indirect
- github.com/opencontainers/runtime-spec
v1.0.3-0.20220909204839-494a5a6aca78 // indirect
- github.com/opencontainers/selinux v1.11.0 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 //
indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
- github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/cobra v1.8.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/stoewer/go-strcase v1.2.0 // indirect
+ github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
- go.etcd.io/etcd/api/v3 v3.5.14 // indirect
- go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect
- go.etcd.io/etcd/client/v3 v3.5.14 // indirect
+ go.etcd.io/etcd/api/v3 v3.5.16 // indirect
+ go.etcd.io/etcd/client/pkg/v3 v3.5.16 // indirect
+ go.etcd.io/etcd/client/v3 v3.5.16 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
v0.53.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0
// indirect
go.opentelemetry.io/otel v1.28.0 // indirect
@@ -127,43 +121,39 @@ require (
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
- go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.31.0 // indirect
- golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8 // indirect
+ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/net v0.33.0 // indirect
- golang.org/x/oauth2 v0.21.0 // indirect
+ golang.org/x/oauth2 v0.23.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/term v0.27.0 // indirect
golang.org/x/text v0.21.0 // indirect
- golang.org/x/time v0.5.0 // indirect
- golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
- google.golang.org/genproto/googleapis/api
v0.0.0-20240528184218-531527333157 // indirect
- google.golang.org/genproto/googleapis/rpc
v0.0.0-20240701130421-f6361c86f094 // indirect
+ golang.org/x/time v0.7.0 // indirect
+ golang.org/x/tools v0.26.0 // indirect
+ google.golang.org/genproto/googleapis/api
v0.0.0-20240826202546-f6391c0de4c7 // indirect
+ google.golang.org/genproto/googleapis/rpc
v0.0.0-20240826202546-f6391c0de4c7 // indirect
google.golang.org/grpc v1.65.0 // indirect
- google.golang.org/protobuf v1.34.2 // indirect
+ google.golang.org/protobuf v1.35.1 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/apiextensions-apiserver v0.0.0 // indirect
- k8s.io/apiserver v0.31.0 // indirect
- k8s.io/cloud-provider v0.31.0 // indirect
- k8s.io/component-helpers v0.31.0 // indirect
- k8s.io/controller-manager v0.31.0 // indirect
- k8s.io/csi-translation-lib v0.31.0 // indirect
- k8s.io/dynamic-resource-allocation v0.31.0 // indirect
- k8s.io/kms v0.31.0 // indirect
- k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
- k8s.io/kubelet v0.31.0 // indirect
- k8s.io/mount-utils v0.31.0 // indirect
- k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
- sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 //
indirect
- sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/kustomize/api v0.17.2 // indirect
- sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ k8s.io/apiserver v0.32.2 // indirect
+ k8s.io/cloud-provider v0.32.2 // indirect
+ k8s.io/controller-manager v0.32.2 // indirect
+ k8s.io/csi-translation-lib v0.32.2 // indirect
+ k8s.io/dynamic-resource-allocation v0.32.2 // indirect
+ k8s.io/kms v0.32.2 // indirect
+ k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
+ k8s.io/kubelet v0.32.2 // indirect
+ k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
+ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 //
indirect
+ sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
+ sigs.k8s.io/kustomize/api v0.18.0 // indirect
+ sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
@@ -171,37 +161,38 @@ replace (
golang.org/x/crypto => golang.org/x/crypto v0.31.0
golang.org/x/lint => golang.org/x/lint
v0.0.0-20210508222113-6edffad5e616
golang.org/x/net => golang.org/x/net v0.33.0
- golang.org/x/sys => golang.org/x/sys v0.24.0
+ golang.org/x/sys => golang.org/x/sys v0.28.0
golang.org/x/text => golang.org/x/text v0.17.0
- golang.org/x/tools => golang.org/x/tools v0.24.0
- k8s.io/api => k8s.io/api v0.31.0
- k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.31.0
- k8s.io/apimachinery => k8s.io/apimachinery v0.31.0
- k8s.io/apiserver => k8s.io/apiserver v0.31.0
- k8s.io/cli-runtime => k8s.io/cli-runtime v0.31.0
- k8s.io/client-go => k8s.io/client-go v0.31.0
- k8s.io/cloud-provider => k8s.io/cloud-provider v0.31.0
- k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.0
- k8s.io/code-generator => k8s.io/code-generator v0.31.0
- k8s.io/component-base => k8s.io/component-base v0.31.0
- k8s.io/component-helpers => k8s.io/component-helpers v0.31.0
- k8s.io/controller-manager => k8s.io/controller-manager v0.31.0
- k8s.io/cri-api => k8s.io/cri-api v0.31.0
- k8s.io/cri-client => k8s.io/cri-client v0.31.0
- k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.31.0
- k8s.io/dynamic-resource-allocation =>
k8s.io/dynamic-resource-allocation v0.31.0
- k8s.io/endpointslice => k8s.io/endpointslice v0.31.0
- k8s.io/klog/v2 => k8s.io/klog/v2 v2.110.1
- k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.0
- k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.0
- k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.0
- k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.0
- k8s.io/kubectl => k8s.io/kubectl v0.31.0
- k8s.io/kubelet => k8s.io/kubelet v0.31.0
- k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.31.0
- k8s.io/metrics => k8s.io/metrics v0.31.0
- k8s.io/mount-utils => k8s.io/mount-utils v0.31.0
- k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.31.0
- k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.0
- k8s.io/utils => k8s.io/utils v0.0.0-20230726121419-3b25d923346b
+ golang.org/x/tools => golang.org/x/tools v0.26.0
+ k8s.io/api => k8s.io/api v0.32.2
+ k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.32.2
+ k8s.io/apimachinery => k8s.io/apimachinery v0.32.2
+ k8s.io/apiserver => k8s.io/apiserver v0.32.2
+ k8s.io/cli-runtime => k8s.io/cli-runtime v0.32.2
+ k8s.io/client-go => k8s.io/client-go v0.32.2
+ k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.2
+ k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.32.2
+ k8s.io/code-generator => k8s.io/code-generator v0.32.2
+ k8s.io/component-base => k8s.io/component-base v0.32.2
+ k8s.io/component-helpers => k8s.io/component-helpers v0.32.2
+ k8s.io/controller-manager => k8s.io/controller-manager v0.32.2
+ k8s.io/cri-api => k8s.io/cri-api v0.32.2
+ k8s.io/cri-client => k8s.io/cri-client v0.32.2
+ k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.2
+ k8s.io/dynamic-resource-allocation =>
k8s.io/dynamic-resource-allocation v0.32.2
+ k8s.io/endpointslice => k8s.io/endpointslice v0.32.2
+ k8s.io/externaljwt => k8s.io/externaljwt v0.32.2
+ k8s.io/klog/v2 => k8s.io/klog/v2 v2.130.1
+ k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.2
+ k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.2
+ k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.2
+ k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.2
+ k8s.io/kubectl => k8s.io/kubectl v0.32.2
+ k8s.io/kubelet => k8s.io/kubelet v0.32.2
+ k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.32.2
+ k8s.io/metrics => k8s.io/metrics v0.32.2
+ k8s.io/mount-utils => k8s.io/mount-utils v0.32.2
+ k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.2
+ k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.2
+ k8s.io/utils => k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
)
diff --git a/go.sum b/go.sum
index c5628c31..40dec108 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,13 @@
-cloud.google.com/go v0.26.0/go.mod
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1
h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/BurntSushi/toml v0.3.1/go.mod
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/Microsoft/go-winio v0.6.0
h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
-github.com/Microsoft/go-winio v0.6.0/go.mod
h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
+cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo=
+cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
+github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161
h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
+github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/NYTimes/gziphandler v1.1.1
h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
github.com/NYTimes/gziphandler v1.1.1/go.mod
h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/antlr4-go/antlr/v4 v4.13.0
h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod
h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
-github.com/apache/yunikorn-core v0.0.0-20241114184223-ac32595a9712
h1:8o5H/okBLrZjYaSULcXvyK9DsZqLeRoXj4iDCu7rC9I=
-github.com/apache/yunikorn-core v0.0.0-20241114184223-ac32595a9712/go.mod
h1:JA8Uee+D+T9v3p+YznGiGM9cLk5tzX+EM+YYr1TdFYo=
+github.com/apache/yunikorn-core v0.0.0-20250303172658-9eee423b3df0
h1:4D9qPXqlXcixQXycC6U6zyS/1MBOj4jF5iukbsGFD6k=
+github.com/apache/yunikorn-core v0.0.0-20250303172658-9eee423b3df0/go.mod
h1:oO8lhVDD9OcxRTyDtfYrTxI+f4XMTatd/qFI0w8JMpY=
github.com/apache/yunikorn-scheduler-interface
v0.0.0-20241016105739-f0e241aa0146
h1:CZ4U7y19YSxNJVBNox3DahhuoxDL++naBl/kj+kqVFc=
github.com/apache/yunikorn-scheduler-interface
v0.0.0-20241016105739-f0e241aa0146/go.mod
h1:co3uU98sj1CUTPNTM13lTyi+CY0DOgDndDW2KiUjktU=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
@@ -22,13 +20,8 @@ github.com/blang/semver/v4 v4.0.0
h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM
github.com/blang/semver/v4 v4.0.0/go.mod
h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/cenkalti/backoff/v4 v4.3.0
h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod
h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.3.0
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod
h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod
h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod
h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/client9/misspell v0.3.4/go.mod
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
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=
@@ -41,14 +34,12 @@ github.com/davecgh/go-spew v1.1.0/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/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/distribution/reference v0.6.0
h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod
h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
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/go-control-plane
v0.9.1-0.20191026205805-5f8ba28d4473/go.mod
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
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.7.0
h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@@ -58,71 +49,51 @@ github.com/fxamacker/cbor/v2 v2.7.0/go.mod
h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXE
github.com/go-errors/errors v1.4.2
h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-errors/errors v1.4.2/go.mod
h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-logr/logr v1.2.2/go.mod
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0/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.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/jsonpointer v0.21.0
h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
+github.com/go-openapi/jsonpointer v0.21.0/go.mod
h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/jsonreference v0.20.2
h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
github.com/go-openapi/jsonreference v0.20.2/go.mod
h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/swag v0.22.3/go.mod
h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.22.4
h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
-github.com/go-openapi/swag v0.22.4/go.mod
h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
+github.com/go-openapi/swag v0.23.0
h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
+github.com/go-openapi/swag v0.23.0/go.mod
h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-task/slim-sprig/v3 v3.0.0
h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod
h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/godbus/dbus/v5 v5.0.4/go.mod
h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/godbus/dbus/v5 v5.1.0
h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
-github.com/godbus/dbus/v5 v5.1.0/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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-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.1.1/go.mod
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/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=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod
h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod
h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod
h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod
h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
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.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
github.com/google/btree v1.1.2/go.mod
h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
-github.com/google/cel-go v0.20.1
h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
-github.com/google/cel-go v0.20.1/go.mod
h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
+github.com/google/cel-go v0.22.0
h1:b3FJZxpiv1vTMo2/5RDUqAHPxkT8mmMfJIrq1llbf7g=
+github.com/google/cel-go v0.22.0/go.mod
h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8=
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.2.0/go.mod
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9/go.mod
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
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-20240525223248-4bfdf5a9a2af
h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod
h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db
h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod
h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod
h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
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.5.0
h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod
h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc
h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
-github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod
h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
+github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod
h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
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=
@@ -131,12 +102,10 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0
h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod
h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0
h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod
h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
-github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI=
-github.com/imdario/mergo v0.3.7/go.mod
h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/inconshreveable/mousetrap v1.1.0
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jonboulle/clockwork v0.2.2
h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
-github.com/jonboulle/clockwork v0.2.2/go.mod
h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+github.com/jonboulle/clockwork v0.4.0
h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
+github.com/jonboulle/clockwork v0.4.0/go.mod
h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
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=
@@ -158,10 +127,8 @@ github.com/looplab/fsm v1.0.1
h1:OEW0ORrIx095N/6lgoGkFkotqH6s7vaFPsgjLAaF5QU=
github.com/looplab/fsm v1.0.1/go.mod
h1:PmD3fFvQEIsjMEfvZdrCDZ6y8VwKTwWNjlpEr6IKPO4=
github.com/mailru/easyjson v0.7.7
h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod
h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/moby/spdystream v0.4.0
h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8=
-github.com/moby/spdystream v0.4.0/go.mod
h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
-github.com/moby/sys/mountinfo v0.7.1
h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g=
-github.com/moby/sys/mountinfo v0.7.1/go.mod
h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
+github.com/moby/spdystream v0.5.0
h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
+github.com/moby/spdystream v0.5.0/go.mod
h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod
h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -175,18 +142,12 @@ github.com/munnerz/goautoneg
v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
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/onsi/ginkgo/v2 v2.19.0
h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
-github.com/onsi/ginkgo/v2 v2.19.0/go.mod
h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
-github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
-github.com/onsi/gomega v1.33.1/go.mod
h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
+github.com/onsi/ginkgo/v2 v2.21.0
h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
+github.com/onsi/ginkgo/v2 v2.21.0/go.mod
h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
+github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
+github.com/onsi/gomega v1.35.1/go.mod
h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/opencontainers/go-digest v1.0.0
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/runc v1.1.14
h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w=
-github.com/opencontainers/runc v1.1.14/go.mod
h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA=
-github.com/opencontainers/runtime-spec v1.0.3-0.20220909204839-494a5a6aca78
h1:R5M2qXZiK/mWPMT4VldCOiSL9HIAMuxQZWdG0CSM5+4=
-github.com/opencontainers/runtime-spec
v1.0.3-0.20220909204839-494a5a6aca78/go.mod
h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
-github.com/opencontainers/selinux v1.11.0
h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
-github.com/opencontainers/selinux v1.11.0/go.mod
h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
github.com/peterbourgon/diskv v2.0.1+incompatible
h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod
h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7
h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw=
@@ -198,7 +159,6 @@ github.com/pmezard/go-difflib
v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.19.1
h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
github.com/prometheus/client_golang v1.19.1/go.mod
h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.6.1
h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod
h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.55.0
h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
@@ -220,15 +180,14 @@ github.com/spf13/cobra v1.8.1
h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod
h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stoewer/go-strcase v1.2.0
h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
-github.com/stoewer/go-strcase v1.2.0/go.mod
h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
+github.com/stoewer/go-strcase v1.3.0
h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
+github.com/stoewer/go-strcase v1.3.0/go.mod
h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod
h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod
h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.5.1/go.mod
h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod
h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -239,27 +198,27 @@ github.com/tmc/grpc-websocket-proxy
v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod
h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-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/xiang90/probing v0.0.0-20221125231312-a49e3df8f510
h1:S2dVYn90KE98chqDkyE9Z4N61UnQd+KOfgp5Iu53llk=
+github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510/go.mod
h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v1.2.0
h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
github.com/xlab/treeprint v1.2.0/go.mod
h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
github.com/yuin/goldmark v1.4.13/go.mod
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
-go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
-go.etcd.io/etcd/api/v3 v3.5.14 h1:vHObSCxyB9zlF60w7qzAdTcGaglbJOpSj1Xj9+WGxq0=
-go.etcd.io/etcd/api/v3 v3.5.14/go.mod
h1:BmtWcRlQvwa1h3G2jvKYwIQy4PkHlDej5t7uLMUdJUU=
-go.etcd.io/etcd/client/pkg/v3 v3.5.14
h1:SaNH6Y+rVEdxfpA2Jr5wkEvN6Zykme5+YnbCkxvuWxQ=
-go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod
h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSvPjFMunkgeZI=
-go.etcd.io/etcd/client/v2 v2.305.13
h1:RWfV1SX5jTU0lbCvpVQe3iPQeAHETWdOTb6pxhd77C8=
-go.etcd.io/etcd/client/v2 v2.305.13/go.mod
h1:iQnL7fepbiomdXMb3om1rHq96htNNGv2sJkEcZGDRRg=
-go.etcd.io/etcd/client/v3 v3.5.14
h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg=
-go.etcd.io/etcd/client/v3 v3.5.14/go.mod
h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk=
-go.etcd.io/etcd/pkg/v3 v3.5.13 h1:st9bDWNsKkBNpP4PR1MvM/9NqUPfvYZx/YXegsYEH8M=
-go.etcd.io/etcd/pkg/v3 v3.5.13/go.mod
h1:N+4PLrp7agI/Viy+dUYpX7iRtSPvKq+w8Y14d1vX+m0=
-go.etcd.io/etcd/raft/v3 v3.5.13 h1:7r/NKAOups1YnKcfro2RvGGo2PTuizF/xh26Z2CTAzA=
-go.etcd.io/etcd/raft/v3 v3.5.13/go.mod
h1:uUFibGLn2Ksm2URMxN1fICGhk8Wu96EfDQyuLhAcAmw=
-go.etcd.io/etcd/server/v3 v3.5.13
h1:V6KG+yMfMSqWt+lGnhFpP5z5dRUj1BDRJ5k1fQ9DFok=
-go.etcd.io/etcd/server/v3 v3.5.13/go.mod
h1:K/8nbsGupHqmr5MkgaZpLlH1QdX1pcNQLAkODy44XcQ=
+go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0=
+go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I=
+go.etcd.io/etcd/api/v3 v3.5.16 h1:WvmyJVbjWqK4R1E+B12RRHz3bRGy9XVfh++MgbN+6n0=
+go.etcd.io/etcd/api/v3 v3.5.16/go.mod
h1:1P4SlIP/VwkDmGo3OlOD7faPeP8KDIFhqvciH5EfN28=
+go.etcd.io/etcd/client/pkg/v3 v3.5.16
h1:ZgY48uH6UvB+/7R9Yf4x574uCO3jIx0TRDyetSfId3Q=
+go.etcd.io/etcd/client/pkg/v3 v3.5.16/go.mod
h1:V8acl8pcEK0Y2g19YlOV9m9ssUe6MgiDSobSoaBAM0E=
+go.etcd.io/etcd/client/v2 v2.305.16
h1:kQrn9o5czVNaukf2A2At43cE9ZtWauOtf9vRZuiKXow=
+go.etcd.io/etcd/client/v2 v2.305.16/go.mod
h1:h9YxWCzcdvZENbfzBTFCnoNumr2ax3F19sKMqHFmXHE=
+go.etcd.io/etcd/client/v3 v3.5.16
h1:sSmVYOAHeC9doqi0gv7v86oY/BTld0SEFGaxsU9eRhE=
+go.etcd.io/etcd/client/v3 v3.5.16/go.mod
h1:X+rExSGkyqxvu276cr2OwPLBaeqFu1cIl4vmRjAD/50=
+go.etcd.io/etcd/pkg/v3 v3.5.16 h1:cnavs5WSPWeK4TYwPYfmcr3Joz9BH+TZ6qoUtz6/+mc=
+go.etcd.io/etcd/pkg/v3 v3.5.16/go.mod
h1:+lutCZHG5MBBFI/U4eYT5yL7sJfnexsoM20Y0t2uNuY=
+go.etcd.io/etcd/raft/v3 v3.5.16 h1:zBXA3ZUpYs1AwiLGPafYAKKl/CORn/uaxYDwlNwndAk=
+go.etcd.io/etcd/raft/v3 v3.5.16/go.mod
h1:P4UP14AxofMJ/54boWilabqqWoW9eLodl6I5GdGzazI=
+go.etcd.io/etcd/server/v3 v3.5.16
h1:d0/SAdJ3vVsZvF8IFVb1k8zqMZ+heGcNfft71ul9GWE=
+go.etcd.io/etcd/server/v3 v3.5.16/go.mod
h1:ynhyZZpdDp1Gq49jkUg5mfkDWZwXnn3eIqCqtJnrD/s=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0
h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA=
@@ -278,72 +237,46 @@ go.opentelemetry.io/otel/trace v1.28.0
h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+
go.opentelemetry.io/otel/trace v1.28.0/go.mod
h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
go.opentelemetry.io/proto/otlp v1.3.1
h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
go.opentelemetry.io/proto/otlp v1.3.1/go.mod
h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
-go.starlark.net v0.0.0-20230525235612-a134d8f9ddca
h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY=
-go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod
h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
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.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.31.0/go.mod
h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8
h1:ESSUROHIBHg7USnszlcdmjBEwdMj9VUvU+OPk4yl2mc=
-golang.org/x/exp v0.0.0-20240409090435-93d18d7e34b8/go.mod
h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod
h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
+golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod
h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
-golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
-golang.org/x/oauth2 v0.21.0/go.mod
h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
+golang.org/x/oauth2 v0.23.0/go.mod
h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
-golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
+golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod
h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
-golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/term v0.27.0/go.mod
h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
golang.org/x/text v0.17.0/go.mod
h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
-golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
-golang.org/x/tools v0.24.0/go.mod
h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d
h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY=
-google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod
h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
-google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157
h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw=
-google.golang.org/genproto/googleapis/api
v0.0.0-20240528184218-531527333157/go.mod
h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094
h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA=
-google.golang.org/genproto/googleapis/rpc
v0.0.0-20240701130421-f6361c86f094/go.mod
h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
-google.golang.org/grpc v1.19.0/go.mod
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.27.0/go.mod
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
+golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
+golang.org/x/tools v0.26.0/go.mod
h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80
h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod
h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
+google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7
h1:YcyjlL1PRr2Q17/I0dPk2JmYS5CDXfcdb2Z3YRioEbw=
+google.golang.org/genproto/googleapis/api
v0.0.0-20240826202546-f6391c0de4c7/go.mod
h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7
h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs=
+google.golang.org/genproto/googleapis/rpc
v0.0.0-20240826202546-f6391c0de4c7/go.mod
h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
google.golang.org/grpc v1.65.0/go.mod
h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod
h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod
h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod
h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.34.2
h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
-google.golang.org/protobuf v1.34.2/go.mod
h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+google.golang.org/protobuf v1.35.1
h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
+google.golang.org/protobuf v1.35.1/go.mod
h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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=
@@ -353,68 +286,60 @@ gopkg.in/inf.v0 v0.9.1
h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/natefinch/lumberjack.v2 v2.2.1
h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod
h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-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=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo=
-k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE=
-k8s.io/apiextensions-apiserver v0.31.0
h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk=
-k8s.io/apiextensions-apiserver v0.31.0/go.mod
h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk=
-k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc=
-k8s.io/apimachinery v0.31.0/go.mod
h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
-k8s.io/apiserver v0.31.0 h1:p+2dgJjy+bk+B1Csz+mc2wl5gHwvNkC9QJV+w55LVrY=
-k8s.io/apiserver v0.31.0/go.mod h1:KI9ox5Yu902iBnnyMmy7ajonhKnkeZYJhTZ/YI+WEMk=
-k8s.io/cli-runtime v0.31.0 h1:V2Q1gj1u3/WfhD475HBQrIYsoryg/LrhhK4RwpN+DhA=
-k8s.io/cli-runtime v0.31.0/go.mod
h1:vg3H94wsubuvWfSmStDbekvbla5vFGC+zLWqcf+bGDw=
-k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8=
-k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU=
-k8s.io/cloud-provider v0.31.0 h1:qNOs78I2/7zQmyStfDtY2M7EdilUl9fCSYMcqBju/tA=
-k8s.io/cloud-provider v0.31.0/go.mod
h1:QgUPqLoL6aXhLlrNg1U4IrJk/PvvxgeOnT2ixkgnqT0=
-k8s.io/component-base v0.31.0 h1:/KIzGM5EvPNQcYgwq5NwoQBaOlVFrghoVGr8lG6vNRs=
-k8s.io/component-base v0.31.0/go.mod
h1:TYVuzI1QmN4L5ItVdMSXKvH7/DtvIuas5/mm8YT3rTo=
-k8s.io/component-helpers v0.31.0
h1:jyRUKA+GX+q19o81k4x94imjNICn+e6Gzi6T89va1/A=
-k8s.io/component-helpers v0.31.0/go.mod
h1:MrNIvT4iB7wXIseYSWfHUJB/aNUiFvbilp4qDfBQi6s=
-k8s.io/controller-manager v0.31.0
h1:OmM0JfkzMvNXGbKIInj8SOrqIHLW4ymDGaNaa4KqyGc=
-k8s.io/controller-manager v0.31.0/go.mod
h1:slaIzbI1ecqVphjSuHwlzJQ2pclSwtjUzTEQ6fYAB8A=
-k8s.io/csi-translation-lib v0.31.0
h1:5aCBPyFScdhfcWCUj0KDMAi/lDhxK99DF4XcfSnmH1A=
-k8s.io/csi-translation-lib v0.31.0/go.mod
h1:CM3U0vDm4jfuQpjKkqlJdRDqmAEcLQPm7aoJFjYf668=
-k8s.io/dynamic-resource-allocation v0.31.0
h1:zUzbI2d1uUZNleW77L5KQlPWVqHmX6hBsoJvx8AIHUg=
-k8s.io/dynamic-resource-allocation v0.31.0/go.mod
h1:eDK+MyEeE2m6vihsw7S75lPYr1NkDV3NP6ixm7WvO/0=
-k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
-k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
-k8s.io/kms v0.31.0 h1:KchILPfB1ZE+ka7223mpU5zeFNkmb45jl7RHnlImUaI=
-k8s.io/kms v0.31.0/go.mod h1:OZKwl1fan3n3N5FFxnW5C4V3ygrah/3YXeJWS3O6+94=
-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.31.0 h1:5ij/3AwAWGIFgyOtNheZVvj6fl3wzQTHGpnr6s2Ub/w=
-k8s.io/kube-scheduler v0.31.0/go.mod
h1:QEUZLddwPemiI+No23wF35D7pjkL++mS4ZhBPyG55KU=
-k8s.io/kubectl v0.31.0 h1:kANwAAPVY02r4U4jARP/C+Q1sssCcN/1p9Nk+7BQKVg=
-k8s.io/kubectl v0.31.0/go.mod h1:pB47hhFypGsaHAPjlwrNbvhXgmuAr01ZBvAIIUaI8d4=
-k8s.io/kubelet v0.31.0 h1:IlfkBy7QTojGEm97GuVGhtli0HL/Pgu4AdayiF76yWo=
-k8s.io/kubelet v0.31.0/go.mod h1:s+OnqnfdIh14PFpUb7NgzM53WSYXcczA3w/1qSzsRc8=
-k8s.io/kubernetes v1.31.0 h1:sYAB12TTWexXKp4RxqJMm/7EC+P0mNOgn4Xdj5eu7HM=
-k8s.io/kubernetes v1.31.0/go.mod
h1:UTpGn7nxrUrPWw5hNIYTAjodcWIvLakgHpLtfrr6GC8=
-k8s.io/mount-utils v0.31.0 h1:o+a+n6gyZ7MGc6bIERU3LeFTHbLDBiVReaDpWlJotUE=
-k8s.io/mount-utils v0.31.0/go.mod
h1:HV/VYBUGqYUj4vt82YltzpWvgv8FPg0G9ItyInT3NPU=
-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.30.3
h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY=
-sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod
h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
-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/kustomize/api v0.17.2
h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g=
-sigs.k8s.io/kustomize/api v0.17.2/go.mod
h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0=
-sigs.k8s.io/kustomize/kyaml v0.17.1
h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ=
-sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod
h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1
h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod
h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
+k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
+k8s.io/apiextensions-apiserver v0.32.2
h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4=
+k8s.io/apiextensions-apiserver v0.32.2/go.mod
h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA=
+k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
+k8s.io/apimachinery v0.32.2/go.mod
h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
+k8s.io/apiserver v0.32.2 h1:WzyxAu4mvLkQxwD9hGa4ZfExo3yZZaYzoYvvVDlM6vw=
+k8s.io/apiserver v0.32.2/go.mod h1:PEwREHiHNU2oFdte7BjzA1ZyjWjuckORLIK/wLV5goM=
+k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks=
+k8s.io/cli-runtime v0.32.2/go.mod
h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8=
+k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
+k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
+k8s.io/cloud-provider v0.32.2 h1:8EC+fCYo0r0REczSjOZcVuQPCMxXxCKlgxDbYMrzC30=
+k8s.io/cloud-provider v0.32.2/go.mod
h1:2s8TeAXhVezp5VISaTxM6vW3yDonOZXoN4Aryz1p1PQ=
+k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU=
+k8s.io/component-base v0.32.2/go.mod
h1:PXJ61Vx9Lg+P5mS8TLd7bCIr+eMJRQTyXe8KvkrvJq0=
+k8s.io/component-helpers v0.32.2
h1:2usSAm3zNE5yu5DdAdrKBWLfSYNpU4OPjZywJY5ovP8=
+k8s.io/component-helpers v0.32.2/go.mod
h1:fvQAoiiOP7jUEUBc9qR0PXiBPuB0I56WTxTkkpcI8g8=
+k8s.io/controller-manager v0.32.2
h1:/9XuHWEqofO2Aqa4l7KJGckJUcLVRWfx+qnVkdXoStI=
+k8s.io/controller-manager v0.32.2/go.mod
h1:o5uo2tLCQhuoMt0RfKcQd0eqaNmSKOKiT+0YELCqXOk=
+k8s.io/csi-translation-lib v0.32.2
h1:aLzAyaoJUc5rgtLi8Xd4No1tet6UpvUsGIgRoGnPSSE=
+k8s.io/csi-translation-lib v0.32.2/go.mod
h1:PlOKan6Vc0G6a+giQbm36plJ+E1LH+GPRLAVMQMSMcY=
+k8s.io/dynamic-resource-allocation v0.32.2
h1:6wP8/GGvhhvTJLrzwPSoMJDnspmosFj1CKmfrAH6m5U=
+k8s.io/dynamic-resource-allocation v0.32.2/go.mod
h1:+3qnQfvikLHVZrdZ0/gYkRiV96weUR9j7+Ph3Ui/hYU=
+k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
+k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kms v0.32.2 h1:7Ff23ht7W40gTcDwUC8G5WjX5W/nxD8WxbNhIYYNZCI=
+k8s.io/kms v0.32.2/go.mod h1:Bk2evz/Yvk0oVrvm4MvZbgq8BD34Ksxs2SRHn4/UiOM=
+k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f
h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
+k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod
h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
+k8s.io/kube-scheduler v0.32.2 h1:vBm6iIjWaD10OPmtkt/503LTKvrN8dWVceeBcpKj/ns=
+k8s.io/kube-scheduler v0.32.2/go.mod
h1:dD5yuYpnsCfgZmzvncUNPdvXGJXA1hw3gXq7DH3+aCQ=
+k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
+k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
+k8s.io/kubelet v0.32.2 h1:WFTSYdt3BB1aTApDuKNI16x/4MYqqX8WBBBBh3KupDg=
+k8s.io/kubelet v0.32.2/go.mod h1:cC1ms5RS+lu0ckVr6AviCQXHLSPKEBC3D5oaCBdTGkI=
+k8s.io/kubernetes v1.32.2 h1:mShetlA102UpjRVSGzB+5vjJwy8oPy8FMWrkTH5f37o=
+k8s.io/kubernetes v1.32.2/go.mod
h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0
h1:CPT0ExVicCzcpeN4baWEV2ko2Z/AsiZgEdwgcfwLgMo=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod
h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3
h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod
h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
+sigs.k8s.io/kustomize/api v0.18.0
h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo=
+sigs.k8s.io/kustomize/api v0.18.0/go.mod
h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U=
+sigs.k8s.io/kustomize/kyaml v0.18.1
h1:WvBo56Wzw3fjS+7vBjN6TeivvpbW9GmRaWZ9CIVmt4E=
+sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod
h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW5FT9FcjYo=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.2
h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod
h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/pkg/admission/webhook_manager_test.go
b/pkg/admission/webhook_manager_test.go
index d832f3b3..649033ee 100644
--- a/pkg/admission/webhook_manager_test.go
+++ b/pkg/admission/webhook_manager_test.go
@@ -23,7 +23,6 @@ import (
"crypto/rsa"
"crypto/x509"
"fmt"
- "net/http"
"sync"
"testing"
"time"
@@ -31,14 +30,9 @@ import (
"gotest.tools/v3/assert"
arv1 "k8s.io/api/admissionregistration/v1"
v1 "k8s.io/api/core/v1"
- apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
- admissionregistrationv1
"k8s.io/client-go/kubernetes/typed/admissionregistration/v1"
- fakeadmissionregistrationv1
"k8s.io/client-go/kubernetes/typed/admissionregistration/v1/fake"
- corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
- fakecorev1 "k8s.io/client-go/kubernetes/typed/core/v1/fake"
"github.com/apache/yunikorn-k8shim/pkg/admission/pki"
)
@@ -70,40 +64,42 @@ func testSetupOnce(t *testing.T) {
func TestLoadCACertificatesWhereValid(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
- secret := createSecret()
+ spec := createSecret()
+ secret, err :=
clientset.CoreV1().Secrets(spec.Namespace).Create(context.Background(), spec,
metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to create secret")
addCert(t, secret, cacert1, cakey1, 1)
addCert(t, secret, cacert2, cakey2, 2)
- clientset.secrets["default/admission-controller-secrets"] = secret
wm := newWebhookManagerImpl(createConfig(), clientset)
- err := wm.LoadCACertificates()
+ err = wm.LoadCACertificates()
assert.NilError(t, err, "failed to load CA certificates")
}
func TestLoadCACertificatesWithMissingSecret(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := newWebhookManagerImpl(createConfig(), clientset)
err := wm.LoadCACertificates()
- assert.ErrorContains(t, err, string(metav1.StatusReasonNotFound), "get
secrets didn't fail")
+ assert.ErrorContains(t, err, "not found", "get secrets didn't fail")
}
func TestLoadCACertificatesWithEmptySecret(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
- secret := createSecret()
- clientset.secrets["default/admission-controller-secrets"] = secret
+ spec := createSecret()
+ _, err :=
clientset.CoreV1().Secrets(spec.Namespace).Create(context.Background(), spec,
metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to create secret")
wm := newWebhookManagerImpl(createConfig(), clientset)
- err := wm.LoadCACertificates()
+ err = wm.LoadCACertificates()
assert.NilError(t, err, "failed to load CA certificates")
- secret, ok := clientset.secrets["default/admission-controller-secrets"]
- assert.Assert(t, ok, "secret not found")
- _, ok = secret.Data["cacert1.pem"]
+ secret, err :=
clientset.CoreV1().Secrets("default").Get(context.Background(),
"admission-controller-secrets", metav1.GetOptions{})
+ assert.NilError(t, err, "secret not found")
+ _, ok := secret.Data["cacert1.pem"]
assert.Assert(t, ok, "cacert2.pem not found")
_, ok = secret.Data["cacert2.pem"]
assert.Assert(t, ok, "cacert1.pem not found")
@@ -115,21 +111,22 @@ func TestLoadCACertificatesWithEmptySecret(t *testing.T) {
func TestLoadCACertificatesWithConflict(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
- secret := createSecret()
- secret.ObjectMeta.SetAnnotations(map[string]string{"conflict": "true"})
- clientset.secrets["default/admission-controller-secrets"] = secret
+ spec := createSecret()
+ spec.ObjectMeta.SetAnnotations(map[string]string{"conflict": "true"})
+ _, err :=
clientset.CoreV1().Secrets(spec.Namespace).Create(context.Background(), spec,
metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to create secret")
wm := newWebhookManagerImpl(createConfig(), clientset)
wm.conflictAttempts = 0
- err := wm.LoadCACertificates()
+ err = wm.LoadCACertificates()
assert.ErrorContains(t, err, "max attempts", "update secrets didn't
fail")
}
func TestGenerateServerCertificate(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
cert, err := wm.GenerateServerCertificate()
@@ -147,7 +144,7 @@ func TestGenerateServerCertificate(t *testing.T) {
func TestGenerateServerCertificateWithNoCACertificates(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := newWebhookManagerImpl(createConfig(), clientset)
_, err := wm.GenerateServerCertificate()
@@ -156,7 +153,7 @@ func TestGenerateServerCertificateWithNoCACertificates(t
*testing.T) {
func TestInstallWebhooksWithNoCACertificates(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := newWebhookManagerImpl(createConfig(), clientset)
err := wm.InstallWebhooks()
@@ -165,27 +162,29 @@ func TestInstallWebhooksWithNoCACertificates(t
*testing.T) {
func TestInstallWebhooksWhenAlreadyPresent(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
vh := wm.createEmptyValidatingWebhook()
wm.populateValidatingWebhook(vh, caBundle)
-
clientset.validatingWebhooks["yunikorn-admission-controller-validations"] = vh
+ _, err :=
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Create(context.Background(),
vh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add validating webhook")
mh := wm.createEmptyMutatingWebhook()
wm.populateMutatingWebhook(mh, caBundle)
- clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"] =
mh
+ _, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Create(context.Background(),
mh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add mutating webhook")
- err := wm.InstallWebhooks()
+ err = wm.InstallWebhooks()
assert.NilError(t, err, "Install webhooks failed")
- vh, ok :=
clientset.validatingWebhooks["yunikorn-admission-controller-validations"]
- assert.Assert(t, ok, "validating webhook not found")
+ vh, err =
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-validations", metav1.GetOptions{})
+ assert.NilError(t, err, "validating webhook not found")
err = wm.checkValidatingWebhook(vh)
assert.NilError(t, err, "validating webhook is malformed")
assert.Equal(t, vh.Generation, int64(0), "wrong generation for
validating webhook")
- mh, ok =
clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"]
- assert.Assert(t, ok, "mutating webhook not found")
+ mh, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-mutations", metav1.GetOptions{})
+ assert.NilError(t, err, "mutating webhook not found")
err = wm.checkMutatingWebhook(mh)
assert.NilError(t, err, "mutating webhook is malformed")
assert.Equal(t, mh.Generation, int64(0), "wrong generation for mutating
webhook")
@@ -193,85 +192,89 @@ func TestInstallWebhooksWhenAlreadyPresent(t *testing.T) {
func TestInstallWebhooksWithNoHooksPresent(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
err := wm.InstallWebhooks()
assert.NilError(t, err, "Install webhooks failed")
- vh, ok :=
clientset.validatingWebhooks["yunikorn-admission-controller-validations"]
- assert.Assert(t, ok, "validating webhook not found")
+ vh, err :=
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-validations", metav1.GetOptions{})
+ assert.NilError(t, err, "validating webhook not found")
err = wm.checkValidatingWebhook(vh)
assert.NilError(t, err, "validating webhook is malformed")
- mh, ok :=
clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"]
- assert.Assert(t, ok, "mutating webhook not found")
+ mh, err :=
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-mutations", metav1.GetOptions{})
+ assert.NilError(t, err, "mutating webhook not found")
err = wm.checkMutatingWebhook(mh)
assert.NilError(t, err, "mutating webhook is malformed")
}
func TestInstallWebhooksWithWrongData(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
vh := wm.createEmptyValidatingWebhook()
wm.populateValidatingWebhook(vh, []byte{0})
-
clientset.validatingWebhooks["yunikorn-admission-controller-validations"] = vh
+ _, err :=
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Create(context.Background(),
vh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add validating webhook")
mh := wm.createEmptyMutatingWebhook()
wm.populateMutatingWebhook(mh, []byte{0})
- clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"] =
mh
+ _, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Create(context.Background(),
mh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add mutating webhook")
- err := wm.InstallWebhooks()
+ err = wm.InstallWebhooks()
assert.NilError(t, err, "Install webhooks failed")
- vh, ok :=
clientset.validatingWebhooks["yunikorn-admission-controller-validations"]
- assert.Assert(t, ok, "validating webhook not found")
+ vh, err =
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-validations", metav1.GetOptions{})
+ assert.NilError(t, err, "validating webhook not found")
err = wm.checkValidatingWebhook(vh)
assert.NilError(t, err, "validating webhook is malformed")
- assert.Equal(t, vh.Generation, int64(1), "wrong generation for
validating webhook")
- mh, ok =
clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"]
- assert.Assert(t, ok, "mutating webhook not found")
+ mh, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.Background(),
"yunikorn-admission-controller-mutations", metav1.GetOptions{})
+ assert.NilError(t, err, "mutating webhook not found")
err = wm.checkMutatingWebhook(mh)
assert.NilError(t, err, "mutating webhook is malformed")
- assert.Equal(t, mh.Generation, int64(1), "wrong generation for mutating
webhook")
}
func TestInstallWebhooksWithValidationConflict(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
wm.conflictAttempts = 0
vh := wm.createEmptyValidatingWebhook()
wm.populateValidatingWebhook(vh, []byte{0})
vh.ObjectMeta.SetAnnotations(map[string]string{"conflict": "true"})
-
clientset.validatingWebhooks["yunikorn-admission-controller-validations"] = vh
+ _, err :=
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Create(context.Background(),
vh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add validating webhook")
mh := wm.createEmptyMutatingWebhook()
wm.populateMutatingWebhook(mh, caBundle)
- clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"] =
mh
+ _, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Create(context.Background(),
mh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add mutating webhook")
- err := wm.InstallWebhooks()
+ err = wm.InstallWebhooks()
assert.ErrorContains(t, err, "max attempts", "update webhook didn't
fail")
}
func TestInstallWebhooksWithMutationConflict(t *testing.T) {
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
wm.conflictAttempts = 0
vh := wm.createEmptyValidatingWebhook()
wm.populateValidatingWebhook(vh, caBundle)
-
clientset.validatingWebhooks["yunikorn-admission-controller-validations"] = vh
+ _, err :=
clientset.AdmissionregistrationV1().ValidatingWebhookConfigurations().Create(context.Background(),
vh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add validating webhook")
mh := wm.createEmptyMutatingWebhook()
wm.populateMutatingWebhook(mh, []byte{0})
mh.ObjectMeta.SetAnnotations(map[string]string{"conflict": "true"})
- clientset.mutatingWebhooks["yunikorn-admission-controller-mutations"] =
mh
+ _, err =
clientset.AdmissionregistrationV1().MutatingWebhookConfigurations().Create(context.Background(),
mh, metav1.CreateOptions{})
+ assert.NilError(t, err, "failed to add mutating webhook")
- err := wm.InstallWebhooks()
+ err = wm.InstallWebhooks()
assert.ErrorContains(t, err, "max attempts", "update webhook didn't
fail")
}
@@ -360,7 +363,7 @@ func TestCheckValidatingWebhook(t *testing.T) {
}
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
for _, c := range cases {
@@ -460,7 +463,7 @@ func TestCheckMutatingWebhook(t *testing.T) {
}
testSetupOnce(t)
- clientset := fakeClientSet()
+ clientset := fake.NewClientset()
wm := createPopulatedWm(clientset)
for _, c := range cases {
@@ -526,160 +529,3 @@ func keyPem(t *testing.T, key *rsa.PrivateKey) []byte {
assert.NilError(t, err, "failed to encode certificate")
return *pem
}
-
-// K8s API mocks
-
-type fakeClient struct {
- fake.Clientset
- secrets map[string]*v1.Secret
- validatingWebhooks map[string]*arv1.ValidatingWebhookConfiguration
- mutatingWebhooks map[string]*arv1.MutatingWebhookConfiguration
-}
-
-type fakeCoreV1 struct {
- fakecorev1.FakeCoreV1
- client *fakeClient
-}
-
-type fakeSecrets struct {
- fakecorev1.FakeSecrets
- core *fakeCoreV1
- ns string
-}
-
-type fakeAdmissionregistrationV1 struct {
- fakeadmissionregistrationv1.FakeAdmissionregistrationV1
- client *fakeClient
-}
-
-type fakeValidatingWebhookConfigurations struct {
- fakeadmissionregistrationv1.FakeValidatingWebhookConfigurations
- ar *fakeAdmissionregistrationV1
-}
-
-type fakeMutatingWebhookConfigurations struct {
- fakeadmissionregistrationv1.FakeMutatingWebhookConfigurations
- ar *fakeAdmissionregistrationV1
-}
-
-func fakeClientSet() *fakeClient {
- return &fakeClient{
- secrets: make(map[string]*v1.Secret),
- validatingWebhooks:
make(map[string]*arv1.ValidatingWebhookConfiguration),
- mutatingWebhooks:
make(map[string]*arv1.MutatingWebhookConfiguration),
- }
-}
-
-func (c *fakeClient) CoreV1() corev1.CoreV1Interface {
- return &fakeCoreV1{client: c}
-}
-
-func (c *fakeCoreV1) Secrets(namespace string) corev1.SecretInterface {
- return &fakeSecrets{core: c, ns: namespace}
-}
-
-func (c *fakeClient) AdmissionregistrationV1()
admissionregistrationv1.AdmissionregistrationV1Interface {
- return &fakeAdmissionregistrationV1{client: c}
-}
-
-func (ar *fakeAdmissionregistrationV1) MutatingWebhookConfigurations()
admissionregistrationv1.MutatingWebhookConfigurationInterface {
- return &fakeMutatingWebhookConfigurations{ar: ar}
-}
-
-func (ar *fakeAdmissionregistrationV1) ValidatingWebhookConfigurations()
admissionregistrationv1.ValidatingWebhookConfigurationInterface {
- return &fakeValidatingWebhookConfigurations{ar: ar}
-}
-
-func (s *fakeSecrets) Get(_ context.Context, name string, _ metav1.GetOptions)
(*v1.Secret, error) {
- secret, ok := s.core.client.secrets[fmt.Sprintf("%s/%s", s.ns, name)]
- if !ok {
- return nil, notFoundErr()
- }
-
- return secret, nil
-}
-
-func (s *fakeSecrets) Update(_ context.Context, secret *v1.Secret, opts
metav1.UpdateOptions) (*v1.Secret, error) {
- existing, ok := s.core.client.secrets[fmt.Sprintf("%s/%s", s.ns,
secret.Name)]
- if !ok || secret.Namespace != s.ns {
- return nil, notFoundErr()
- }
-
- if _, ok := existing.GetAnnotations()["conflict"]; ok {
- return nil, conflictErr()
- }
-
- secret.Generation++
- s.core.client.secrets[fmt.Sprintf("%s/%s", s.ns, secret.Name)] = secret
- return secret, nil
-}
-
-func (c *fakeValidatingWebhookConfigurations) Get(_ context.Context, name
string, _ metav1.GetOptions) (*arv1.ValidatingWebhookConfiguration, error) {
- hook, ok := c.ar.client.validatingWebhooks[name]
- if !ok {
- return nil, notFoundErr()
- }
- return hook, nil
-}
-
-func (c *fakeValidatingWebhookConfigurations) Create(_ context.Context, hook
*arv1.ValidatingWebhookConfiguration, _ metav1.CreateOptions)
(*arv1.ValidatingWebhookConfiguration, error) {
- if _, ok := c.ar.client.validatingWebhooks[hook.Name]; ok {
- return nil, conflictErr()
- }
- c.ar.client.validatingWebhooks[hook.Name] = hook
- return hook, nil
-}
-
-func (c *fakeValidatingWebhookConfigurations) Update(_ context.Context, hook
*arv1.ValidatingWebhookConfiguration, _ metav1.UpdateOptions)
(*arv1.ValidatingWebhookConfiguration, error) {
- existing, ok := c.ar.client.validatingWebhooks[hook.Name]
- if !ok {
- return nil, notFoundErr()
- }
-
- if _, ok := existing.GetAnnotations()["conflict"]; ok {
- return nil, conflictErr()
- }
-
- hook.Generation++
- c.ar.client.validatingWebhooks[hook.Name] = hook
- return hook, nil
-}
-
-func (c *fakeMutatingWebhookConfigurations) Get(_ context.Context, name
string, opts metav1.GetOptions) (*arv1.MutatingWebhookConfiguration, error) {
- hook, ok := c.ar.client.mutatingWebhooks[name]
- if !ok {
- return nil, notFoundErr()
- }
- return hook, nil
-}
-
-func (c *fakeMutatingWebhookConfigurations) Create(_ context.Context, hook
*arv1.MutatingWebhookConfiguration, _ metav1.CreateOptions)
(*arv1.MutatingWebhookConfiguration, error) {
- if _, ok := c.ar.client.mutatingWebhooks[hook.Name]; ok {
- return nil, conflictErr()
- }
- c.ar.client.mutatingWebhooks[hook.Name] = hook
- return hook, nil
-}
-
-func (c *fakeMutatingWebhookConfigurations) Update(_ context.Context, hook
*arv1.MutatingWebhookConfiguration, opts metav1.UpdateOptions)
(*arv1.MutatingWebhookConfiguration, error) {
- existing, ok := c.ar.client.mutatingWebhooks[hook.Name]
- if !ok {
- return nil, notFoundErr()
- }
-
- if _, ok := existing.GetAnnotations()["conflict"]; ok {
- return nil, conflictErr()
- }
-
- hook.Generation++
- c.ar.client.mutatingWebhooks[hook.Name] = hook
- return hook, nil
-}
-
-func notFoundErr() error {
- return &apierrors.StatusError{ErrStatus: metav1.Status{Code:
http.StatusNotFound, Message: string(metav1.StatusReasonNotFound), Reason:
metav1.StatusReasonNotFound}}
-}
-
-func conflictErr() error {
- return &apierrors.StatusError{ErrStatus: metav1.Status{Code:
http.StatusConflict, Message: string(metav1.StatusReasonConflict), Reason:
metav1.StatusReasonConflict}}
-}
diff --git a/pkg/cache/context.go b/pkg/cache/context.go
index ff691194..ca409c10 100644
--- a/pkg/cache/context.go
+++ b/pkg/cache/context.go
@@ -75,6 +75,7 @@ type Context struct {
lock *locking.RWMutex // lock - used not only
for context data but also to ensure that multiple event types are not executed
concurrently
txnID atomic.Uint64 // transaction ID counter
klogger klog.Logger
+ podActivator atomic.Value
}
// NewContext create a new context for the scheduler using a default (empty)
configuration
@@ -111,6 +112,18 @@ func NewContextWithBootstrapConfigMaps(apis
client.APIProvider, bootstrapConfigM
return ctx
}
+// SetPodActivator is used by the plugin mode to add a callback function to
reschedule a pod
+func (ctx *Context) SetPodActivator(podActivator func(logger klog.Logger, pod
*v1.Pod)) {
+ ctx.podActivator.Store(podActivator)
+}
+
+// ActivatePod is used to tell Kubernetes to re-schedule a pod when using
plugin mode
+func (ctx *Context) ActivatePod(pod *v1.Pod) {
+ if activator, ok := ctx.podActivator.Load().(func(logger klog.Logger,
pod *v1.Pod)); ok && activator != nil {
+ activator(ctx.klogger, pod)
+ }
+}
+
func (ctx *Context) AddSchedulingEventHandlers() error {
err := ctx.apiProvider.AddEventHandler(&client.ResourceEventHandlers{
Type: client.ConfigMapInformerHandlers,
diff --git a/pkg/cache/external/scheduler_cache.go
b/pkg/cache/external/scheduler_cache.go
index fa4d8675..d2937edf 100644
--- a/pkg/cache/external/scheduler_cache.go
+++ b/pkg/cache/external/scheduler_cache.go
@@ -650,7 +650,7 @@ func (cache *SchedulerCache) GetNodeInfo(nodeName string)
(*v1.Node, error) {
// Implement scheduler/algorithm/predicates/predicates.go#StorageClassInfo
interface
func (cache *SchedulerCache) GetStorageClassInfo(className string)
(*storageV1.StorageClass, error) {
- return cache.clients.StorageInformer.Lister().Get(className)
+ return cache.clients.StorageClassInformer.Lister().Get(className)
}
// Implement
scheduler/algorithm/predicates/predicates.go#PersistentVolumeClaimInfo interface
diff --git a/pkg/cache/task.go b/pkg/cache/task.go
index 8b758b6f..5a3a3dc3 100644
--- a/pkg/cache/task.go
+++ b/pkg/cache/task.go
@@ -21,7 +21,6 @@ package cache
import (
"context"
"fmt"
- "strconv"
"time"
"github.com/looplab/fsm"
@@ -428,19 +427,8 @@ func (task *Task) postTaskBound() {
if utils.IsPluginMode() {
// When the pod is actively scheduled by YuniKorn, it can be
moved to the default-scheduler's
// UnschedulablePods structure. If the pod does not change, the
pod will stay in the UnschedulablePods
- // structure for podMaxInUnschedulablePodsDuration (default 5
minutes). Here we update the pod
- // explicitly to move it back to the active queue.
- // See:
pkg/scheduler/internal/queue/scheduling_queue.go:isPodUpdated() for what is
considered updated.
- podCopy := task.pod.DeepCopy()
- if _, err := task.UpdateTaskPod(podCopy, func(pod *v1.Pod) {
- // Ensure that the default scheduler detects the pod as
having changed
- if pod.Annotations == nil {
- pod.Annotations = make(map[string]string)
- }
-
pod.Annotations[constants.DomainYuniKorn+"scheduled-at"] =
strconv.FormatInt(time.Now().UnixNano(), 10)
- }); err != nil {
- log.Log(log.ShimCacheTask).Warn("failed to update pod
status", zap.Error(err))
- }
+ // structure for podMaxInUnschedulablePodsDuration (default 5
minutes). Here we explicitly activate the pod.
+ task.context.ActivatePod(task.pod)
}
if task.placeholder {
diff --git a/pkg/client/apifactory.go b/pkg/client/apifactory.go
index bef55a66..03234c74 100644
--- a/pkg/client/apifactory.go
+++ b/pkg/client/apifactory.go
@@ -36,7 +36,7 @@ import (
type Type int
-var informerTypes = [...]string{"Pod", "Node", "ConfigMap", "PV", "PVC",
"Storage", "CSINode", "CSIDriver", "CSIStorageCapacity", "Namespace",
"PriorityClass", "Service", "ReplicationController", "ReplicaSet",
"StatefulSet"}
+var informerTypes = [...]string{"Pod", "Node", "ConfigMap", "PV", "PVC",
"Storage", "CSINode", "CSIDriver", "CSIStorageCapacity", "Namespace",
"PriorityClass", "Service", "ReplicationController", "ReplicaSet",
"StatefulSet", "VolumeAttachment"}
const (
PodInformerHandlers Type = iota
@@ -54,6 +54,7 @@ const (
ReplicationControllerInformerHandlers
ReplicaSetInformerHandlers
StatefulSetInformerHandlers
+ VolumeAttachmentInformerHandlers
)
func (t Type) String() string {
@@ -108,6 +109,7 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
replicationControllerInformer :=
informerFactory.Core().V1().ReplicationControllers()
replicaSetInformer := informerFactory.Apps().V1().ReplicaSets()
statefulSetInformer := informerFactory.Apps().V1().StatefulSets()
+ volumeAttachmentInformer :=
informerFactory.Storage().V1().VolumeAttachments()
var capacityCheck = volumebinding.CapacityCheck{
CSIDriverInformer:
informerFactory.Storage().V1().CSIDrivers(),
@@ -137,7 +139,7 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
ConfigMapInformer: configMapInformer,
PVInformer: pvInformer,
PVCInformer: pvcInformer,
- StorageInformer: storageInformer,
+ StorageClassInformer: storageInformer,
CSINodeInformer: csiNodeInformer,
CSIDriverInformer: csiDriverInformer,
CSIStorageCapacityInformer:
csiStorageCapacityInformer,
@@ -147,6 +149,7 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
ReplicationControllerInformer:
replicationControllerInformer,
ReplicaSetInformer: replicaSetInformer,
StatefulSetInformer: statefulSetInformer,
+ VolumeAttachmentInformer: volumeAttachmentInformer,
VolumeBinder: volumeBinder,
},
testMode: testMode,
@@ -206,7 +209,7 @@ func (s *APIFactory) addEventHandlers(
_, err = s.GetAPIs().ConfigMapInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case StorageInformerHandlers:
- _, err = s.GetAPIs().StorageInformer.Informer().
+ _, err = s.GetAPIs().StorageClassInformer.Informer().
AddEventHandlerWithResyncPeriod(handler, resyncPeriod)
case PVInformerHandlers:
_, err = s.GetAPIs().PVInformer.Informer().
diff --git a/pkg/client/apifactory_mock.go b/pkg/client/apifactory_mock.go
index 1194b6da..8a93a81a 100644
--- a/pkg/client/apifactory_mock.go
+++ b/pkg/client/apifactory_mock.go
@@ -74,7 +74,7 @@ func NewMockedAPIProvider(showError bool) *MockedAPIProvider {
ConfigMapInformer:
test.NewMockedConfigMapInformer(),
PVInformer:
NewMockedPersistentVolumeInformer(),
PVCInformer:
NewMockedPersistentVolumeClaimInformer(),
- StorageInformer: NewMockedStorageClassInformer(),
+ StorageClassInformer: NewMockedStorageClassInformer(),
VolumeBinder: test.NewVolumeBinderMock(),
NamespaceInformer:
test.NewMockNamespaceInformer(false),
PriorityClassInformer:
test.NewMockPriorityClassInformer(),
diff --git a/pkg/client/apifactory_test.go b/pkg/client/apifactory_test.go
index be66c91e..e819ab93 100644
--- a/pkg/client/apifactory_test.go
+++ b/pkg/client/apifactory_test.go
@@ -25,7 +25,7 @@ import (
)
func TestInformerTypes(t *testing.T) {
- assert.Equal(t, 15, len(informerTypes), "wrong informerTypes length")
+ assert.Equal(t, 16, len(informerTypes), "wrong informerTypes length")
assert.Equal(t, "Pod", PodInformerHandlers.String())
assert.Equal(t, "Node", NodeInformerHandlers.String())
@@ -42,6 +42,7 @@ func TestInformerTypes(t *testing.T) {
assert.Equal(t, "ReplicationController",
ReplicationControllerInformerHandlers.String())
assert.Equal(t, "ReplicaSet", ReplicaSetInformerHandlers.String())
assert.Equal(t, "StatefulSet", StatefulSetInformerHandlers.String())
+ assert.Equal(t, "VolumeAttachment",
VolumeAttachmentInformerHandlers.String())
}
func TestMockedAPIProvider_GetPodBindStats(t *testing.T) {
diff --git a/pkg/client/clients.go b/pkg/client/clients.go
index 9fc55172..7289f324 100644
--- a/pkg/client/clients.go
+++ b/pkg/client/clients.go
@@ -46,21 +46,22 @@ type Clients struct {
InformerFactory informers.SharedInformerFactory
// resource informers
- PodInformer coreInformerV1.PodInformer
- NodeInformer coreInformerV1.NodeInformer
ConfigMapInformer coreInformerV1.ConfigMapInformer
- PVInformer coreInformerV1.PersistentVolumeInformer
- PVCInformer
coreInformerV1.PersistentVolumeClaimInformer
- StorageInformer storageInformerV1.StorageClassInformer
- CSINodeInformer storageInformerV1.CSINodeInformer
CSIDriverInformer storageInformerV1.CSIDriverInformer
+ CSINodeInformer storageInformerV1.CSINodeInformer
CSIStorageCapacityInformer
storageInformerV1.CSIStorageCapacityInformer
NamespaceInformer coreInformerV1.NamespaceInformer
+ NodeInformer coreInformerV1.NodeInformer
+ PodInformer coreInformerV1.PodInformer
+ StorageClassInformer storageInformerV1.StorageClassInformer
+ PVCInformer
coreInformerV1.PersistentVolumeClaimInformer
+ PVInformer coreInformerV1.PersistentVolumeInformer
+ ReplicaSetInformer appsInformerV1.ReplicaSetInformer
PriorityClassInformer schedulingInformerV1.PriorityClassInformer
ServiceInformer coreInformerV1.ServiceInformer
- ReplicationControllerInformer
coreInformerV1.ReplicationControllerInformer
- ReplicaSetInformer appsInformerV1.ReplicaSetInformer
StatefulSetInformer appsInformerV1.StatefulSetInformer
+ ReplicationControllerInformer
coreInformerV1.ReplicationControllerInformer
+ VolumeAttachmentInformer storageInformerV1.VolumeAttachmentInformer
// volume binder handles PV/PVC related operations
VolumeBinder volumebinding.SchedulerVolumeBinder
@@ -70,21 +71,22 @@ func (c *Clients) WaitForSync() {
syncStartTime := time.Now()
counter := 0
for {
- if c.PodInformer.Informer().HasSynced() &&
- c.NodeInformer.Informer().HasSynced() &&
- c.ConfigMapInformer.Informer().HasSynced() &&
- c.PVInformer.Informer().HasSynced() &&
- c.PVCInformer.Informer().HasSynced() &&
- c.StorageInformer.Informer().HasSynced() &&
- c.CSINodeInformer.Informer().HasSynced() &&
+ if c.ConfigMapInformer.Informer().HasSynced() &&
c.CSIDriverInformer.Informer().HasSynced() &&
+ c.CSINodeInformer.Informer().HasSynced() &&
c.CSIStorageCapacityInformer.Informer().HasSynced() &&
c.NamespaceInformer.Informer().HasSynced() &&
+ c.NodeInformer.Informer().HasSynced() &&
+ c.PodInformer.Informer().HasSynced() &&
c.PriorityClassInformer.Informer().HasSynced() &&
- c.ServiceInformer.Informer().HasSynced() &&
- c.ReplicationControllerInformer.Informer().HasSynced()
&&
+ c.PVCInformer.Informer().HasSynced() &&
+ c.PVInformer.Informer().HasSynced() &&
c.ReplicaSetInformer.Informer().HasSynced() &&
- c.StatefulSetInformer.Informer().HasSynced() {
+ c.ReplicationControllerInformer.Informer().HasSynced()
&&
+ c.ServiceInformer.Informer().HasSynced() &&
+ c.StatefulSetInformer.Informer().HasSynced() &&
+ c.StorageClassInformer.Informer().HasSynced() &&
+ c.VolumeAttachmentInformer.Informer().HasSynced() {
return
}
time.Sleep(time.Second)
@@ -97,19 +99,20 @@ func (c *Clients) WaitForSync() {
}
func (c *Clients) Run(stopCh <-chan struct{}) {
- go c.PodInformer.Informer().Run(stopCh)
- go c.NodeInformer.Informer().Run(stopCh)
go c.ConfigMapInformer.Informer().Run(stopCh)
- go c.PVInformer.Informer().Run(stopCh)
- go c.PVCInformer.Informer().Run(stopCh)
- go c.StorageInformer.Informer().Run(stopCh)
- go c.CSINodeInformer.Informer().Run(stopCh)
go c.CSIDriverInformer.Informer().Run(stopCh)
+ go c.CSINodeInformer.Informer().Run(stopCh)
go c.CSIStorageCapacityInformer.Informer().Run(stopCh)
go c.NamespaceInformer.Informer().Run(stopCh)
+ go c.NodeInformer.Informer().Run(stopCh)
+ go c.PodInformer.Informer().Run(stopCh)
go c.PriorityClassInformer.Informer().Run(stopCh)
- go c.ServiceInformer.Informer().Run(stopCh)
- go c.ReplicationControllerInformer.Informer().Run(stopCh)
+ go c.PVCInformer.Informer().Run(stopCh)
+ go c.PVInformer.Informer().Run(stopCh)
go c.ReplicaSetInformer.Informer().Run(stopCh)
+ go c.ReplicationControllerInformer.Informer().Run(stopCh)
+ go c.ServiceInformer.Informer().Run(stopCh)
go c.StatefulSetInformer.Informer().Run(stopCh)
+ go c.StorageClassInformer.Informer().Run(stopCh)
+ go c.VolumeAttachmentInformer.Informer().Run(stopCh)
}
diff --git a/pkg/client/clients_test.go b/pkg/client/clients_test.go
index 5b703a12..ac717bcd 100644
--- a/pkg/client/clients_test.go
+++ b/pkg/client/clients_test.go
@@ -29,7 +29,7 @@ import (
)
const (
- noOfInformers = 15 // total number of active informers
+ noOfInformers = 16 // total number of active informers
)
func TestWaitForSync(t *testing.T) {
@@ -73,20 +73,21 @@ func TestRun(t *testing.T) {
func getClients() *Clients {
return &Clients{
- PodInformer: test.NewMockedPodInformer(),
- NodeInformer: test.NewMockedNodeInformer(),
ConfigMapInformer:
test.NewMockedConfigMapInformer(),
- PVInformer:
NewMockedPersistentVolumeInformer(),
- PVCInformer:
NewMockedPersistentVolumeClaimInformer(),
- StorageInformer: NewMockedStorageClassInformer(),
- CSINodeInformer: NewMockedCSINodeInformer(),
CSIDriverInformer: NewMockedCSIDriverInformer(),
+ CSINodeInformer: NewMockedCSINodeInformer(),
CSIStorageCapacityInformer:
NewMockedCSIStorageCapacityInformer(),
NamespaceInformer:
test.NewMockNamespaceInformer(false),
+ NodeInformer: test.NewMockedNodeInformer(),
+ PodInformer: test.NewMockedPodInformer(),
PriorityClassInformer:
test.NewMockPriorityClassInformer(),
- ServiceInformer: NewMockedServiceInformer(),
- ReplicationControllerInformer:
NewMockedReplicationControllerInformer(),
+ PVCInformer:
NewMockedPersistentVolumeClaimInformer(),
+ PVInformer:
NewMockedPersistentVolumeInformer(),
ReplicaSetInformer: NewMockedReplicaSetInformer(),
+ ReplicationControllerInformer:
NewMockedReplicationControllerInformer(),
+ ServiceInformer: NewMockedServiceInformer(),
StatefulSetInformer: NewMockedStatefulSetInformer(),
+ StorageClassInformer: NewMockedStorageClassInformer(),
+ VolumeAttachmentInformer:
test.NewMockVolumeAttachmentInformer(),
}
}
diff --git a/pkg/common/resource_test.go b/pkg/common/resource_test.go
index 204086f2..da5f5723 100644
--- a/pkg/common/resource_test.go
+++ b/pkg/common/resource_test.go
@@ -25,7 +25,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
apis "k8s.io/apimachinery/pkg/apis/meta/v1"
- k8res "k8s.io/kubernetes/pkg/api/v1/resource"
+ k8res "k8s.io/component-helpers/resource"
siCommon "github.com/apache/yunikorn-scheduler-interface/lib/go/common"
"github.com/apache/yunikorn-scheduler-interface/lib/go/si"
diff --git a/pkg/common/test/volumeattachment_informer_mock.go
b/pkg/common/test/volumeattachment_informer_mock.go
new file mode 100644
index 00000000..675313fe
--- /dev/null
+++ b/pkg/common/test/volumeattachment_informer_mock.go
@@ -0,0 +1,45 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package test
+
+import (
+ informersv1 "k8s.io/client-go/informers/storage/v1"
+ listersv1 "k8s.io/client-go/listers/storage/v1"
+ "k8s.io/client-go/tools/cache"
+)
+
+type MockVolumeAttachmentInformer struct {
+ lister listersv1.VolumeAttachmentLister
+ informer cache.SharedIndexInformer
+}
+
+func NewMockVolumeAttachmentInformer() informersv1.VolumeAttachmentInformer {
+ return &MockVolumeAttachmentInformer{
+ lister: NewMockVolumeAttachmentLister(),
+ informer: &SharedInformerMock{},
+ }
+}
+
+func (m *MockVolumeAttachmentInformer) Informer() cache.SharedIndexInformer {
+ return m.informer
+}
+
+func (m *MockVolumeAttachmentInformer) Lister()
listersv1.VolumeAttachmentLister {
+ return m.lister
+}
diff --git a/pkg/common/test/volumeattachment_lister_mock.go
b/pkg/common/test/volumeattachment_lister_mock.go
new file mode 100644
index 00000000..e8190490
--- /dev/null
+++ b/pkg/common/test/volumeattachment_lister_mock.go
@@ -0,0 +1,57 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package test
+
+import (
+ "fmt"
+
+ storagev1 "k8s.io/api/storage/v1"
+ "k8s.io/apimachinery/pkg/labels"
+ listersv1 "k8s.io/client-go/listers/storage/v1"
+)
+
+type MockVolumeAttachmentLister struct {
+ volumeAttachments map[string]*storagev1.VolumeAttachment
+}
+
+func NewMockVolumeAttachmentLister() listersv1.VolumeAttachmentLister {
+ return &MockVolumeAttachmentLister{
+ volumeAttachments: make(map[string]*storagev1.VolumeAttachment),
+ }
+}
+
+func (nsl *MockVolumeAttachmentLister) List(labels.Selector) (ret
[]*storagev1.VolumeAttachment, err error) {
+ ret = make([]*storagev1.VolumeAttachment, 0)
+ for _, pc := range nsl.volumeAttachments {
+ ret = append(ret, pc)
+ }
+ return ret, nil
+}
+
+func (l *MockVolumeAttachmentLister) Add(va *storagev1.VolumeAttachment) {
+ l.volumeAttachments[va.Name] = va
+}
+
+func (l *MockVolumeAttachmentLister) Get(name string)
(*storagev1.VolumeAttachment, error) {
+ ns, ok := l.volumeAttachments[name]
+ if !ok {
+ return nil, fmt.Errorf("volumeAttachment is not found")
+ }
+ return ns, nil
+}
diff --git a/pkg/plugin/predicates/predicate_manager.go
b/pkg/plugin/predicates/predicate_manager.go
index 4b741020..5e966df6 100644
--- a/pkg/plugin/predicates/predicate_manager.go
+++ b/pkg/plugin/predicates/predicate_manager.go
@@ -36,6 +36,7 @@ import (
"k8s.io/kubernetes/pkg/scheduler/framework/plugins"
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
fwruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
+ "k8s.io/kubernetes/pkg/scheduler/metrics"
"github.com/apache/yunikorn-k8shim/pkg/log"
)
@@ -59,7 +60,7 @@ type predicateManagerImpl struct {
}
func (p *predicateManagerImpl) EventsToRegister(queueingHintFn
framework.QueueingHintFn) []framework.ClusterEventWithHint {
- actionMap := make(map[framework.GVK]framework.ActionType)
+ actionMap := make(map[framework.EventResource]framework.ActionType)
for _, plugin := range *p.allocationPreFilters {
mergePluginEvents(actionMap, pluginEvents(plugin))
}
@@ -82,7 +83,7 @@ func pluginEvents(plugin framework.Plugin)
[]framework.ClusterEventWithHint {
return events
}
-func mergePluginEvents(actionMap map[framework.GVK]framework.ActionType,
events []framework.ClusterEventWithHint) {
+func mergePluginEvents(actionMap
map[framework.EventResource]framework.ActionType, events
[]framework.ClusterEventWithHint) {
if _, ok := actionMap[framework.WildCard]; ok {
// already registered for all events; skip further processing
return
@@ -106,7 +107,7 @@ func mergePluginEvents(actionMap
map[framework.GVK]framework.ActionType, events
}
}
-func buildClusterEvents(actionMap map[framework.GVK]framework.ActionType,
queueingHintFn framework.QueueingHintFn) []framework.ClusterEventWithHint {
+func buildClusterEvents(actionMap
map[framework.EventResource]framework.ActionType, queueingHintFn
framework.QueueingHintFn) []framework.ClusterEventWithHint {
events := make([]framework.ClusterEventWithHint, 0)
for resource, actionType := range actionMap {
events = append(events, framework.ClusterEventWithHint{
@@ -273,12 +274,12 @@ func (p *predicateManagerImpl) runFilterPlugin(ctx
context.Context, pl framework
func NewPredicateManager(handle framework.Handle) PredicateManager {
/*
- Default K8S plugins as of 1.31 that implement PreFilter:
+ Default K8S plugins as of 1.32 that implement PreFilter:
NodeAffinity
NodePorts
- Fit
+ NodeResourcesFit
VolumeRestrictions
- CSILimits
+ NodeVolumeLimits
VolumeBinding
VolumeZone
PodTopologySpread
@@ -291,8 +292,8 @@ func NewPredicateManager(handle framework.Handle)
PredicateManager {
names.NodePorts: true,
names.PodTopologySpread: true,
names.InterPodAffinity: true,
- // Fit : skip because during reservation, node resources are
not enough
- // CSILimits
+ // NodeResourcesFit : skip because during reservation, node
resources are not enough
+ // NodeVolumeLimits
// VolumeRestrictions
// VolumeBinding
// VolumeZone
@@ -304,15 +305,15 @@ func NewPredicateManager(handle framework.Handle)
PredicateManager {
}
/*
- Default K8S plugins as of 1.31 that implement Filter:
+ Default K8S plugins as of 1.32 that implement Filter:
NodeUnschedulable
NodeName
TaintToleration
NodeAffinity
NodePorts
- Fit
+ NodeResourcesFit
VolumeRestrictions
- CSILimits
+ NodeVolumeLimits
VolumeBinding
VolumeZone
PodTopologySpread
@@ -328,9 +329,9 @@ func NewPredicateManager(handle framework.Handle)
PredicateManager {
names.NodePorts: true,
names.PodTopologySpread: true,
names.InterPodAffinity: true,
- // Fit : skip because during reservation, node resources are
not enough
+ // NodeResourcesFit : skip because during reservation, node
resources are not enough
// VolumeRestrictions
- // CSILimits
+ // NodeVolumeLimits
// VolumeBinding
// VolumeZone
}
@@ -349,6 +350,11 @@ func newPredicateManagerInternal(
allocationPreFilters map[string]bool,
reservationFilters map[string]bool,
allocationFilters map[string]bool) *predicateManagerImpl {
+ // ensure K8s scheduler metrics have been initialized in YK standalone
mode to avoid SIGSEGV
+ if metrics.Goroutines == nil {
+ metrics.InitMetrics()
+ }
+
pluginRegistry := plugins.NewInTreeRegistry()
cfg, err := defaultConfig() // latest.Default()
diff --git a/pkg/plugin/predicates/predicate_manager_test.go
b/pkg/plugin/predicates/predicate_manager_test.go
index 4a6324d6..b1104cff 100644
--- a/pkg/plugin/predicates/predicate_manager_test.go
+++ b/pkg/plugin/predicates/predicate_manager_test.go
@@ -138,12 +138,12 @@ func TestEventsToRegister(t *testing.T) {
}
events := predicateManager.EventsToRegister(queueingHintFn)
assert.Equal(t, events[0].Event.Resource, framework.Node, "wrong
resource (0)")
- assert.Equal(t, events[0].Event.ActionType, framework.All, "wrong
action type (0)")
+ assert.Equal(t, events[0].Event.ActionType,
framework.Add|framework.Delete|framework.UpdateNodeLabel|framework.UpdateNodeTaint,
"wrong action type (0)")
fn0, err := events[0].QueueingHintFn(klog.NewKlogr(), nil, "", "")
assert.NilError(t, err)
assert.Equal(t, int(fn0), -1, "wrong fn (0)")
assert.Equal(t, events[1].Event.Resource, framework.Pod, "wrong
resource (1)")
- assert.Equal(t, events[1].Event.ActionType,
framework.Add|framework.Delete|framework.UpdatePodLabel, "wrong action type
(1)")
+ assert.Equal(t, events[1].Event.ActionType,
framework.Add|framework.Delete|framework.UpdatePodLabel|framework.UpdatePodTolerations,
"wrong action type (1)")
fn1, err := events[1].QueueingHintFn(klog.NewKlogr(), nil, "", "")
assert.NilError(t, err)
assert.Equal(t, int(fn1), -1, "wrong fn (1)")
diff --git a/pkg/plugin/scheduler_plugin.go b/pkg/plugin/scheduler_plugin.go
index 047f363e..5d8974d8 100644
--- a/pkg/plugin/scheduler_plugin.go
+++ b/pkg/plugin/scheduler_plugin.go
@@ -294,8 +294,12 @@ func NewSchedulerPlugin(_ context.Context, _
runtime.Object, handle framework.Ha
log.Log(log.ShimSchedulerPlugin).Fatal("Unable to start
scheduler", zap.Error(err))
}
+ context := ss.GetContext()
+ context.SetPodActivator(func(logger klog.Logger, pod *v1.Pod) {
+ handle.Activate(logger, map[string]*v1.Pod{pod.Name: pod})
+ })
p := &YuniKornSchedulerPlugin{
- context: ss.GetContext(),
+ context: context,
}
events.SetRecorder(handle.EventRecorder())
return p, nil
diff --git a/pkg/plugin/support/framework_handle.go
b/pkg/plugin/support/framework_handle.go
index 272c5e2b..599b46ef 100644
--- a/pkg/plugin/support/framework_handle.go
+++ b/pkg/plugin/support/framework_handle.go
@@ -145,6 +145,17 @@ func (p frameworkHandle) Extenders() []framework.Extender {
return nil
}
+func (p frameworkHandle) Activate(logger klog.Logger, pods map[string]*v1.Pod)
{
+ // currently only used by Preemption plugin, so not needed
+ log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+}
+
+func (p frameworkHandle) SharedDRAManager() framework.SharedDRAManager {
+ // currently only used by DRA
+ log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+ return nil
+}
+
var _ framework.Handle = frameworkHandle{}
func NewFrameworkHandle(sharedLister framework.SharedLister, informerFactory
informers.SharedInformerFactory, clientSet kubernetes.Interface)
framework.Handle {
diff --git a/scripts/run-e2e-tests.sh b/scripts/run-e2e-tests.sh
index 6ca2280c..2c82b4c5 100755
--- a/scripts/run-e2e-tests.sh
+++ b/scripts/run-e2e-tests.sh
@@ -196,13 +196,13 @@ Examples:
${NAME} -a test -n yk8s -v kindest/node:v1.26.15
${NAME} -a test -n yk8s -v kindest/node:v1.27.16
${NAME} -a test -n yk8s -v kindest/node:v1.28.15
- ${NAME} -a test -n yk8s -v kindest/node:v1.29.10
- ${NAME} -a test -n yk8s -v kindest/node:v1.30.6
- ${NAME} -a test -n yk8s -v kindest/node:v1.31.4
- ${NAME} -a test -n yk8s -v kindest/node:v1.32.0
+ ${NAME} -a test -n yk8s -v kindest/node:v1.29.14
+ ${NAME} -a test -n yk8s -v kindest/node:v1.30.10
+ ${NAME} -a test -n yk8s -v kindest/node:v1.31.6
+ ${NAME} -a test -n yk8s -v kindest/node:v1.32.2
Use a local helm chart path:
- ${NAME} -a test -n yk8s -v kindest/node:v1.32.0 -p
../yunikorn-release/helm-charts/yunikorn
+ ${NAME} -a test -n yk8s -v kindest/node:v1.32.2 -p
../yunikorn-release/helm-charts/yunikorn
EOF
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]