From 5532c8dc4dff36f1b4eb9448e803409126cde1ac Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Wed, 18 Jun 2025 18:44:19 +0000 Subject: [PATCH 1/3] disable ebpf option Change-Id: I15b5cd20d331f29fd688e4f084fc9a848a8f97de --- pkg/apis/types.go | 4 ++ pkg/driver/hostdevice.go | 91 ++++++++++++++++++++++++++++++++++++++++ pkg/driver/nri_hooks.go | 10 +++++ 3 files changed, 105 insertions(+) diff --git a/pkg/apis/types.go b/pkg/apis/types.go index f3adba88..ceb0f526 100644 --- a/pkg/apis/types.go +++ b/pkg/apis/types.go @@ -62,6 +62,10 @@ type InterfaceConfig struct { // GROv4MaxSize sets the maximum Generic Receive Offload size. // Managed by `ip link set gro_ipv4_max_size `. For enabling Big TCP. GROIPv4MaxSize *int32 `json:"groIPv4MaxSize,omitempty"` + + // DisableEBPFPrograms, if true, attempts to detach all eBPF programs + // (both TC and TCX) from the network interface assigned to the Pod. + DisableEBPFPrograms *bool `json:"disableEbpfPrograms,omitempty"` } // RouteConfig represents a network route configuration. diff --git a/pkg/driver/hostdevice.go b/pkg/driver/hostdevice.go index cb6b7b18..3236a405 100644 --- a/pkg/driver/hostdevice.go +++ b/pkg/driver/hostdevice.go @@ -20,7 +20,10 @@ import ( "errors" "fmt" "net" + "runtime" + "github.com/cilium/ebpf" + "github.com/cilium/ebpf/link" "github.com/google/dranet/pkg/apis" "github.com/vishvananda/netlink" @@ -244,3 +247,91 @@ func nsDetachNetdev(containerNsPAth string, devName string, outName string) erro } return nil } + +// detachEBPFPrograms detaches all eBPF programs (TC and TCX) from a given network interface. +// It attempts to remove both classic TC filters and newer TCX programs. +// Returns an aggregated error if any detachment fails. +func detachEBPFPrograms(containerNsPAth string, ifName string) error { + origns, err := netns.Get() + if err != nil { + return fmt.Errorf("unexpected error trying to get namespace: %v", err) + } + defer origns.Close() + + containerNs, err := netns.GetFromPath(containerNsPAth) + if err != nil { + return fmt.Errorf("could not get network namespace from path %s for network device %s : %w", containerNsPAth, ifName, err) + } + defer containerNs.Close() + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + err = netns.Set(containerNs) + if err != nil { + return fmt.Errorf("failt to join network namespace %s : %v", containerNsPAth, err) + } + + // Switch back to the original namespace + defer netns.Set(origns) // nolint:errcheck + + var errs []error + + device, err := netlink.LinkByName(ifName) + if err != nil { + return err + } + + // Detach TC filters (legacy) + klog.V(2).Infof("Attempting to detach TC filters from interface %s", device.Attrs().Name) + for _, parent := range []uint32{netlink.HANDLE_MIN_INGRESS, netlink.HANDLE_MIN_EGRESS} { + filters, err := netlink.FilterList(device, parent) + if err != nil { + klog.V(4).Infof("Could not list TC filters for interface %s (parent %d): %v", device.Attrs().Name, parent, err) + continue + } + for _, f := range filters { + if bpfFilter, ok := f.(*netlink.BpfFilter); ok { + klog.V(4).Infof("Deleting TC filter %s from interface %s (parent %d)", bpfFilter.Name, device.Attrs().Name, parent) + if err := netlink.FilterDel(f); err != nil { + klog.V(2).Infof("failed to delete TC filter %s on %s: %v", bpfFilter.Name, device.Attrs().Name, err) + } + } + } + } + // Detach TCX programs + klog.V(2).Infof("Attempting to detach TCX programs from interface %s", device.Attrs().Name) + for _, attach := range []ebpf.AttachType{ebpf.AttachTCXIngress, ebpf.AttachTCXEgress} { + klog.V(2).Infof("Attempting to detach programs from interface %s", device.Attrs().Name) + result, err := link.QueryPrograms(link.QueryOptions{ + Target: int(device.Attrs().Index), + Attach: attach, + }) + if err != nil { + errs = append(errs, err) + continue + } + for _, p := range result.Programs { + klog.V(2).Infof("Attempting to detach program %d from interface %s", p.ID, device.Attrs().Name) + prog, err := ebpf.NewProgramFromID(p.ID) + if err != nil { + klog.V(2).Infof("failed to get eBPF program with ID %d: %v", p.ID, err) + errs = append(errs, err) + continue + } + + err = link.RawDetachProgram(link.RawDetachProgramOptions{ + Target: device.Attrs().Index, + Program: prog, + Attach: attach, + }) + if err != nil { + klog.V(2).Infof("failed to get eBPF program with ID %d: %v", p.ID, err) + errs = append(errs, err) + continue + } + prog.Close() // nolint:errcheck + } + } + + return errors.Join(errs...) +} diff --git a/pkg/driver/nri_hooks.go b/pkg/driver/nri_hooks.go index d82b54aa..451793d6 100644 --- a/pkg/driver/nri_hooks.go +++ b/pkg/driver/nri_hooks.go @@ -154,6 +154,16 @@ func (np *NetworkDriver) RunPodSandbox(ctx context.Context, pod *api.PodSandbox) } } + // Check if the ebpf programs should be disabled + if config.Network.Interface.DisableEBPFPrograms != nil && + *config.Network.Interface.DisableEBPFPrograms { + err = detachEBPFPrograms(ns, ifNameInNs) + if err != nil { + klog.Infof("error disabling ebpf programs for %s in ns %s: %v", ifNameInNs, ns, err) + return fmt.Errorf("error disabling ebpf programs for %s in ns %s: %v", ifNameInNs, ns, err) + } + } + // Configure routes err = applyRoutingConfig(ns, ifNameInNs, config.Network.Routes) if err != nil { From 7d24a2628964207cb77610ed14eba137d68edb23 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Mon, 23 Jun 2025 09:32:35 +0000 Subject: [PATCH 2/3] add bpf tcx e2e test Change-Id: I3573120b690a777ab61d6bd289b60fe823b5d6f1 --- examples/resourceclaim_disable_ebpf.yaml | 48 ++++++++++++++++++++ tests/README.md | 7 ++- tests/dummy_bpf_tcx.c | 9 ++++ tests/dummy_bpf_tcx.o | Bin 0 -> 8208 bytes tests/e2e.bats | 53 +++++++++++++++++++++-- 5 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 examples/resourceclaim_disable_ebpf.yaml create mode 100644 tests/dummy_bpf_tcx.c create mode 100644 tests/dummy_bpf_tcx.o diff --git a/examples/resourceclaim_disable_ebpf.yaml b/examples/resourceclaim_disable_ebpf.yaml new file mode 100644 index 00000000..8153a77c --- /dev/null +++ b/examples/resourceclaim_disable_ebpf.yaml @@ -0,0 +1,48 @@ +# Copyright 2024 Google LLC +# +# Licensed 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 +# +# https://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. + +apiVersion: resource.k8s.io/v1beta1 +kind: ResourceClaim +metadata: + name: dummy-interface-disable-ebpf +spec: + devices: + requests: + - name: req-dummy + deviceClassName: dra.net + selectors: + - cel: + expression: device.attributes["dra.net"].ifName == "dummy5" + config: + - opaque: + driver: dra.net + parameters: + interface: + disableEbpfPrograms: true +--- +apiVersion: v1 +kind: Pod +metadata: + name: pod-ebpf + labels: + app: pod +spec: + containers: + - name: ctr1 + image: registry.k8s.io/e2e-test-images/agnhost:2.54 + securityContext: + privileged: true + resourceClaims: + - name: dummy1 + resourceClaimName: dummy-interface-disable-ebpf diff --git a/tests/README.md b/tests/README.md index 5b72b4f9..0111184f 100644 --- a/tests/README.md +++ b/tests/README.md @@ -5,4 +5,9 @@ 2. Install `kind` https://kind.sigs.k8s.io/ -3. Run `bats tests/` \ No newline at end of file +3. Run `bats tests/` + + +## eBPF programs + +We store the compiled bytecode for simplicity, those are generated using `clang -O2 -g -target bpf -c dummy_bpf_tcx.c -o dummy_bpf_tcx.o` \ No newline at end of file diff --git a/tests/dummy_bpf_tcx.c b/tests/dummy_bpf_tcx.c new file mode 100644 index 00000000..b62c43e3 --- /dev/null +++ b/tests/dummy_bpf_tcx.c @@ -0,0 +1,9 @@ +#include +#include + +SEC("tcx/ingress") +int handle_ingress(struct __sk_buff *skb) { + return BPF_OK; +} + +char LICENSE[] SEC("license") = "GPL"; \ No newline at end of file diff --git a/tests/dummy_bpf_tcx.o b/tests/dummy_bpf_tcx.o new file mode 100644 index 0000000000000000000000000000000000000000..63fc7ede696589768d02912cf8aa165765bf81bb GIT binary patch literal 8208 zcmd^Edu$xV9iF|1eerqhvmNj{xsW5Z!Ib3eBqlKd!UfwQ29vmsLqeLeKHshFi|>`& zJ;x3-F$7Us(n5KNR0_gXfdU*zd8riW1N!}DXYI@Q zKt=ttKk3`~zTf=jv9q%?vv&u2`Zjtrjk%_=_t>0ry^Mtx&GDF^F{UH(hthqgOfT*4 zV_Kco($e7fwiFsejf-3A7S~r;jf{CZn75_3;o_!s!3%;OoiVSb^)@i(JCpS`tPL{e zZ$`lSU=Xx|XfU`Qw9!C0*O7IgLT%#!pACQy*h>ZYagoyK#&)G{_hwm$biB~JEOZX?dOS=0 z-IamhD)8#Te(lFP?-g}EhUw}|f)kjomkHlbF#gUYeH_!(nZi$Cx;hi`B&O@-BJN2{ z*FMq9pJBRQA$(6^LT(m=@iZpn7U6qF@8JC+?peK)e@^(G!_*x3DSD$lulKPKy;xg4 zi`W>Z0ahJh5nS5=dcY&VIB)5S3bX>} z0qcQYU;r2fb^{hL0bB#z2;2t zeX_eILVR>C zT0YKVr^rebEZYe{pqWj?^DLE@MQO~a3d0ySQMKjtM_g0+i4FrZM&#i!2%WTSB5Op3 zAmkZI$44!v^Xd4onHCRt?p|!mj%V_7-Am^%m+3+`w5EgYO%+Uop7*GgGb|HTS>tRt zSIj1jq&a~H#l+)BU&PQlDLM=7^cVLxOXxA6Pl!Z>9k)$Zm^4nEG=^c}erOU}xx~2B zYHFX!oPIiUZEUaXHG;>D;UXT!LM&B&aaI8-wR>LIaPD)A-fhB4y!X;PM6v9!W!U>p zAjLTeyPsn?O$i=BN_CJw1}u?$2; zJopw6dmNGg%@5jRVdBUf6LhXT?R{MOWI~?~Y`;?`Ky&J#EKdowNk+x$kbWJ6{CCm? zRNkZZ4aZ+iM{+-&8|6_5$~%#AnDOl(?w`t4IdL`ga!^n`G*apUJB=yGyw170#I`|u zFYUp~wv5w7o4ZASsxwBLdP0f7u=y7Y*@$zXxWGAnxMz`cDq&_VQ`tjiS8L24T5lsX zkzh3M2w{NEp=31Qk75$id?c#}Xik^gP))`*W_K9mex8x-}yHEUFs>@YwZ z0G)#an)Xk8Bx^7z0A#6{*Yp|d1+Vp=;ad&PezT;0$K$*EYpWOksq4Eh+`Ora3f!4p z_1drB&@NcH4I~y&q(*roDp9)%5O=xjG`$oNiWhtD=`Hx?Ry7 zitbeOg^G?Tx?9nk6y2xjenk%|dWWKSDSAlJNkxw-I<4ruqHRS_D*9SQPb>NcMc<_8 zLyEpt(RV2Nu%eGBdPdRrD*C9RzoY1f6n#w5#})mkqE9ILq@tfv^s|b7QPICp^sf~C zTSdR3=vNi}nxg-r=(iO8H$}g%=zl5N-MHNM(MMYh%+&!!({CrG`5{FwRJ5*WIuDnY zk0`oX(XEPJuIP3}cPP43(HAN@rf7M_p1uD~N`9ZB`xQN?XgYtF-tR6&4=FmS=rKhH zoaz{D$#ixPm1y#X>A}H#0Oc(QJ73*0?tFIj-LkxT5B)MgZBOk#Y1KzX2W9yWW$Gqs>_KFxK8mH^ zg~^^*I;O_b?;G@<#DG#8q7MUDOk5eGZ}8Idl{+rY(V*Zz!b z|5jNKwNGR3j=$SJjT6<`4wTvv-^}k&f zjL3r2e_G$v{{I=ia_zUv_A~PSWi?_QbUCGe1j@DFFWYy=iQ1>%Mb!4`H7nQtjQEv; zv3}&2nmV89JYKH-p)&VRRjTbj0$;iI-;(XOmNs5e-gW-~q+I*cW!k523AOzP;49a@ zE(h+2+mKAv*!$ow*Zz!bKQGJC_|sRD+P(oF)!7b|+A-Pwp;9Nf+rFFL0-v|qu8-1~{P2p%0+i5{bo(!FkNpP*vFEV> literal 0 HcmV?d00001 diff --git a/tests/e2e.bats b/tests/e2e.bats index bf5d9e4e..e924818d 100644 --- a/tests/e2e.bats +++ b/tests/e2e.bats @@ -150,7 +150,6 @@ # Test case for validating ebpf attributes are exposed via resource slice. -# TODO use tcx hooks too @test "validate bpf filter attributes" { docker cp "$BATS_TEST_DIRNAME"/dummy_bpf.o "$CLUSTER_NAME"-worker2:/dummy_bpf.o docker exec "$CLUSTER_NAME"-worker2 bash -c "ip link add dummy5 type dummy" @@ -162,6 +161,36 @@ [ "$status" -eq 0 ] [[ "$output" == *"dummy_bpf.o:[classifier] direct-action"* ]] + for attempt in {1..4}; do + run kubectl get resourceslices --field-selector spec.nodeName="$CLUSTER_NAME"-worker2 -o jsonpath='{.items[0].spec.devices[?(@.name=="dummy5")].attributes.dra\.net\/ebpf.bool}' + if [ "$status" -eq 0 ] && [[ "$output" == "true" ]]; then + break + fi + if (( attempt < 4 )); then + sleep 5 + fi + done + [ "$status" -eq 0 ] + [[ "$output" == "true" ]] + + # Validate bpfName attribute + run kubectl get resourceslices --field-selector spec.nodeName="$CLUSTER_NAME"-worker2 -o jsonpath='{.items[0].spec.devices[?(@.name=="dummy5")].attributes.dra\.net\/tcFilterNames.string}' + [ "$status" -eq 0 ] + [[ "$output" == "dummy_bpf.o:[classifier]" ]] +} + +# This reuses previous test +@test "validate tcx bpf filter attributes" { + docker cp "$BATS_TEST_DIRNAME"/dummy_bpf_tcx.o "$CLUSTER_NAME"-worker2:/dummy_bpf_tcx.o + docker exec "$CLUSTER_NAME"-worker2 bash -c "curl --connect-timeout 5 --retry 3 -L https://github.com/libbpf/bpftool/releases/download/v7.5.0/bpftool-v7.5.0-amd64.tar.gz | tar -xz" + docker exec "$CLUSTER_NAME"-worker2 bash -c "chmod +x bpftool" + docker exec "$CLUSTER_NAME"-worker2 bash -c "./bpftool prog load dummy_bpf_tcx.o /sys/fs/bpf/dummy_prog_tcx" + docker exec "$CLUSTER_NAME"-worker2 bash -c "./bpftool net attach tcx_ingress pinned /sys/fs/bpf/dummy_prog_tcx dev dummy5" + + run docker exec "$CLUSTER_NAME"-worker2 bash -c "./bpftool net show dev dummy5" + [ "$status" -eq 0 ] + [[ "$output" == *"tcx/ingress handle_ingress prog_id"* ]] + # Wait for the interface to be discovered sleep 5 @@ -171,7 +200,25 @@ [[ "$output" == "true" ]] # Validate bpfName attribute - run kubectl get resourceslices --field-selector spec.nodeName="$CLUSTER_NAME"-worker2 -o jsonpath='{.items[0].spec.devices[?(@.name=="dummy5")].attributes.dra\.net\/tcFilterNames.string}' + run kubectl get resourceslices --field-selector spec.nodeName="$CLUSTER_NAME"-worker2 -o jsonpath='{.items[0].spec.devices[?(@.name=="dummy5")].attributes.dra\.net\/tcxProgramNames.string}' [ "$status" -eq 0 ] - [[ "$output" == "dummy_bpf.o:[classifier]" ]] + [[ "$output" == "handle_ingress" ]] +} + +# This reuses previous test +@test "validate bpf programs are removed" { + kubectl apply -f "$BATS_TEST_DIRNAME"/../examples/deviceclass.yaml + kubectl apply -f "$BATS_TEST_DIRNAME"/../examples/resourceclaim_disable_ebpf.yaml + kubectl wait --for=condition=ready pod/pod-ebpf --timeout=300s + + run kubectl exec pod-ebpf -- ash -c "curl --connect-timeout 5 --retry 3 -L https://github.com/libbpf/bpftool/releases/download/v7.5.0/bpftool-v7.5.0-amd64.tar.gz | tar -xz && chmod +x bpftool" + [ "$status" -eq 0 ] + + run kubectl exec pod-ebpf -- ash -c "./bpftool net show dev dummy5" + [ "$status" -eq 0 ] + [[ "$output" != *"tcx/ingress handle_ingress prog_id"* ]] + [[ "$output" != *"dummy_bpf.o:[classifier]"* ]] + + kubectl delete -f "$BATS_TEST_DIRNAME"/../examples/resourceclaim_disable_ebpf.yaml + kubectl delete -f "$BATS_TEST_DIRNAME"/../examples/deviceclass.yaml } From e5d27ae9bc70d8e14510049c117b80d99eac8008 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Mon, 23 Jun 2025 10:44:44 +0000 Subject: [PATCH 3/3] bump dependencies Change-Id: I1a10f603e828387f00f26e0a1c896d4197ca3536 --- go.mod | 44 +++++++++++++-------------- go.sum | 94 ++++++++++++++++++++++++++++------------------------------ 2 files changed, 68 insertions(+), 70 deletions(-) diff --git a/go.mod b/go.mod index b2369a6b..9eb76561 100644 --- a/go.mod +++ b/go.mod @@ -21,16 +21,16 @@ require ( github.com/vishvananda/netns v0.0.5 golang.org/x/sys v0.33.0 golang.org/x/time v0.12.0 - google.golang.org/api v0.237.0 + google.golang.org/api v0.238.0 google.golang.org/protobuf v1.36.6 - k8s.io/api v0.33.1 - k8s.io/apimachinery v0.33.1 - k8s.io/client-go v0.33.1 + k8s.io/api v0.33.2 + k8s.io/apimachinery v0.33.2 + k8s.io/client-go v0.33.2 k8s.io/cloud-provider-gcp v0.0.0-20250326051131-7056e3facd39 - k8s.io/component-helpers v0.33.1 - k8s.io/dynamic-resource-allocation v0.33.1 + k8s.io/component-helpers v0.33.2 + k8s.io/dynamic-resource-allocation v0.33.2 k8s.io/klog/v2 v2.130.1 - k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 + k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 ) @@ -47,7 +47,7 @@ require ( github.com/emicklei/go-restful/v3 v3.12.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fxamacker/cbor/v2 v2.8.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect @@ -65,23 +65,23 @@ require ( github.com/knqyf263/go-plugin v0.9.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mdlayher/packet v1.1.2 // indirect - github.com/mdlayher/socket v0.4.1 // indirect + github.com/mdlayher/socket v0.5.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo/v2 v2.22.1 // indirect github.com/opencontainers/runtime-spec v1.2.1 // indirect - github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.62.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/stoewer/go-strcase v1.3.0 // indirect + github.com/stoewer/go-strcase v1.3.1 // indirect github.com/tetratelabs/wazero v1.9.0 // indirect - github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect + github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect github.com/x448/float16 v0.8.4 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.6.0 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.6.1 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect @@ -91,22 +91,22 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/crypto v0.39.0 // indirect - golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect + golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect golang.org/x/net v0.41.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/sync v0.15.0 // indirect golang.org/x/term v0.32.0 // indirect golang.org/x/text v0.26.0 // indirect - google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect google.golang.org/grpc v1.73.0 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/cri-api v0.33.1 // indirect - k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect - k8s.io/kubelet v0.33.1 // indirect + k8s.io/cri-api v0.33.2 // indirect + k8s.io/kube-openapi v0.0.0-20250610211856-8b98d1ed966a // indirect + k8s.io/kubelet v0.33.2 // indirect sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/go.sum b/go.sum index e8b4e9c6..d6616804 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -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/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/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-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= @@ -84,7 +84,6 @@ github.com/insomniacslk/dhcp v0.0.0-20250417080101-5f8cf70e8c5f h1:dd33oobuIv9Pc github.com/insomniacslk/dhcp v0.0.0-20250417080101-5f8cf70e8c5f/go.mod h1:zhFlBeJssZ1YBCMZ5Lzu1pX4vhftDvU10WUVb1uXKtM= 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/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/jsimonetti/rtnetlink v1.3.5 h1:hVlNQNRlLDGZz31gBPicsG7Q53rnlsz1l1Ix/9XlpVA= @@ -112,8 +111,8 @@ github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/ github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/packet v1.1.2 h1:3Up1NG6LZrsgDVn6X4L9Ge/iyRyxFEFD9o6Pr3Q1nQY= github.com/mdlayher/packet v1.1.2/go.mod h1:GEu1+n9sG5VtiRE4SydOmX5GTwyyYlteZiFU+x0kew4= -github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= -github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos= +github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -127,8 +126,8 @@ github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww= github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= -github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -136,12 +135,12 @@ 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.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= -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.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= +github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -151,8 +150,8 @@ github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -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/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs= +github.com/stoewer/go-strcase v1.3.1/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= @@ -167,8 +166,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM= -github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= -github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= +github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM= +github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0= github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4= @@ -179,8 +178,8 @@ 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/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.etcd.io/etcd/client/pkg/v3 v3.6.0 h1:nchnPqpuxvv3UuGGHaz0DQKYi5EIW5wOYsgUNRc365k= -go.etcd.io/etcd/client/pkg/v3 v3.6.0/go.mod h1:Jv5SFWMnGvIBn8o3OaBq/PnT0jjsX8iNokAUessNjoA= +go.etcd.io/etcd/client/pkg/v3 v3.6.1 h1:CxDVv8ggphmamrXM4Of8aCC8QHzDM4tGcVr9p2BSoGk= +go.etcd.io/etcd/client/pkg/v3 v3.6.1/go.mod h1:aTkCp+6ixcVTZmrJGa7/Mc5nMNs59PEgBbq+HCmWyMc= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= @@ -208,8 +207,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -229,7 +228,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -247,18 +245,18 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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/api v0.237.0 h1:MP7XVsGZesOsx3Q8WVa4sUdbrsTvDSOERd3Vh4xj/wc= -google.golang.org/api v0.237.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= -google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 h1:0DnDgelxbooHLt0nyiPeCP0zrH/RL+UG558i1oNU1xE= -google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:IuQRZAKkz+Mhos3ZZ0+hcGaTmLuuTuGw344uzwztGl8= -google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a h1:SGktgSolFCo75dnHJF2yMvnns6jCmHFJ0vE4Vn2JKvQ= -google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a/go.mod h1:a77HrdMjoeKbnd2jmgcWdaS++ZLZAEq3orIOAEIKiVw= +google.golang.org/api v0.238.0 h1:+EldkglWIg/pWjkq97sd+XxH7PxakNYoe/rkSTbnvOs= +google.golang.org/api v0.238.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc= google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= @@ -275,28 +273,28 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= -k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= -k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= -k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= -k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= -k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA= +k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY= +k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs= +k8s.io/apimachinery v0.33.2 h1:IHFVhqg59mb8PJWTLi8m1mAoepkUNYmptHsV+Z1m5jY= +k8s.io/apimachinery v0.33.2/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/client-go v0.33.2 h1:z8CIcc0P581x/J1ZYf4CNzRKxRvQAwoAolYPbtQes+E= +k8s.io/client-go v0.33.2/go.mod h1:9mCgT4wROvL948w6f6ArJNb7yQd7QsvqavDeZHvNmHo= k8s.io/cloud-provider-gcp v0.0.0-20250326051131-7056e3facd39 h1:2m5DoDX46TPMmpcLRzrOWdBqouWChgbp4F/qlf/lIGc= k8s.io/cloud-provider-gcp v0.0.0-20250326051131-7056e3facd39/go.mod h1:NZrMafedcWXEFDubORCpHuWMp8cUS1TItObinH7vpwg= -k8s.io/component-helpers v0.33.1 h1:DdQMww8jOr+sGhIrkz70Lp9Qerq/JzeZDBRd508DHDo= -k8s.io/component-helpers v0.33.1/go.mod h1:LQwxW5L3dH7341Unj+phndJu0Ic5UjxA//7FT8YVP5U= -k8s.io/cri-api v0.33.1 h1:CEvLiHZm/uTTp/5qsesU8/OG1a56RPnwMk4Ae73bUvs= -k8s.io/cri-api v0.33.1/go.mod h1:OLQvT45OpIA+tv91ZrpuFIGY+Y2Ho23poS7n115Aocs= -k8s.io/dynamic-resource-allocation v0.33.1 h1:xnEWV764LIsRQDTQ0tLFQMz1lY34Ep7D+/NNbrODfm4= -k8s.io/dynamic-resource-allocation v0.33.1/go.mod h1:AgBLCrIi+//A4VKljjJ7YPpJ+LeyDyTvUk7v8+Qf3pI= +k8s.io/component-helpers v0.33.2 h1:AjCtYzst11NV8ensxV/2LEEXRwctqS7Bs44bje9Qcnw= +k8s.io/component-helpers v0.33.2/go.mod h1:PsPpiCk74n8pGWp1d6kjK/iSKBTyQfIacv02BNkMenU= +k8s.io/cri-api v0.33.2 h1:1OiWm6gUx7JrN+xqxMzGDCPfPxVT8b6n7B6SeYl5luM= +k8s.io/cri-api v0.33.2/go.mod h1:OLQvT45OpIA+tv91ZrpuFIGY+Y2Ho23poS7n115Aocs= +k8s.io/dynamic-resource-allocation v0.33.2 h1:dG5HmIveq5wl3bTEJrtkZfIeGcfVGlZ1ysuzOovXOqk= +k8s.io/dynamic-resource-allocation v0.33.2/go.mod h1:/q49Z4qw3mpRB77Cgl2ACTLS9xrR7U82wZvsFl3biuE= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= -k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= -k8s.io/kubelet v0.33.1 h1:x4LCw1/iZVWOKA4RoITnuB8gMHnw31HPB3S0EF0EexE= -k8s.io/kubelet v0.33.1/go.mod h1:8WpdC9M95VmsqIdGSQrajXooTfT5otEj8pGWOm+KKfQ= -k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97RvvF3a8J3fP/Lg= -k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/kube-openapi v0.0.0-20250610211856-8b98d1ed966a h1:ZV3Zr+/7s7aVbjNGICQt+ppKWsF1tehxggNfbM7XnG8= +k8s.io/kube-openapi v0.0.0-20250610211856-8b98d1ed966a/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= +k8s.io/kubelet v0.33.2 h1:wxEau5/563oJb3j3KfrCKlNWWx35YlSgDLOYUBCQ0pg= +k8s.io/kubelet v0.33.2/go.mod h1:way8VCDTUMiX1HTOvJv7M3xS/xNysJI6qh7TOqMe5KM= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=