Skip to content

Commit f522c50

Browse files
authored
Merge pull request #207 from gianlucam76/capi-version
Verify CAPI is installed and with expected version
2 parents 4811605 + 4662c27 commit f522c50

4 files changed

Lines changed: 76 additions & 66 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ KUBECTL := $(TOOLS_BIN_DIR)/kubectl
5050
CLUSTERCTL := $(TOOLS_BIN_DIR)/clusterctl
5151

5252
GOLANGCI_LINT_VERSION := "v2.11.4"
53-
CLUSTERCTL_VERSION := v1.12.5
53+
CLUSTERCTL_VERSION := v1.13.0
5454

5555
KUSTOMIZE_VER := v5.8.0
5656
KUSTOMIZE_BIN := kustomize

cmd/main.go

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import (
4646

4747
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
4848
"github.com/projectsveltos/libsveltos/lib/crd"
49-
"github.com/projectsveltos/libsveltos/lib/logsettings"
49+
logs "github.com/projectsveltos/libsveltos/lib/logsettings"
5050
"github.com/projectsveltos/shard-controller/internal/controller"
5151
//+kubebuilder:scaffold:imports
5252
)
@@ -118,7 +118,7 @@ func main() {
118118
// Setup the context that's going to be used in controllers and for the manager.
119119
ctx := ctrl.SetupSignalHandler()
120120

121-
logsettings.RegisterForLogSettings(ctx,
121+
logs.RegisterForLogSettings(ctx,
122122
libsveltosv1beta1.ComponentShardController, ctrl.Log.WithName("log-setter"),
123123
ctrl.GetConfigOrDie())
124124

@@ -203,7 +203,7 @@ func capiWatchers(ctx context.Context, mgr ctrl.Manager, logger logr.Logger) {
203203
const maxRetries = 20
204204
retries := 0
205205
for {
206-
capiPresent, err := isCAPIInstalled(ctx, mgr.GetClient())
206+
capiPresent, err := isCAPIInstalled(ctx, mgr.GetClient(), logger)
207207
if err != nil {
208208
if retries < maxRetries {
209209
logger.Info(fmt.Sprintf("failed to verify if CAPI is present: %v", err))
@@ -212,10 +212,10 @@ func capiWatchers(ctx context.Context, mgr ctrl.Manager, logger logr.Logger) {
212212
retries++
213213
} else {
214214
if !capiPresent {
215-
setupLog.V(logsettings.LogInfo).Info("CAPI currently not present. Starting CRD watcher")
215+
setupLog.V(logs.LogInfo).Info("CAPI currently not present. Starting CRD watcher")
216216
go crd.WatchCustomResourceDefinition(ctx, mgr.GetConfig(), capiCRDHandler, setupLog)
217217
} else {
218-
setupLog.V(logsettings.LogInfo).Info("CAPI present.")
218+
setupLog.V(logs.LogInfo).Info("CAPI present.")
219219
if err = (&controller.ClusterReconciler{
220220
Config: mgr.GetConfig(),
221221
Client: mgr.GetClient(),
@@ -232,8 +232,23 @@ func capiWatchers(ctx context.Context, mgr ctrl.Manager, logger logr.Logger) {
232232
}
233233
}
234234

235-
// isCAPIInstalled returns true if CAPI is installed, false otherwise
236-
func isCAPIInstalled(ctx context.Context, c client.Client) (bool, error) {
235+
// capiCRDHandler restarts process if a CAPI CRD is updated
236+
func capiCRDHandler(gvk *schema.GroupVersionKind, action crd.ChangeType) {
237+
if action == crd.Modify {
238+
return
239+
}
240+
if gvk.Group == clusterv1.GroupVersion.Group && gvk.Version == clusterv1.GroupVersion.Version {
241+
setupLog.V(logs.LogInfo).Info("Initiating graceful restart due to CAPI CRD update",
242+
"GVK", gvk.String(), "Action", string(action))
243+
244+
if killErr := syscall.Kill(syscall.Getpid(), syscall.SIGTERM); killErr != nil {
245+
panic("kill -TERM failed")
246+
}
247+
}
248+
}
249+
250+
// isCAPIInstalled returns true if CAPI is installed with v1beta2 served, false otherwise
251+
func isCAPIInstalled(ctx context.Context, c client.Client, logger logr.Logger) (bool, error) {
237252
clusterCRD := &apiextensionsv1.CustomResourceDefinition{}
238253

239254
err := c.Get(ctx, types.NamespacedName{Name: "clusters.cluster.x-k8s.io"}, clusterCRD)
@@ -244,19 +259,14 @@ func isCAPIInstalled(ctx context.Context, c client.Client) (bool, error) {
244259
return false, err
245260
}
246261

247-
return true, nil
248-
}
249-
250-
// capiCRDHandler restarts process if a CAPI CRD is updated
251-
func capiCRDHandler(gvk *schema.GroupVersionKind, action crd.ChangeType) {
252-
if action == crd.Modify {
253-
return
254-
}
255-
if gvk.Group == clusterv1.GroupVersion.Group {
256-
if killErr := syscall.Kill(syscall.Getpid(), syscall.SIGTERM); killErr != nil {
257-
panic("kill -TERM failed")
262+
for _, version := range clusterCRD.Spec.Versions {
263+
if version.Name == clusterv1.GroupVersion.Version && version.Served {
264+
return true, nil
258265
}
259266
}
267+
268+
logger.V(logs.LogInfo).Info("clusterCRD CRD present but v1beta2 not served")
269+
return false, nil
260270
}
261271

262272
// getDiagnosticsOptions returns metrics options which can be used to configure a Manager.

go.mod

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/onsi/ginkgo/v2 v2.28.1
1010
github.com/onsi/gomega v1.39.1
1111
github.com/pkg/errors v0.9.1
12-
github.com/projectsveltos/libsveltos v1.8.0
12+
github.com/projectsveltos/libsveltos v1.8.1-0.20260422193357-a670bbae8df8
1313
github.com/spf13/pflag v1.0.10
1414
golang.org/x/text v0.36.0
1515
k8s.io/api v0.35.3
@@ -19,7 +19,7 @@ require (
1919
k8s.io/component-base v0.35.3
2020
k8s.io/klog/v2 v2.140.0
2121
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5
22-
sigs.k8s.io/cluster-api v1.12.5
22+
sigs.k8s.io/cluster-api v1.13.0
2323
sigs.k8s.io/controller-runtime v0.23.3
2424
)
2525

@@ -50,7 +50,7 @@ require (
5050
github.com/google/go-cmp v0.7.0 // indirect
5151
github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect
5252
github.com/google/uuid v1.6.0 // indirect
53-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect
53+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect
5454
github.com/inconshreveable/mousetrap v1.1.0 // indirect
5555
github.com/josharian/intern v1.0.0 // indirect
5656
github.com/json-iterator/go v1.1.12 // indirect
@@ -63,32 +63,32 @@ require (
6363
github.com/prometheus/client_model v0.6.2 // indirect
6464
github.com/prometheus/common v0.66.1 // indirect
6565
github.com/prometheus/procfs v0.16.1 // indirect
66-
github.com/spf13/cobra v1.10.1 // indirect
66+
github.com/spf13/cobra v1.10.2 // indirect
6767
github.com/x448/float16 v0.8.4 // indirect
6868
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
6969
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect
7070
go.opentelemetry.io/otel v1.43.0 // indirect
71-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect
72-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect
71+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect
72+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect
7373
go.opentelemetry.io/otel/metric v1.43.0 // indirect
7474
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
7575
go.opentelemetry.io/otel/trace v1.43.0 // indirect
76-
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
76+
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
7777
go.yaml.in/yaml/v2 v2.4.3 // indirect
7878
go.yaml.in/yaml/v3 v3.0.4 // indirect
7979
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
8080
golang.org/x/mod v0.34.0 // indirect
81-
golang.org/x/net v0.52.0 // indirect
82-
golang.org/x/oauth2 v0.34.0 // indirect
81+
golang.org/x/net v0.53.0 // indirect
82+
golang.org/x/oauth2 v0.36.0 // indirect
8383
golang.org/x/sync v0.20.0 // indirect
84-
golang.org/x/sys v0.42.0 // indirect
85-
golang.org/x/term v0.41.0 // indirect
84+
golang.org/x/sys v0.43.0 // indirect
85+
golang.org/x/term v0.42.0 // indirect
8686
golang.org/x/time v0.9.0 // indirect
8787
golang.org/x/tools v0.43.0 // indirect
8888
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
89-
google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 // indirect
90-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect
91-
google.golang.org/grpc v1.79.3 // indirect
89+
google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect
90+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect
91+
google.golang.org/grpc v1.80.0 // indirect
9292
google.golang.org/protobuf v1.36.11 // indirect
9393
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
9494
gopkg.in/inf.v0 v0.9.1 // indirect
@@ -98,6 +98,6 @@ require (
9898
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
9999
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
100100
sigs.k8s.io/randfill v1.0.0 // indirect
101-
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect
101+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect
102102
sigs.k8s.io/yaml v1.6.0 // indirect
103103
)

go.sum

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/v
7979
github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI=
8080
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
8181
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
82-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak=
83-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII=
82+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs=
83+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c=
8484
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
8585
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
8686
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -119,8 +119,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
119119
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
120120
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
121121
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
122-
github.com/projectsveltos/libsveltos v1.8.0 h1:yBHmiYpBbpPS6aNJOx+uOAvvBOQPkHE8cU4VKsXoAao=
123-
github.com/projectsveltos/libsveltos v1.8.0/go.mod h1:0K9ZLuYL/g0OonfhRVkHMyDYWuFt24EhvTtjTbUu3+Y=
122+
github.com/projectsveltos/libsveltos v1.8.1-0.20260422193357-a670bbae8df8 h1:XR0ebx6/L4q+GvYlmvNEhyrF5ALMMVSySgkJ5bW6iAw=
123+
github.com/projectsveltos/libsveltos v1.8.1-0.20260422193357-a670bbae8df8/go.mod h1:0K9ZLuYL/g0OonfhRVkHMyDYWuFt24EhvTtjTbUu3+Y=
124124
github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
125125
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
126126
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
@@ -132,8 +132,8 @@ github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlT
132132
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
133133
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
134134
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
135-
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
136-
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
135+
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
136+
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
137137
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
138138
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
139139
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -159,10 +159,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb
159159
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0=
160160
go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
161161
go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
162-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs=
163-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI=
164-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I=
165-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs=
162+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k=
163+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A=
164+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc=
165+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk=
166166
go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
167167
go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
168168
go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
@@ -171,8 +171,8 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC
171171
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
172172
go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
173173
go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
174-
go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A=
175-
go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4=
174+
go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=
175+
go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=
176176
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
177177
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
178178
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -187,16 +187,16 @@ golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWB
187187
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
188188
golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
189189
golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
190-
golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
191-
golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
192-
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
193-
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
190+
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
191+
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
192+
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
193+
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
194194
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
195195
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
196-
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
197-
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
198-
golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU=
199-
golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A=
196+
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
197+
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
198+
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
199+
golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
200200
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
201201
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
202202
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
@@ -205,14 +205,14 @@ golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
205205
golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
206206
gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=
207207
gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
208-
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
209-
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
210-
google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M=
211-
google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409/go.mod h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I=
212-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ=
213-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
214-
google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
215-
google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
208+
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
209+
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
210+
google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA=
211+
google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M=
212+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg=
213+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
214+
google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
215+
google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
216216
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
217217
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
218218
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -244,15 +244,15 @@ k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 h1:kBawHLSnx/mYHmRnNUf9d4CpjREbe
244244
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
245245
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM=
246246
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
247-
sigs.k8s.io/cluster-api v1.12.5 h1:kPfz096EpFuPz0lRurJvhSIzUgDfdbHzP68wOrZPb/M=
248-
sigs.k8s.io/cluster-api v1.12.5/go.mod h1:RdmTGGRMvAGIIQBljHUHNov/6Lgz7rmYXqzZNCK+Z4o=
247+
sigs.k8s.io/cluster-api v1.13.0 h1:xX0vAQ/a9mv0OwW+Tlx/EqmIdPHQAMp+T+gxalSZ3gc=
248+
sigs.k8s.io/cluster-api v1.13.0/go.mod h1:DNgWpqSGIc8tWI4vwCbgLhDcnDNuDZ2L/FQur4ulAW0=
249249
sigs.k8s.io/controller-runtime v0.23.3 h1:VjB/vhoPoA9l1kEKZHBMnQF33tdCLQKJtydy4iqwZ80=
250250
sigs.k8s.io/controller-runtime v0.23.3/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0=
251251
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
252252
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
253253
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
254254
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
255-
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs=
256-
sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
255+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2 h1:kwVWMx5yS1CrnFWA/2QHyRVJ8jM6dBA80uLmm0wJkk8=
256+
sigs.k8s.io/structured-merge-diff/v6 v6.3.2/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
257257
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
258258
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=

0 commit comments

Comments
 (0)